diff --git a/aports/main/postmarketos-mkinitfs-hook-debug-shell/20-debug-shell.sh b/aports/main/postmarketos-mkinitfs-hook-debug-shell/20-debug-shell.sh new file mode 100644 index 00000000..460c9c10 --- /dev/null +++ b/aports/main/postmarketos-mkinitfs-hook-debug-shell/20-debug-shell.sh @@ -0,0 +1,56 @@ +#!/bin/sh +# shellcheck disable=SC1091 +. ./init_functions.sh +TELNET_PORT=23 + +setup_usb_network +start_udhcpd + +show_splash /splash-debug-shell.ppm.gz + +echo "Create 'pmos_continue_boot' script" +{ + echo "#!/bin/sh" + echo "pkill -f pmos_shell" + echo "pkill -f pmos_loop_forever" + echo "pkill -f telnetd.*:${TELNET_PORT}" +} >/usr/bin/pmos_continue_boot +chmod +x /usr/bin/pmos_continue_boot + +echo "Create 'pmos_shell' script" +{ + echo "#!/bin/sh" + echo "sh" +} >/usr/bin/pmos_shell +chmod +x /usr/bin/pmos_shell + +echo "Create 'pmos_loop_forever' script" +{ + echo "#!/bin/sh" + echo '. /init_functions.sh' + echo "loop_forever" +} >/usr/bin/pmos_loop_forever +chmod +x /usr/bin/pmos_loop_forever + +echo "Start the telnet daemon" +{ + echo "#!/bin/sh" + echo "echo \"Type 'pmos_continue_boot' to continue booting:\"" + echo "sh" +} >/telnet_connect.sh +chmod +x /telnet_connect.sh +telnetd -b "${IP}:${TELNET_PORT}" -l /telnet_connect.sh + +echo "---" +echo "WARNING: debug-shell is active on ${IP}:${TELNET_PORT}." +echo "This is a security hole! Only use it for debugging, and" +echo "uninstall the debug-shell hook afterwards!" +echo "---" + +if tty -s; then + echo "Exit the shell to continue booting:" + pmos_shell +else + echo "No tty attached, looping forever." + pmos_loop_forever +fi diff --git a/aports/main/postmarketos-mkinitfs-hook-debug-shell/APKBUILD b/aports/main/postmarketos-mkinitfs-hook-debug-shell/APKBUILD new file mode 100644 index 00000000..0e604ed8 --- /dev/null +++ b/aports/main/postmarketos-mkinitfs-hook-debug-shell/APKBUILD @@ -0,0 +1,16 @@ +pkgname=postmarketos-mkinitfs-hook-debug-shell +pkgver=0.1.1 +pkgrel=0 +pkgdesc="Root shell in the initramfs (security hole, for debugging only)" +url="https://github.com/postmarketOS" +depends="postmarketos-mkinitfs" +source="20-debug-shell.sh" +arch="noarch" +license="GPL2" + +package() { + mkdir -p "$pkgdir"/etc/postmarketos-mkinitfs/hooks/ + install -Dm644 "$srcdir"/20-debug-shell.sh \ + "$pkgdir"/etc/postmarketos-mkinitfs/hooks/ +} +sha512sums="30df4a3e2f8a82c8c83e80e645fb10516bfae51bc014c28b7d73d48bd0b2f238c186909a0727e5636cf7087aa1e4a348c83a6cf26e99552cea80922d4086627f 20-debug-shell.sh" diff --git a/aports/main/postmarketos-mkinitfs-hook-usb-shell/20-usb-shell.sh b/aports/main/postmarketos-mkinitfs-hook-usb-shell/20-usb-shell.sh deleted file mode 100644 index 2d945b6c..00000000 --- a/aports/main/postmarketos-mkinitfs-hook-usb-shell/20-usb-shell.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -. ./init_functions.sh -TELNET_PORT=24 - -setup_usb_network -start_udhcpd -telnetd -b "${IP}:${TELNET_PORT}" -l /bin/sh - -echo "---" -echo "WARNING: usb shell is active on ${IP}:${TELNET_PORT}." -echo "This is a security hole! Only use it for debugging, and" -echo "uninstall the usb-shell hook afterwards!" -echo "---" diff --git a/aports/main/postmarketos-mkinitfs-hook-usb-shell/APKBUILD b/aports/main/postmarketos-mkinitfs-hook-usb-shell/APKBUILD deleted file mode 100644 index c5f880ab..00000000 --- a/aports/main/postmarketos-mkinitfs-hook-usb-shell/APKBUILD +++ /dev/null @@ -1,17 +0,0 @@ -pkgname=postmarketos-mkinitfs-hook-usb-shell -pkgver=0.1.0 -pkgrel=1 -pkgdesc="Root shell in the initramfs (security hole, for debugging only)" -url="https://github.com/postmarketOS" -# multipath-tools: kpartx -depends="postmarketos-mkinitfs" -source="20-usb-shell.sh" -arch="noarch" -license="GPL2" - -package() { - mkdir -p "$pkgdir"/etc/postmarketos-mkinitfs/hooks/ - install -Dm644 "$srcdir"/20-usb-shell.sh \ - "$pkgdir"/etc/postmarketos-mkinitfs/hooks/ -} -sha512sums="40c6c445fdd03f8c76ba39075e9112ca963dd832f392e469057b622826f274604ec950bbbb89620c5c88e5d76caa0fa4665e445e33ebe31d4c566d4359d24935 20-usb-shell.sh" diff --git a/aports/main/postmarketos-mkinitfs/APKBUILD b/aports/main/postmarketos-mkinitfs/APKBUILD index 8b83ecc0..18142738 100644 --- a/aports/main/postmarketos-mkinitfs/APKBUILD +++ b/aports/main/postmarketos-mkinitfs/APKBUILD @@ -1,5 +1,5 @@ pkgname=postmarketos-mkinitfs -pkgver=0.5.4 +pkgver=0.5.5 pkgrel=0 pkgdesc="Tool to generate initramfs images for postmarketOS" url="https://github.com/postmarketOS" @@ -22,6 +22,6 @@ package() { "$pkgdir/sbin/mkinitfs" mkdir -p "$pkgdir/etc/postmarketos-mkinitfs/hooks/" } -sha512sums="e1849a13ee696e76dc6c734eda984bcc6a6e2e3d8a62a4df0778a8e338dc0bf9d967fa263ae6e57c14a0cb516c6004c6e251262a1711ad47f1ce4c622727a1d7 init.sh.in -1512d052890d6d8528f6dbca90eacd76664b56a00c24c980a5be900fdf290f24dbf42c8f3ebf43ea2c832046b4a81ed5d69401ddf5cea2516f8265b083a15ff3 init_functions.sh -76d0f11fbd7207e3fc7382d2cc554c280a015157b182fe6ddfc31d861066cfba2be39ebc05970207853c9fae81f950c361cae4aaeafff0873ce99f2c3268ad8f mkinitfs.sh" +sha512sums="9eaf7c1fa3bd8c4e065b523dbdf98cd5d002629c1691d388feca8ae7784ffc8e901d92265d6538fd92689483673a65e175e8b8b2c893bbe5746a07ff20a65e82 init.sh.in +cf2bbf7908032bee827676fe218bebc0171a84417f9e93cf20809b3d9392f4d0d84c33023960519170024d5c38e392d39a77640dbeed324fa4f96a71798920ad init_functions.sh +5bb521186c5f6586136ab3edb13d2ba44c00a84e9d18f255f5e92305bf78ff5aa9bd414d7a50eda4168e5c6eadd87d62fd4169f370fd18e0ebd291fcf2103a9f mkinitfs.sh" diff --git a/aports/main/postmarketos-mkinitfs/init.sh.in b/aports/main/postmarketos-mkinitfs/init.sh.in index d0af68c2..533f82fa 100644 --- a/aports/main/postmarketos-mkinitfs/init.sh.in +++ b/aports/main/postmarketos-mkinitfs/init.sh.in @@ -30,7 +30,7 @@ set_framebuffer_mode show_splash /splash-loading.ppm.gz # Always run dhcp daemon/usb networking for now (later this should only -# be enabled, when having the usb-shell hook installed for debugging, +# be enabled, when having the debug-shell hook installed for debugging, # or get activated after the initramfs is done with an OpenRC service). setup_usb_network start_udhcpd @@ -55,6 +55,6 @@ umount /dev exec switch_root /sysroot /sbin/init echo "ERROR: switch_root failed!" -echo "Looping forever. Install and use the usb-shell hook to debug this." -echo "For more information, see " +echo "Looping forever. Install and use the debug-shell hook to debug this." +echo "For more information, see " loop_forever diff --git a/aports/main/postmarketos-mkinitfs/init_functions.sh b/aports/main/postmarketos-mkinitfs/init_functions.sh index a3564dd4..01b163d5 100644 --- a/aports/main/postmarketos-mkinitfs/init_functions.sh +++ b/aports/main/postmarketos-mkinitfs/init_functions.sh @@ -240,6 +240,9 @@ start_udhcpd() { if [ -z $INTERFACE ]; then ifconfig usb0 "$IP" && INTERFACE=usb0 fi + if [ -z $INTERFACE ]; then + ifconfig eth0 "$IP" && INTERFACE=eth0 + fi # Create /etc/udhcpd.conf { @@ -277,12 +280,6 @@ show_splash() { fbsplash -s /tmp/splash.ppm } -echo_connect_ssh_message() { - echo "Your root partition has been decrypted successfully!" - echo "You can connect to your device using SSH in a few seconds:" - echo "ssh user@$IP" -} - start_msm_refresher() { # shellcheck disable=SC2154,SC2086 if [ "${deviceinfo_msm_refresher}" = "true" ]; then diff --git a/aports/main/postmarketos-mkinitfs/mkinitfs.sh b/aports/main/postmarketos-mkinitfs/mkinitfs.sh index e8679ce1..87ce4f1a 100644 --- a/aports/main/postmarketos-mkinitfs/mkinitfs.sh +++ b/aports/main/postmarketos-mkinitfs/mkinitfs.sh @@ -240,7 +240,8 @@ generate_splash_screens() "splash-noboot" "boot partition not found\\nhttps://postmarketos.org/troubleshooting" "--center" \ "splash-noinitramfsextra" "initramfs-extra not found\\nhttps://postmarketos.org/troubleshooting" "--center" \ "splash-nosystem" "system partition not found\\nhttps://postmarketos.org/troubleshooting" "--center" \ - "splash-mounterror" "unable to mount root partition\\nhttps://postmarketos.org/troubleshooting" "--center" + "splash-mounterror" "unable to mount root partition\\nhttps://postmarketos.org/troubleshooting" "--center" \ + "splash-debug-shell" "WARNING\\ndebug-shell is active\\nhttps://postmarketos.org/debug-shell" "--center" # Ensure cache folder exists mkdir -p "${splash_cache_dir}" diff --git a/pmb/parse/arguments.py b/pmb/parse/arguments.py index afd10d6b..fbddb783 100644 --- a/pmb/parse/arguments.py +++ b/pmb/parse/arguments.py @@ -82,7 +82,7 @@ def arguments_initfs(subparser): hook_del = sub.add_parser("hook_del", help="uninstall a hook package") for action in [hook_add, hook_del]: action.add_argument("hook", help="name of the hook aport, without the" - " '" + pmb.config.initfs_hook_prefix + "' prefix, for example: 'usb-shell'") + " '" + pmb.config.initfs_hook_prefix + "' prefix, for example: 'debug-shell'") # ls, build, extract ls = sub.add_parser("ls", help="list initramfs contents") diff --git a/pmb/qemu/run.py b/pmb/qemu/run.py index f5909af0..3ca4edce 100644 --- a/pmb/qemu/run.py +++ b/pmb/qemu/run.py @@ -109,7 +109,7 @@ def command_qemu(args, arch, device, img_path, spice_enabled): logging.debug("Kernel cmdline: " + cmdline) port_ssh = str(args.port) - port_telnet = str(args.port + 2) + port_telnet = str(args.port + 1) suffix = "rootfs_" + device rootfs = args.work + "/chroot_" + suffix @@ -122,7 +122,7 @@ def command_qemu(args, arch, device, img_path, spice_enabled): command += ["-netdev", "user,id=net0," "hostfwd=tcp::" + port_ssh + "-:22," - "hostfwd=tcp::" + port_telnet + "-:24" + "hostfwd=tcp::" + port_telnet + "-:23" ",net=172.16.42.0/24,dhcpstart=" + pmb.config.default_ip ] command += ["-show-cursor"] @@ -249,9 +249,9 @@ def run(args): # SSH/telnet hints logging.info("Connect to the VM (telnet requires 'pmbootstrap initfs" - " hook_add usb-shell'):") + " hook_add debug-shell'):") logging.info("* (ssh) ssh -p {port} {user}@localhost".format(**vars(args))) - logging.info("* (telnet) telnet localhost " + str(args.port + 2)) + logging.info("* (telnet) telnet localhost " + str(args.port + 1)) # Run Qemu (or Qemu + SPICE) process = None diff --git a/test/static_code_analysis.sh b/test/static_code_analysis.sh index 7e3d33f0..b6241a20 100755 --- a/test/static_code_analysis.sh +++ b/test/static_code_analysis.sh @@ -27,6 +27,7 @@ sh_files=" ./aports/main/postmarketos-base/firmwareload.sh ./aports/main/postmarketos-mkinitfs/init.sh.in ./aports/main/postmarketos-mkinitfs/init_functions.sh + ./aports/main/postmarketos-mkinitfs-hook-debug-shell/20-debug-shell.sh ./aports/main/postmarketos-update-kernel/update-kernel.sh ./aports/main/postmarketos-android-recovery-installer/build_zip.sh ./aports/main/postmarketos-android-recovery-installer/pmos_chroot