# How to run a PoS devnet on geth and prysm
Takes minutes to set up!
This has been mostly copied from https://docs.prylabs.network/docs/advanced/proof-of-stake-devnet.
Create devnet directory
`mkdir devnet && cd devnet`
Install prysm (CL):
```
git clone https://github.com/prysmaticlabs/prysm && cd prysm
go build -o=../beacon-chain ./cmd/beacon-chain
go build -o=../validator ./cmd/validator
go build -o=../prysmctl ./cmd/prysmctl
cd ..
```
Install geth(EL):
```git clone https://github.com/ethereum/go-ethereum && cd go-ethereum
make geth
cp ./build/bin/geth ../geth
cd ..
```
I have used a test jwt token from prysm documentation, should be ok for now: `0xfad2709d0bb03bf0e8ba3c99bea194575d3e98863133d1af638ed056d1d59345`
Paste this into `jwt.hex` in devnet directory
Create `genesis.json` in `devnet` directory
Create `config.yml` in `devnet` directory
Create `genesis.ssz` in devnet directory
Run geth:
`./geth --datadir=gethdata init genesis.json`
`./geth --http --http.api eth,net,web3 --ws --ws.api eth,net,web3 --authrpc.jwtsecret jwt.hex --datadir gethdata --nodiscover --syncmode full --discovery.port 30304 --port 30304 --http.port 8547 --ws.port 8548 --authrpc.port 8552`
Run prysm CL:
`./beacon-chain --datadir beacondata --min-sync-peers 1 --genesis-state genesis.ssz --bootstrap-node= --interop-eth1data-votes --chain-config-file config.yml --contract-deployment-block 0 --chain-id 32382 --accept-terms-of-use --jwt-secret jwt.hex --suggested-fee-recipient 0x123463a4B065722E99115D6c222f267d9cABb524 --minimum-peers-per-subnet 0 --enable-debug-rpc-endpoints --execution-endpoint gethdata/geth.ipc --peer=$PEER --p2p-udp-port 12001 --p2p-tcp-port 13001 --grpc-gateway-port 3501 --rpc-port 4001`
secret key of signer : `2e0834786285daccd064ca17f1654f67b4aef298acbb82cef9ec422fb4975622`