--- /dev/null
+#!/usr/sbin/nft -f
+
+flush ruleset
+
+table inet filter {
+ chain input {
+ type filter \
+ hook input \
+ priority 0;
+ policy drop;
+ iif lo \
+ accept \
+ comment "accept localhost traffic";
+ ct state invalid \
+ drop \
+ comment "drop invalid connections";
+ ct state established, related \
+ accept \
+ comment "accept traffic originated from us";
+ tcp dport 22 \
+ accept \
+ comment "accept SSH on default port";
+ tcp dport 5994 \
+ accept \
+ comment "accept VNC";
+ ip protocol icmp \
+ icmp type echo-request \
+ accept \
+ comment "accept ICMP for pinging";
+ }
+ chain forward {
+ type filter \
+ hook forward \
+ priority 0;
+ policy drop;
+ }
+ chain output {
+ type filter \
+ hook output \
+ priority 0;
+ policy accept;
+ }
+}
--- /dev/null
+#!/bin/sh
+set -e
+NAME_REPO='reform-system-image'
+URL_REPO="https://source.mnt.re/reform/${NAME_REPO}"
+NAME_IMG='pocket-reform-system-rk3588.img'
+NAME_IMG_GZ="${NAME_IMG}.gz"
+URL_IMG="${URL_REPO}/-/jobs/9939/artifacts/raw/${NAME_IMG_GZ}?inline=false"
+PATH_EMULATE_SH="${NAME_REPO}/emulate.sh"
+
+cd
+if [ ! -e "${NAME_REPO}" ]; then
+ git clone "${URL_REPO}"
+ sed -i 's/-vnc :94,share=force-shared/-vnc :94,share=ignore/' "${PATH_EMULATE_SH}"
+fi
+if [ ! -e "${NAME_IMG}" ]; then
+ wget "${POCKET_IMG}"
+ gunzip "${NAME_IMG_GZ}"
+fi
+"${PATH_EMULATE_SH}" "${NAME_IMG}"
+
--- /dev/null
+#!/bin/sh
+set -e
+cd $(dirname "$0")
+. lib/apt_get_digested
+. lib/constants_etc # PATH_ETC
+. lib/constants_ssh # PATH_REL_SSH, PATH_USER_SSH
+. lib/copy_dirtrees_of_tags
+. lib/core_setup
+. lib/expect_n_args
+. lib/path_tmp_timestamped
+. lib/prefixed_msg
+. lib/put_finished_marker
+
+prefixed_msg_init
+prefixed_msg 'starting'
+
+INSTALL_TAGS='all minimal_server user keep_if_installed:systemd-resolved reform-qemu'
+
+expect_n_args 1 2 'HOSTNAME, [FQDN]' $@
+HOSTNAME="$1"
+FQDN="$2"
+
+prefixed_msg_no_nl 'Determining external IP …'
+for _CANDIDATE in $(hostname -I); do
+ _START=$(echo ${_CANDIDATE} | cut -d'.' -f1)
+ if [ "$(echo -n ${_START} | wc -c)" -gt 3 ]; then # ignore IPv6
+ continue
+ fi
+ if [ "${_START}" = "127" -o "${_START}" = "192" -o "${_START}" = "172" ]; then
+ continue
+ fi
+ EXTERNAL_IP="${_CANDIDATE}"
+ break
+done
+echo " it's: ${EXTERNAL_IP}"
+
+if [ ! -z "${FQDN}" ]; then
+ prefixed_msg "Ensuring provided FQDN ${FQDN} maps to it …"
+ IP_BY_DNS=$(getent ahostsv4 "${FQDN}" | head -1 | cut -d' ' -f1)
+ if [ ! "${IP_BY_DNS}" = "${EXTERNAL_IP}" ]; then
+ abort "DNS mapping provided FQDN '${FQDN}' to ${IP_BY_DNS} rather than this system's external IP ${EXTERNAL_IP}."
+ fi
+fi
+
+core_setup "${HOSTNAME}" "${FQDN}" "${EXTERNAL_IP}" "${INSTALL_TAGS}"
+
+prefixed_msg 'Moving SSH data from root to user …'
+mkdir -p "${PATH_USER_SSH}"
+mv "/root/${PATH_REL_SSH}/authorized_keys" "${PATH_USER_SSH}/"
+chown -R "${USERNAME}:${USERNAME}" "${PATH_USER_SSH}"
+
+prefixed_msg 'Enabling firewall …'
+systemctl --quiet enable --now nftables
+
+put_finished_marker 'setup_reform_qemu'
+prefixed_msg_exit