# Baremetal

\[Author: Dood]

### System Requirements <a href="#system-requirements" id="system-requirements"></a>

| CPU   | OS        | RAM    | DISK            |
| ----- | --------- | ------ | --------------- |
| 4c/8t | Debian 12 | >=16GB | >= 1TB SSD/NVME |

{% hint style="info" %}
The archive node size is 300G as of 04.03.2024&#x20;
{% endhint %}

{% hint style="warning" %}
All commands in this guide are supposed to be executed as `root`
{% endhint %}

## 📜 Scroll

**Unofficial Docs & Support**: &#x20;

* [Running a Node](https://scrollzkp.notion.site/Running-a-Scroll-L2geth-Node-Scroll-Mainnet-9d7b8aa810fc4cc4ae4add8b707a392d#6d5d8f157b6243128dbe2742a2bc272c)&#x20;
* [Namespace](https://scrollzkp.notion.site/Scroll-RPCs-scroll-namespace-e756b0df98fe42cda8a707083486f9e8)
* [Discord Server](https://discord.gg/99ERMfPC)
* [Github](https://github.com/scroll-tech/)

## Pre-Requisites

```
apt update -y && apt upgrade -y && apt autoremove -y
apt install -y build-essential make gcc musl-dev git curl
```

## Setting up Firewall

Set explicit default UFW rules

```bash
sudo ufw default deny incoming
sudo ufw default allow outgoing
```

Allow SSH

```bash
sudo ufw allow 22/tcp
```

Allow remote RPC connections with Linea Node

```bash
sudo ufw allow from ${REMOTE.HOST.IP} to any port 8546
```

{% hint style="warning" %}
Not advised to allow all or unknown IP address to RPC port
{% endhint %}

Enable Firewall

```bash
sudo ufw enable
```

```
wget https://golang.org/dl/go1.21.6.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.21.6.linux-amd64.tar.gz
echo 'export PATH=/usr/local/go/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

#check Go version

go version
```

## Setup scroll client

#### Compile Binaries

```
git clone https://github.com/scroll-tech/go-ethereum /root/l2geth-source
cd /root/l2geth-source && make nccc_geth
mkdir /root/scroll-datadir
```

#### Create service to run Scroll Node

If possible, replace '--l1.endpoint "<https://eth.llamarpc.com>"'  with your own L1 ethereum endpoint.

```
echo "[Unit]
Description=Scroll Node
After=network.target
StartLimitIntervalSec=60
StartLimitBurst=3

[Service]
Type=simple
Restart=on-failure
RestartSec=5
TimeoutSec=900
User=root
Nice=0
LimitNOFILE=200000
WorkingDirectory=/root/l2geth-source
ExecStart=/root/l2geth-source/build/bin/geth \
--scroll \
--datadir '/root/scroll-datadir' \
--gcmode archive \
--syncmode full \
--cache.noprefetch \
--http \
--http.corsdomain '*' \
--http.vhosts '*' \
--http.addr '0.0.0.0' \
--http.port 8546 \
--http.api 'eth,net,web3,debug,scroll' \
--l1.endpoint "https://eth.llamarpc.com" \
--rollup.verify \
--l1.confirmations finalized \
--verbosity 3 \
--metrics \
--metrics.addr '0.0.0.0' \
--metrics.port 6060 \
--maxpeers 100 \
--port 30303
KillSignal=SIGHUP

[Install]
WantedBy=multi-user.target" >> /etc/systemd/system/scroll-node.service
```

```
systemctl daemon-reload
systemctl start scroll-node
systemctl enable scroll-node
```

## Logging

```
journalctl -fu scroll-node
```

#### Get Sync status via curl (replace $YOURIP$ with the IP of your server)

```
curl -H "Content-type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' $YOURIP$:8546
curl -H "Content-type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"scroll_syncStatus","params":[],"id":1}' $YOURIP$:8546
```

#### References

* [Running a Node](https://scrollzkp.notion.site/Running-a-Scroll-L2geth-Node-Scroll-Mainnet-9d7b8aa810fc4cc4ae4add8b707a392d#6d5d8f157b6243128dbe2742a2bc272c)&#x20;
* [Namespace](https://scrollzkp.notion.site/Scroll-RPCs-scroll-namespace-e756b0df98fe42cda8a707083486f9e8)
* [Discord Server](https://discord.gg/99ERMfPC)
* [Github](https://github.com/scroll-tech/)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.infradao.com/archive-nodes-101/scroll/baremetal.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
