Skip to content

Commit eaf7da9

Browse files
committed
Add Unfurl to the prod installer
1 parent 6e38cae commit eaf7da9

File tree

5 files changed

+206
-40
lines changed

5 files changed

+206
-40
lines changed

production/install

+123-40
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ BITCOIN_INSTALL=ON
3939
BISQ_INSTALL=ON
4040
ELEMENTS_INSTALL=ON
4141

42+
# install UNFURL
43+
UNFURL_INSTALL=ON
44+
4245
# configure 4 network instances
4346
BITCOIN_MAINNET_ENABLE=ON
4447
BITCOIN_MAINNET_MINFEE_ENABLE=ON
@@ -48,6 +51,9 @@ BISQ_MAINNET_ENABLE=ON
4851
ELEMENTS_LIQUID_ENABLE=ON
4952
ELEMENTS_LIQUIDTESTNET_ENABLE=ON
5053

54+
# install Electrs
55+
ELECTRS_INSTALL=ON
56+
5157
# enable lightmode and disable compaction to fit on 1TB SSD drive
5258
BITCOIN_ELECTRS_LIGHT_MODE=ON
5359
BITCOIN_ELECTRS_COMPACTION=OFF
@@ -278,6 +284,12 @@ BISQ_GROUP=bisq
278284
# bisq home folder, needs about 1GB
279285
BISQ_HOME=/bisq
280286

287+
# Unfurl user/group
288+
UNFURL_USER=unfurl
289+
UNFURL_GROUP=unfurl
290+
# Unfurl home folder
291+
UNFURL_HOME=/unfurl
292+
281293
# liquid user/group
282294
ELEMENTS_USER=elements
283295
ELEMENTS_GROUP=elements
@@ -315,6 +327,13 @@ BISQ_REPO_BRANCH=master
315327
BISQ_LATEST_RELEASE=master
316328
echo -n '.'
317329

330+
UNFURL_REPO_URL=https://github.com/mempool/mempool
331+
UNFURL_REPO_NAME=unfurl
332+
UNFURL_REPO_BRANCH=master
333+
#UNFURL_LATEST_RELEASE=$(curl -s https://api.github.com/repos/mempool/mempool/releases/latest|grep tag_name|head -1|cut -d '"' -f4)
334+
UNFURL_LATEST_RELEASE=master
335+
echo -n '.'
336+
318337
ELEMENTS_REPO_URL=https://github.com/ElementsProject/elements
319338
ELEMENTS_REPO_NAME=elements
320339
ELEMENTS_REPO_BRANCH=master
@@ -351,6 +370,10 @@ DEBIAN_PKG+=(libboost-system-dev libboost-filesystem-dev libboost-chrono-dev lib
351370
DEBIAN_PKG+=(nodejs npm mariadb-server nginx-core python3-certbot-nginx rsync ufw)
352371
DEBIAN_PKG+=(geoipupdate)
353372

373+
DEBIAN_UNFURL_PKG=()
374+
DEBIAN_UNFURL_PKG+=(cups chromium-bsu libatk1.0 libatk-bridge2.0 libxkbcommon-dev libxcomposite-dev)
375+
DEBIAN_UNFURL_PKG+=(libxdamage-dev libxrandr-dev libgbm-dev libpango1.0-dev libasound-dev)
376+
354377
# packages needed for mempool ecosystem
355378
FREEBSD_PKG=()
356379
FREEBSD_PKG+=(zsh sudo git screen curl wget calc neovim)
@@ -712,6 +735,7 @@ Signet:Enable Bitcoin Signet:ON
712735
Liquid:Enable Elements Liquid:ON
713736
Liquidtestnet:Enable Elements Liquidtestnet:ON
714737
Bisq:Enable Bisq:ON
738+
Unfurl:Enable Unfurl:ON
715739
EOF
716740

717741
cat $input | sed -e 's/^/"/' -e 's/:/" "/g' -e 's/$/"/' >$output
@@ -785,6 +809,12 @@ else
785809
ELEMENTS_INSTALL=OFF
786810
fi
787811

812+
if [ "${BITCOIN_INSTALL}" = ON -o "${ELEMENTS_INSTALL}" = ON ];then
813+
ELECTRS_INSTALL=ON
814+
else
815+
ELECTRS_INSTALL=OFF
816+
fi
817+
788818
if grep Bisq $tempfile >/dev/null 2>&1;then
789819
BISQ_INSTALL=ON
790820
BISQ_MAINNET_ENABLE=ON
@@ -793,6 +823,12 @@ else
793823
BISQ_MAINNET_ENABLE=OFF
794824
fi
795825

826+
if grep Unfurl $tempfile >/dev/null 2>&1;then
827+
UNFURL_INSTALL=ON
828+
else
829+
UNFURL_INSTALL=OFF
830+
fi
831+
796832
##################
797833
## dialog part 2 #
798834
##################
@@ -1074,52 +1110,55 @@ fi
10741110
# Bitcoin -> Electrs installation #
10751111
###################################
10761112

1077-
echo "[*] Creating Bitcoin Electrs data folder"
1078-
osSudo "${ROOT_USER}" mkdir -p "${BITCOIN_ELECTRS_HOME}"
1079-
osSudo "${ROOT_USER}" chown -R "${BITCOIN_USER}:${BITCOIN_GROUP}" "${BITCOIN_ELECTRS_HOME}"
1080-
if [ "${BITCOIN_MAINNET_ENABLE}" = ON ];then
1081-
osSudo "${ROOT_USER}" chown -R "${BITCOIN_USER}:${BITCOIN_GROUP}" "${ELECTRS_MAINNET_DATA}"
1082-
fi
1083-
if [ "${BITCOIN_TESTNET_ENABLE}" = ON ];then
1084-
osSudo "${ROOT_USER}" chown -R "${BITCOIN_USER}:${BITCOIN_GROUP}" "${ELECTRS_TESTNET_DATA}"
1085-
fi
1086-
if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then
1087-
osSudo "${ROOT_USER}" chown -R "${BITCOIN_USER}:${BITCOIN_GROUP}" "${ELECTRS_SIGNET_DATA}"
1088-
fi
1113+
if [ "${ELECTRS_INSTALL}" = ON ];then
10891114

1090-
echo "[*] Cloning Bitcoin Electrs repo from ${BITCOIN_ELECTRS_REPO_URL}"
1091-
osSudo "${BITCOIN_USER}" git config --global advice.detachedHead false
1092-
osSudo "${BITCOIN_USER}" git clone --branch "${BITCOIN_ELECTRS_REPO_BRANCH}" "${BITCOIN_ELECTRS_REPO_URL}" "${BITCOIN_HOME}/${BITCOIN_ELECTRS_REPO_NAME}"
1115+
echo "[*] Creating Bitcoin Electrs data folder"
1116+
osSudo "${ROOT_USER}" mkdir -p "${BITCOIN_ELECTRS_HOME}"
1117+
osSudo "${ROOT_USER}" chown -R "${BITCOIN_USER}:${BITCOIN_GROUP}" "${BITCOIN_ELECTRS_HOME}"
1118+
if [ "${BITCOIN_MAINNET_ENABLE}" = ON ];then
1119+
osSudo "${ROOT_USER}" chown -R "${BITCOIN_USER}:${BITCOIN_GROUP}" "${ELECTRS_MAINNET_DATA}"
1120+
fi
1121+
if [ "${BITCOIN_TESTNET_ENABLE}" = ON ];then
1122+
osSudo "${ROOT_USER}" chown -R "${BITCOIN_USER}:${BITCOIN_GROUP}" "${ELECTRS_TESTNET_DATA}"
1123+
fi
1124+
if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then
1125+
osSudo "${ROOT_USER}" chown -R "${BITCOIN_USER}:${BITCOIN_GROUP}" "${ELECTRS_SIGNET_DATA}"
1126+
fi
10931127

1094-
echo "[*] Checking out Electrs ${BITCOIN_ELECTRS_LATEST_RELEASE}"
1095-
osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_HOME}/${BITCOIN_ELECTRS_REPO_NAME} && git checkout ${BITCOIN_ELECTRS_LATEST_RELEASE}"
1128+
echo "[*] Cloning Bitcoin Electrs repo from ${BITCOIN_ELECTRS_REPO_URL}"
1129+
osSudo "${BITCOIN_USER}" git config --global advice.detachedHead false
1130+
osSudo "${BITCOIN_USER}" git clone --branch "${BITCOIN_ELECTRS_REPO_BRANCH}" "${BITCOIN_ELECTRS_REPO_URL}" "${BITCOIN_HOME}/${BITCOIN_ELECTRS_REPO_NAME}"
10961131

1097-
case $OS in
1098-
FreeBSD)
1099-
echo "[*] Installing Rust from pkg install"
1100-
;;
1101-
Debian)
1102-
echo "[*] Installing Rust from rustup.rs"
1103-
osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_ELECTRS_HOME} && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y"
1104-
;;
1105-
esac
1132+
echo "[*] Checking out Electrs ${BITCOIN_ELECTRS_LATEST_RELEASE}"
1133+
osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_HOME}/${BITCOIN_ELECTRS_REPO_NAME} && git checkout ${BITCOIN_ELECTRS_LATEST_RELEASE}"
1134+
1135+
case $OS in
1136+
FreeBSD)
1137+
echo "[*] Installing Rust from pkg install"
1138+
;;
1139+
Debian)
1140+
echo "[*] Installing Rust from rustup.rs"
1141+
osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_ELECTRS_HOME} && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y"
1142+
;;
1143+
esac
11061144

1107-
echo "[*] Building Bitcoin Electrs release binary"
1108-
osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_ELECTRS_HOME} && cargo run --release --bin electrs -- --version" || true
1145+
echo "[*] Building Bitcoin Electrs release binary"
1146+
osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_ELECTRS_HOME} && cargo run --release --bin electrs -- --version" || true
11091147

1110-
case $OS in
1111-
FreeBSD)
1112-
echo "[*] Patching Bitcoin Electrs code for FreeBSD"
1113-
osSudo "${BITCOIN_USER}" sh -c "cd \"${BITCOIN_HOME}/.cargo/registry/src/github.com-1ecc6299db9ec823/sysconf-0.3.4\" && patch -p1 < \"${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/freebsd/sysconf.patch\""
1114-
osSudo "${BITCOIN_USER}" sh -c "cd \"${BITCOIN_ELECTRS_HOME}/src/new_index/\" && sed -i.bak -e s/Snappy/None/ db.rs && rm db.rs.bak"
1115-
osSudo "${BITCOIN_USER}" sh -c "cd \"${BITCOIN_ELECTRS_HOME}/src/bin/\" && sed -i.bak -e 's/from_secs(5)/from_secs(1)/' electrs.rs && rm electrs.rs.bak"
1116-
;;
1117-
Debian)
1118-
;;
1119-
esac
1148+
case $OS in
1149+
FreeBSD)
1150+
echo "[*] Patching Bitcoin Electrs code for FreeBSD"
1151+
osSudo "${BITCOIN_USER}" sh -c "cd \"${BITCOIN_HOME}/.cargo/registry/src/github.com-1ecc6299db9ec823/sysconf-0.3.4\" && patch -p1 < \"${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/freebsd/sysconf.patch\""
1152+
osSudo "${BITCOIN_USER}" sh -c "cd \"${BITCOIN_ELECTRS_HOME}/src/new_index/\" && sed -i.bak -e s/Snappy/None/ db.rs && rm db.rs.bak"
1153+
osSudo "${BITCOIN_USER}" sh -c "cd \"${BITCOIN_ELECTRS_HOME}/src/bin/\" && sed -i.bak -e 's/from_secs(5)/from_secs(1)/' electrs.rs && rm electrs.rs.bak"
1154+
;;
1155+
Debian)
1156+
;;
1157+
esac
11201158

1121-
echo "[*] Building Bitcoin Electrs release binary"
1122-
osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_ELECTRS_HOME} && cargo run --release --bin electrs -- --version"
1159+
echo "[*] Building Bitcoin Electrs release binary"
1160+
osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_ELECTRS_HOME} && cargo run --release --bin electrs -- --version"
1161+
fi
11231162

11241163
##################################
11251164
# Liquid -> Electrs installation #
@@ -1246,6 +1285,50 @@ if [ "${BISQ_INSTALL}" = ON ];then
12461285
esac
12471286
fi
12481287

1288+
#######################
1289+
# Unfurl installation #
1290+
#######################
1291+
1292+
if [ "${UNFURL_INSTALL}" = ON ];then
1293+
1294+
echo "[*] Creating Unfurl user"
1295+
osGroupCreate "${UNFURL_GROUP}"
1296+
osUserCreate "${UNFURL_USER}" "${UNFURL_HOME}" "${UNFURL_GROUP}"
1297+
osSudo "${ROOT_USER}" chsh -s `which zsh` "${UNFURL_USER}"
1298+
1299+
echo "[*] Creating Unfurl folder"
1300+
osSudo "${ROOT_USER}" mkdir -p "${UNFURL_HOME}"
1301+
osSudo "${ROOT_USER}" chown -R "${UNFURL_USER}:${UNFURL_GROUP}" "${UNFURL_HOME}"
1302+
osSudo "${UNFURL_USER}" touch "${UNFURL_HOME}/.zshrc"
1303+
1304+
echo "[*] Insalling Unfurl source"
1305+
case $OS in
1306+
1307+
FreeBSD)
1308+
echo "[*] FIXME: Unfurl must be installed manually on FreeBSD"
1309+
;;
1310+
1311+
Debian)
1312+
echo "[*] Installing packages for Unfurl"
1313+
osPackageInstall ${DEBIAN_UNFURL_PKG[@]}
1314+
echo "[*] Cloning Mempool (Unfurl) repo from ${UNFURL_REPO_URL}"
1315+
osSudo "${UNFURL_USER}" git config --global pull.rebase true
1316+
osSudo "${UNFURL_USER}" git config --global advice.detachedHead false
1317+
osSudo "${UNFURL_USER}" git clone --branch "${UNFURL_REPO_BRANCH}" "${UNFURL_REPO_URL}" "${UNFURL_HOME}/${UNFURL_REPO_NAME}"
1318+
osSudo "${UNFURL_USER}" ln -s unfurl/production/unfurl-build upgrade
1319+
osSudo "${UNFURL_USER}" ln -s unfurl/production/unfurl-kill stop
1320+
osSudo "${UNFURL_USER}" ln -s unfurl/production/unfurl-start start
1321+
echo "[*] Installing nvm.sh from GitHub"
1322+
osSudo "${UNFURL_USER}" sh -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | zsh'
1323+
1324+
echo "[*] Building NodeJS via nvm.sh"
1325+
osSudo "${UNFURL_USER}" zsh -c 'source ~/.zshrc ; nvm install v16.16.0 --shared-zlib'
1326+
1327+
;;
1328+
esac
1329+
1330+
fi
1331+
12491332
################################
12501333
# Bitcoin instance for Mainnet #
12511334
################################

production/mempool-config.unfurl.json

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"SERVER": {
3+
"HOST": "https://mempool.space",
4+
"HTTP_PORT": 8001
5+
},
6+
"MEMPOOL": {
7+
"HTTP_HOST": "https://mempool.space",
8+
"HTTP_PORT": 443
9+
},
10+
"PUPPETEER": {
11+
"CLUSTER_SIZE": 8
12+
}
13+
}

production/unfurl-build

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#!/usr/bin/env zsh
2+
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$HOME/bin
3+
HOSTNAME=$(hostname)
4+
LOCATION=$(hostname|cut -d . -f2)
5+
LOCKFILE="${HOME}/lock"
6+
REF=$(echo "${1:=origin/master}"|sed -e 's!:!/!')
7+
8+
if [ -f "${LOCKFILE}" ];then
9+
echo "upgrade already running? check lockfile ${LOCKFILE}"
10+
exit 1
11+
fi
12+
13+
# on exit, remove lockfile but preserve exit code
14+
trap "rv=\$?; rm -f "${LOCKFILE}"; exit \$rv" INT TERM EXIT
15+
16+
# create lockfile
17+
touch "${LOCKFILE}"
18+
19+
# notify logged in users
20+
echo "Upgrading unfurler to ${REF}" | wall
21+
22+
update_repo()
23+
{
24+
echo "[*] Upgrading unfurler to ${REF}"
25+
cd "$HOME/unfurl/unfurler" || exit 1
26+
27+
git fetch origin || exit 1
28+
for remote in origin;do
29+
git remote add "${remote}" "https://github.com/${remote}/mempool" >/dev/null 2>&1
30+
git fetch "${remote}" || exit 1
31+
done
32+
33+
if [ $(git tag -l "${REF}") ];then
34+
git reset --hard "tags/${REF}" || exit 1
35+
elif [ $(git branch -r -l "origin/${REF}") ];then
36+
git reset --hard "origin/${REF}" || exit 1
37+
else
38+
git reset --hard "${REF}" || exit 1
39+
fi
40+
export HASH=$(git rev-parse HEAD)
41+
}
42+
43+
build_backend()
44+
{
45+
echo "[*] Building backend for unfurler"
46+
[ -z "${HASH}" ] && exit 1
47+
cd "$HOME/unfurl/unfurler" || exit 1
48+
if [ ! -e "config.json" ];then
49+
cp "${HOME}/unfurl/production/mempool-config.unfurl.json" "config.json"
50+
fi
51+
npm install || exit 1
52+
npm run build || exit 1
53+
}
54+
55+
update_repo
56+
build_backend
57+
58+
# notify everyone
59+
echo "${HOSTNAME} unfurl updated to \`${REF}\` @ \`${HASH}\`" | /usr/local/bin/keybase chat send --nonblock --channel general mempool.dev
60+
echo "${HOSTNAME} unfurl updated to \`${REF}\` @ \`${HASH}\`" | /usr/local/bin/keybase chat send --nonblock --channel general "mempool.ops.${LOCATION}"
61+
62+
exit 0

production/unfurl-kill

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#!/usr/bin/env zsh
2+
killall sh node

production/unfurl-start

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/usr/bin/env zsh
2+
export NVM_DIR="$HOME/.nvm"
3+
source "$NVM_DIR/nvm.sh"
4+
5+
cd "${HOME}/unfurl/unfurler/" && \
6+
screen -dmS "unfurl" sh -c 'while true;do npm run start-production;sleep 1;done'

0 commit comments

Comments
 (0)