Feature debug-shell (#1028)
* Changed usb-shell behavior, it wait for some user action before continue booting * Rename usb-shell to debug-shell and changed port to 23 * Add `20-debug-shell.sh` script to static code analysis * Enable eth0 interface in initramfs (qemu) * Add additional script to run a shell in order to be able to kill it from a telnet session
This commit is contained in:
parent
62180dd827
commit
c0c197f57b
|
@ -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
|
|
@ -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"
|
|
@ -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 "---"
|
|
|
@ -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"
|
|
|
@ -1,5 +1,5 @@
|
||||||
pkgname=postmarketos-mkinitfs
|
pkgname=postmarketos-mkinitfs
|
||||||
pkgver=0.5.4
|
pkgver=0.5.5
|
||||||
pkgrel=0
|
pkgrel=0
|
||||||
pkgdesc="Tool to generate initramfs images for postmarketOS"
|
pkgdesc="Tool to generate initramfs images for postmarketOS"
|
||||||
url="https://github.com/postmarketOS"
|
url="https://github.com/postmarketOS"
|
||||||
|
@ -22,6 +22,6 @@ package() {
|
||||||
"$pkgdir/sbin/mkinitfs"
|
"$pkgdir/sbin/mkinitfs"
|
||||||
mkdir -p "$pkgdir/etc/postmarketos-mkinitfs/hooks/"
|
mkdir -p "$pkgdir/etc/postmarketos-mkinitfs/hooks/"
|
||||||
}
|
}
|
||||||
sha512sums="e1849a13ee696e76dc6c734eda984bcc6a6e2e3d8a62a4df0778a8e338dc0bf9d967fa263ae6e57c14a0cb516c6004c6e251262a1711ad47f1ce4c622727a1d7 init.sh.in
|
sha512sums="9eaf7c1fa3bd8c4e065b523dbdf98cd5d002629c1691d388feca8ae7784ffc8e901d92265d6538fd92689483673a65e175e8b8b2c893bbe5746a07ff20a65e82 init.sh.in
|
||||||
1512d052890d6d8528f6dbca90eacd76664b56a00c24c980a5be900fdf290f24dbf42c8f3ebf43ea2c832046b4a81ed5d69401ddf5cea2516f8265b083a15ff3 init_functions.sh
|
cf2bbf7908032bee827676fe218bebc0171a84417f9e93cf20809b3d9392f4d0d84c33023960519170024d5c38e392d39a77640dbeed324fa4f96a71798920ad init_functions.sh
|
||||||
76d0f11fbd7207e3fc7382d2cc554c280a015157b182fe6ddfc31d861066cfba2be39ebc05970207853c9fae81f950c361cae4aaeafff0873ce99f2c3268ad8f mkinitfs.sh"
|
5bb521186c5f6586136ab3edb13d2ba44c00a84e9d18f255f5e92305bf78ff5aa9bd414d7a50eda4168e5c6eadd87d62fd4169f370fd18e0ebd291fcf2103a9f mkinitfs.sh"
|
||||||
|
|
|
@ -30,7 +30,7 @@ set_framebuffer_mode
|
||||||
show_splash /splash-loading.ppm.gz
|
show_splash /splash-loading.ppm.gz
|
||||||
|
|
||||||
# Always run dhcp daemon/usb networking for now (later this should only
|
# 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).
|
# or get activated after the initramfs is done with an OpenRC service).
|
||||||
setup_usb_network
|
setup_usb_network
|
||||||
start_udhcpd
|
start_udhcpd
|
||||||
|
@ -55,6 +55,6 @@ umount /dev
|
||||||
exec switch_root /sysroot /sbin/init
|
exec switch_root /sysroot /sbin/init
|
||||||
|
|
||||||
echo "ERROR: switch_root failed!"
|
echo "ERROR: switch_root failed!"
|
||||||
echo "Looping forever. Install and use the usb-shell hook to debug this."
|
echo "Looping forever. Install and use the debug-shell hook to debug this."
|
||||||
echo "For more information, see <https://postmarketos.org/usbhook>"
|
echo "For more information, see <https://postmarketos.org/debug-shell>"
|
||||||
loop_forever
|
loop_forever
|
||||||
|
|
|
@ -240,6 +240,9 @@ start_udhcpd() {
|
||||||
if [ -z $INTERFACE ]; then
|
if [ -z $INTERFACE ]; then
|
||||||
ifconfig usb0 "$IP" && INTERFACE=usb0
|
ifconfig usb0 "$IP" && INTERFACE=usb0
|
||||||
fi
|
fi
|
||||||
|
if [ -z $INTERFACE ]; then
|
||||||
|
ifconfig eth0 "$IP" && INTERFACE=eth0
|
||||||
|
fi
|
||||||
|
|
||||||
# Create /etc/udhcpd.conf
|
# Create /etc/udhcpd.conf
|
||||||
{
|
{
|
||||||
|
@ -277,12 +280,6 @@ show_splash() {
|
||||||
fbsplash -s /tmp/splash.ppm
|
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() {
|
start_msm_refresher() {
|
||||||
# shellcheck disable=SC2154,SC2086
|
# shellcheck disable=SC2154,SC2086
|
||||||
if [ "${deviceinfo_msm_refresher}" = "true" ]; then
|
if [ "${deviceinfo_msm_refresher}" = "true" ]; then
|
||||||
|
|
|
@ -240,7 +240,8 @@ generate_splash_screens()
|
||||||
"splash-noboot" "boot partition not found\\nhttps://postmarketos.org/troubleshooting" "--center" \
|
"splash-noboot" "boot partition not found\\nhttps://postmarketos.org/troubleshooting" "--center" \
|
||||||
"splash-noinitramfsextra" "initramfs-extra 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-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
|
# Ensure cache folder exists
|
||||||
mkdir -p "${splash_cache_dir}"
|
mkdir -p "${splash_cache_dir}"
|
||||||
|
|
|
@ -82,7 +82,7 @@ def arguments_initfs(subparser):
|
||||||
hook_del = sub.add_parser("hook_del", help="uninstall a hook package")
|
hook_del = sub.add_parser("hook_del", help="uninstall a hook package")
|
||||||
for action in [hook_add, hook_del]:
|
for action in [hook_add, hook_del]:
|
||||||
action.add_argument("hook", help="name of the hook aport, without the"
|
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, build, extract
|
||||||
ls = sub.add_parser("ls", help="list initramfs contents")
|
ls = sub.add_parser("ls", help="list initramfs contents")
|
||||||
|
|
|
@ -109,7 +109,7 @@ def command_qemu(args, arch, device, img_path, spice_enabled):
|
||||||
logging.debug("Kernel cmdline: " + cmdline)
|
logging.debug("Kernel cmdline: " + cmdline)
|
||||||
|
|
||||||
port_ssh = str(args.port)
|
port_ssh = str(args.port)
|
||||||
port_telnet = str(args.port + 2)
|
port_telnet = str(args.port + 1)
|
||||||
|
|
||||||
suffix = "rootfs_" + device
|
suffix = "rootfs_" + device
|
||||||
rootfs = args.work + "/chroot_" + suffix
|
rootfs = args.work + "/chroot_" + suffix
|
||||||
|
@ -122,7 +122,7 @@ def command_qemu(args, arch, device, img_path, spice_enabled):
|
||||||
command += ["-netdev",
|
command += ["-netdev",
|
||||||
"user,id=net0,"
|
"user,id=net0,"
|
||||||
"hostfwd=tcp::" + port_ssh + "-:22,"
|
"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
|
",net=172.16.42.0/24,dhcpstart=" + pmb.config.default_ip
|
||||||
]
|
]
|
||||||
command += ["-show-cursor"]
|
command += ["-show-cursor"]
|
||||||
|
@ -249,9 +249,9 @@ def run(args):
|
||||||
|
|
||||||
# SSH/telnet hints
|
# SSH/telnet hints
|
||||||
logging.info("Connect to the VM (telnet requires 'pmbootstrap initfs"
|
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("* (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)
|
# Run Qemu (or Qemu + SPICE)
|
||||||
process = None
|
process = None
|
||||||
|
|
|
@ -27,6 +27,7 @@ sh_files="
|
||||||
./aports/main/postmarketos-base/firmwareload.sh
|
./aports/main/postmarketos-base/firmwareload.sh
|
||||||
./aports/main/postmarketos-mkinitfs/init.sh.in
|
./aports/main/postmarketos-mkinitfs/init.sh.in
|
||||||
./aports/main/postmarketos-mkinitfs/init_functions.sh
|
./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-update-kernel/update-kernel.sh
|
||||||
./aports/main/postmarketos-android-recovery-installer/build_zip.sh
|
./aports/main/postmarketos-android-recovery-installer/build_zip.sh
|
||||||
./aports/main/postmarketos-android-recovery-installer/pmos_chroot
|
./aports/main/postmarketos-android-recovery-installer/pmos_chroot
|
||||||
|
|
Loading…
Reference in New Issue