From 45e11800e68d074dd05196961f66e595a101cb5a Mon Sep 17 00:00:00 2001 From: Adam Boardman Date: Wed, 30 Dec 2020 22:00:47 +0000 Subject: [PATCH] First failing attempt at merging together all the various upstreams for this component into something that might do the right things, even the simplest part 'android-rootfs.mount' fails to mount. --- debian/changelog | 6 + debian/control | 2 +- debian/lxc-android.install | 1 - debian/lxc-android.service | 13 ++ debian/rules | 2 +- .../lxc@android.service.d/override.conf | 4 - .../10_copy-device-udev-rules.conf | 5 - etc/udev/rules.d/50-firmware.rules | 0 etc/udev/rules.d/60-persistent-v4l.rules | 0 lib/systemd/system/adbd.service | 15 -- lib/systemd/system/android-mount.service | 11 -- lib/systemd/system/android-rootfs.mount | 16 ++ lib/systemd/system/droid-hal-init.service | 13 -- lib/systemd/system/system.mount | 10 -- lib/udev/rules.d/65-android.rules | 4 +- lib/udev/rules.d/85-android.rules | 2 + .../udev/rules.d/90-alsa-restore.rules | 0 {etc => lib}/udev/rules.d/90-alsa-ucm.rules | 0 .../udev/rules.d/998-droid-system.rules | 0 usr/bin/droid-hal-init | 8 - usr/bin/ssh-keygen.sh | 24 +++ usr/lib/android-tools-adbd/pre-start | 18 --- .../lxc-android/70-Cosmo_Communicator.rules | 148 ++++++++++++++++++ .../80-keyboard-Cosmo_Communicator.rules | 1 + .../80-keyboard-aeon6797_6m_n.rules | 0 usr/lib/lxc-android/copy-udev-rules | 6 - usr/lib/lxc-android/copy-udev-unflipped | 16 ++ usr/lib/lxc-android/lxc-android-ready | 20 +++ usr/lib/lxc-android/mount-android | 41 ----- usr/lib/lxc-android/update-fstab | 100 ++++++++++++ var/lib/lxc/android/config | 31 ++-- var/lib/lxc/android/pre-start.d/10-no-adbd | 8 + var/lib/lxc/android/pre-start.sh | 81 +++++----- 33 files changed, 422 insertions(+), 184 deletions(-) create mode 100644 debian/lxc-android.service delete mode 100644 etc/systemd/system/lxc@android.service.d/override.conf delete mode 100644 etc/systemd/system/systemd-udevd.service.d/10_copy-device-udev-rules.conf delete mode 100644 etc/udev/rules.d/50-firmware.rules delete mode 100644 etc/udev/rules.d/60-persistent-v4l.rules delete mode 100644 lib/systemd/system/adbd.service delete mode 100644 lib/systemd/system/android-mount.service create mode 100644 lib/systemd/system/android-rootfs.mount delete mode 100644 lib/systemd/system/droid-hal-init.service delete mode 100644 lib/systemd/system/system.mount create mode 100644 lib/udev/rules.d/85-android.rules rename {etc => lib}/udev/rules.d/90-alsa-restore.rules (100%) rename {etc => lib}/udev/rules.d/90-alsa-ucm.rules (100%) rename {etc => lib}/udev/rules.d/998-droid-system.rules (100%) delete mode 100755 usr/bin/droid-hal-init create mode 100644 usr/bin/ssh-keygen.sh delete mode 100755 usr/lib/android-tools-adbd/pre-start create mode 100644 usr/lib/lxc-android/70-Cosmo_Communicator.rules create mode 100644 usr/lib/lxc-android/80-keyboard-Cosmo_Communicator.rules rename etc/udev/rules.d/80-keyboard.rules => usr/lib/lxc-android/80-keyboard-aeon6797_6m_n.rules (100%) delete mode 100755 usr/lib/lxc-android/copy-udev-rules create mode 100755 usr/lib/lxc-android/copy-udev-unflipped create mode 100755 usr/lib/lxc-android/lxc-android-ready delete mode 100755 usr/lib/lxc-android/mount-android create mode 100755 usr/lib/lxc-android/update-fstab create mode 100755 var/lib/lxc/android/pre-start.d/10-no-adbd diff --git a/debian/changelog b/debian/changelog index a3c2314..89daaac 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +lxc-android (0.2+gemian) buster; urgency=medium + + * Updated for cosmo + + -- Adam Boardman Wed, 30 Dec 2020 19:15:00 +0000 + lxc-android (0.1+gemian1) stretch; urgency=medium * Branched for gemian diff --git a/debian/control b/debian/control index 1ea0f2e..dc16d6d 100644 --- a/debian/control +++ b/debian/control @@ -8,7 +8,7 @@ Homepage: https://github.com/gemian/lxc-android Package: lxc-android Architecture: all -Depends: ${shlibs:Depends}, ${misc:Depends} +Depends: ${shlibs:Depends}, ${misc:Depends}, lxc Description: lxc configuration for starting android . This package provides the configuration for starting android in lxc diff --git a/debian/lxc-android.install b/debian/lxc-android.install index e556427..b31a09c 100644 --- a/debian/lxc-android.install +++ b/debian/lxc-android.install @@ -1,4 +1,3 @@ -etc/* usr/* var/* lib/* diff --git a/debian/lxc-android.service b/debian/lxc-android.service new file mode 100644 index 0000000..41ce143 --- /dev/null +++ b/debian/lxc-android.service @@ -0,0 +1,13 @@ +[Unit] +Description=LXC Android Config and Container Initialization +After=android-rootfs.mount + +[Service] +Type=forking +ExecStartPre=/usr/lib/lxc-android/copy-udev-unflipped +ExecStart=/usr/bin/lxc-start -n android -d -- /init +ExecStartPost=/usr/lib/lxc-android/lxc-android-ready +ExecStop=/usr/bin/lxc-stop -n android -k + +[Install] +WantedBy=multi-user.target diff --git a/debian/rules b/debian/rules index 2d33f6a..305c822 100755 --- a/debian/rules +++ b/debian/rules @@ -1,4 +1,4 @@ #!/usr/bin/make -f %: - dh $@ + dh $@ --with systemd diff --git a/etc/systemd/system/lxc@android.service.d/override.conf b/etc/systemd/system/lxc@android.service.d/override.conf deleted file mode 100644 index 32dd828..0000000 --- a/etc/systemd/system/lxc@android.service.d/override.conf +++ /dev/null @@ -1,4 +0,0 @@ -[Service] -TimeoutStopSec=5s -ExecStop= -ExecStop=/usr/bin/lxc-stop -k -n android diff --git a/etc/systemd/system/systemd-udevd.service.d/10_copy-device-udev-rules.conf b/etc/systemd/system/systemd-udevd.service.d/10_copy-device-udev-rules.conf deleted file mode 100644 index 75ae40a..0000000 --- a/etc/systemd/system/systemd-udevd.service.d/10_copy-device-udev-rules.conf +++ /dev/null @@ -1,5 +0,0 @@ -[Unit] -RequiresMountsFor=/system - -[Service] -ExecStartPre=-/usr/lib/lxc-android/copy-udev-rules diff --git a/etc/udev/rules.d/50-firmware.rules b/etc/udev/rules.d/50-firmware.rules deleted file mode 100644 index e69de29..0000000 diff --git a/etc/udev/rules.d/60-persistent-v4l.rules b/etc/udev/rules.d/60-persistent-v4l.rules deleted file mode 100644 index e69de29..0000000 diff --git a/lib/systemd/system/adbd.service b/lib/systemd/system/adbd.service deleted file mode 100644 index e0d0a22..0000000 --- a/lib/systemd/system/adbd.service +++ /dev/null @@ -1,15 +0,0 @@ -[Unit] -Description=adbd -Wants=local-fs.target -After=local-fs.target lxc@android.service systemd-udevd.service - -[Service] -Type=simple -Restart=on-failure -SuccessExitStatus=0 127 -ExecStartPre=/usr/lib/android-tools-adbd/pre-start -ExecStart=/usr/bin/adbd -ExecStopPost=/usr/bin/unlink /dev/socket/adbd - -[Install] -WantedBy=multi-user.target diff --git a/lib/systemd/system/android-mount.service b/lib/systemd/system/android-mount.service deleted file mode 100644 index a49898a..0000000 --- a/lib/systemd/system/android-mount.service +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=mount android parts -After=system.mount systemd-udev-settle.service -Wants=systemd-udev-settle.service - -[Service] -Type=oneshot -ExecStart=/usr/lib/lxc-android/mount-android - -[Install] -RequiredBy=local-fs.target diff --git a/lib/systemd/system/android-rootfs.mount b/lib/systemd/system/android-rootfs.mount new file mode 100644 index 0000000..ef2cd6f --- /dev/null +++ b/lib/systemd/system/android-rootfs.mount @@ -0,0 +1,16 @@ +[Unit] +Description=Mount android-rootfs.img +Before=lxc-android.service + +[Mount] +What=/var/lib/lxc/android/android-rootfs.img +Where=/var/lib/lxc/android/rootfs +Type=ext2 +Options=ro,noatime + +# Default is 90 which makes mount period too long in case of +# errors so drop it down a notch. +TimeoutSec=10 + +[Install] +WantedBy=local-fs.target diff --git a/lib/systemd/system/droid-hal-init.service b/lib/systemd/system/droid-hal-init.service deleted file mode 100644 index 8bf72d4..0000000 --- a/lib/systemd/system/droid-hal-init.service +++ /dev/null @@ -1,13 +0,0 @@ -[Unit] -Description=droid-hal-init -Wants=lxc@android.service -After=lxc@android.service -After=local-fs.target systemd-udev-settle.service -Before=graphical.target display-manager.service lightdm.service - -[Service] -Type=oneshot -ExecStart=/usr/bin/droid-hal-init - -[Install] -WantedBy=multi-user.target diff --git a/lib/systemd/system/system.mount b/lib/systemd/system/system.mount deleted file mode 100644 index 9930f5f..0000000 --- a/lib/systemd/system/system.mount +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=mount system.img - -[Mount] -What=/data/system.img -Where=/system -Options=ro - -[Install] -RequiredBy=local-fs.target diff --git a/lib/udev/rules.d/65-android.rules b/lib/udev/rules.d/65-android.rules index 3ad06fe..57fe3a7 100644 --- a/lib/udev/rules.d/65-android.rules +++ b/lib/udev/rules.d/65-android.rules @@ -12,7 +12,7 @@ ACTION=="add", KERNEL=="binder", MODE="0666" SUBSYSTEM=="graphics", KERNEL=="*", SYMLINK+="graphics/%k" # input devices -ACTION=="add", KERNEL=="event[0-9]*", GROUP="android_input", MODE="0660" +ACTION=="add", KERNEL=="event[0-9]*", GROUP="aid_input", MODE="0660" # misc devices ACTION=="add", KERNEL=="alarm", OWNER="system", GROUP="users", MODE="0660" @@ -22,5 +22,3 @@ ACTION=="add", KERNEL=="mtp_usb", OWNER="root", GROUP="plugdev", MODE="0660" # memory ACTION=="add", KERNEL=="ashmem", OWNER="system", GROUP="system", MODE="0666" -# rfkill -ACTION=="add", KERNEL=="rfkill", GROUP="android_input", MODE="0660" diff --git a/lib/udev/rules.d/85-android.rules b/lib/udev/rules.d/85-android.rules new file mode 100644 index 0000000..2c273a9 --- /dev/null +++ b/lib/udev/rules.d/85-android.rules @@ -0,0 +1,2 @@ +# rfkill +ACTION=="add", KERNEL=="rfkill", GROUP="aid_input", MODE="0660" diff --git a/etc/udev/rules.d/90-alsa-restore.rules b/lib/udev/rules.d/90-alsa-restore.rules similarity index 100% rename from etc/udev/rules.d/90-alsa-restore.rules rename to lib/udev/rules.d/90-alsa-restore.rules diff --git a/etc/udev/rules.d/90-alsa-ucm.rules b/lib/udev/rules.d/90-alsa-ucm.rules similarity index 100% rename from etc/udev/rules.d/90-alsa-ucm.rules rename to lib/udev/rules.d/90-alsa-ucm.rules diff --git a/etc/udev/rules.d/998-droid-system.rules b/lib/udev/rules.d/998-droid-system.rules similarity index 100% rename from etc/udev/rules.d/998-droid-system.rules rename to lib/udev/rules.d/998-droid-system.rules diff --git a/usr/bin/droid-hal-init b/usr/bin/droid-hal-init deleted file mode 100755 index 6334076..0000000 --- a/usr/bin/droid-hal-init +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -# Wait for Android LXC container to start -sleep 10 - -mount /dev/disk/by-partlabel/nvcfg /nvcfg -mount /dev/disk/by-partlabel/nvdata /nvdata - -echo 1 > /dev/wmtWifi diff --git a/usr/bin/ssh-keygen.sh b/usr/bin/ssh-keygen.sh new file mode 100644 index 0000000..ac34dc5 --- /dev/null +++ b/usr/bin/ssh-keygen.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +# Sometimes /etc/ssh isn't writable when the ssh job starts. Also, for some +# reason we can't rely on the 'mounted /etc/ssh' event, it doesn't always fire. +# This script works around both of those problems. +wait_for_writable() { + while [ ! $WRITABLE ]; do + touch /etc/ssh/testfile && { + rm /etc/ssh/testfile + WRITABLE=true + break + } + sleep 1 + done +} + +if [ ! -e /etc/ssh/ssh_host_rsa_key ]; then + wait_for_writable + ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa +fi +if [ ! -e /etc/ssh/ssh_host_dsa_key ]; then + wait_for_writable + ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa +fi \ No newline at end of file diff --git a/usr/lib/android-tools-adbd/pre-start b/usr/lib/android-tools-adbd/pre-start deleted file mode 100755 index 8fd3890..0000000 --- a/usr/lib/android-tools-adbd/pre-start +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -if [ -d /sys/class/android_usb ]; then - if [ -d /sys/class/android_usb/android0/f_ffs ] && [ -n "$(cat /sys/class/android_usb/android0/f_ffs/aliases)" ]; then - if ! $(mount|grep -q ^adb); then - # some devices use the functionfs (i.e. manta) - # we need to mount it to keep adb working - mkdir -p /dev/usb-ffs/adb - mount -t functionfs adb /dev/usb-ffs/adb || true - fi - fi -fi - -echo 0 >/sys/class/android_usb/android0/enable -echo -n 18d1 >/sys/class/android_usb/android0/idVendor -echo -n D002 >/sys/class/android_usb/android0/idProduct -echo -n adb >/sys/class/android_usb/android0/functions -echo 1 >/sys/class/android_usb/android0/enable diff --git a/usr/lib/lxc-android/70-Cosmo_Communicator.rules b/usr/lib/lxc-android/70-Cosmo_Communicator.rules new file mode 100644 index 0000000..6c7df79 --- /dev/null +++ b/usr/lib/lxc-android/70-Cosmo_Communicator.rules @@ -0,0 +1,148 @@ +ACTION=="add", KERNEL=="block/mmcblk0", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="block/mmcblk0boot0", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="block/mmcblk0boot1", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="misc-sd", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="block/sda", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="block/sdb", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="block/sdc", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="block/platform/bootdevice/by-name/misc2", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="block/platform/bootdevice/by-name/boot", OWNER="root", GROUP="system", MODE="0640" +ACTION=="add", KERNEL=="block/platform/bootdevice/by-name/recovery", OWNER="root", GROUP="system", MODE="0640" +ACTION=="add", KERNEL=="block/platform/bootdevice/by-name/secro", OWNER="root", GROUP="system", MODE="0640" +ACTION=="add", KERNEL=="block/platform/bootdevice/by-name/seccfg", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="block/platform/bootdevice/by-name/proinfo", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="block/platform/bootdevice/by-name/nvram", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="block/platform/bootdevice/by-name/para", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="block/platform/bootdevice/by-name/logo", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="block/platform/bootdevice/by-name/frp", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="block/platform/bootdevice/by-name/md1img", OWNER="root", GROUP="system", MODE="0640" +ACTION=="add", KERNEL=="block/platform/bootdevice/by-name/md1img_a", OWNER="root", GROUP="system", MODE="0640" +ACTION=="add", KERNEL=="block/platform/bootdevice/by-name/md1img_b", OWNER="root", GROUP="system", MODE="0640" +ACTION=="add", KERNEL=="block/platform/bootdevice/by-name/md1dsp", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="block/platform/bootdevice/by-name/boot_para", OWNER="root", GROUP="system", MODE="0640" +ACTION=="add", KERNEL=="otp", OWNER="system", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="block/platform/bootdevice/by-name/otp", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="stpwmt", OWNER="system", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="wmtdetect", OWNER="system", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="stpbt", OWNER="bluetooth", GROUP="bluetooth", MODE="0660" +ACTION=="add", KERNEL=="stpgps", OWNER="gps", GROUP="gps", MODE="0660" +ACTION=="add", KERNEL=="gps", OWNER="gps", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="stpant", OWNER="system", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="wmtWifi", OWNER="wifi", GROUP="wifi", MODE="0660" +ACTION=="add", KERNEL=="fm", OWNER="media", GROUP="media", MODE="0660" +ACTION=="add", KERNEL=="msr3110", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="mt6605", OWNER="nfc", GROUP="radio", MODE="0660" +ACTION=="add", KERNEL=="st21nfc", OWNER="nfc", GROUP="radio", MODE="0660" +ACTION=="add", KERNEL=="btif", OWNER="system", GROUP="system", MODE="0600" +ACTION=="add", KERNEL=="trusty-ipc-dev0", OWNER="system", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="block/mmcblk0rpmb", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="mobicore", OWNER="system", GROUP="system", MODE="0600" +ACTION=="add", KERNEL=="mobicore-user", OWNER="system", GROUP="system", MODE="0666" +ACTION=="add", KERNEL=="t-base-tui", OWNER="system", GROUP="system", MODE="0666" +ACTION=="add", KERNEL=="bus/usb/*", OWNER="root", GROUP="usb", MODE="0660" +ACTION=="add", KERNEL=="ttyUSB0", OWNER="radio", GROUP="radio", MODE="0660" +ACTION=="add", KERNEL=="ttyUSB1", OWNER="radio", GROUP="radio", MODE="0660" +ACTION=="add", KERNEL=="ttyUSB2", OWNER="radio", GROUP="radio", MODE="0660" +ACTION=="add", KERNEL=="ttyUSB3", OWNER="radio", GROUP="radio", MODE="0660" +ACTION=="add", KERNEL=="ttyUSB4", OWNER="radio", GROUP="radio", MODE="0660" +ACTION=="add", KERNEL=="log/ksystem", OWNER="root", GROUP="log", MODE="0600" +ACTION=="add", KERNEL=="ccci*", OWNER="radio", GROUP="radio", MODE="0660" +ACTION=="add", KERNEL=="ttyC*", OWNER="radio", GROUP="radio", MODE="0660" +ACTION=="add", KERNEL=="eemcs*", OWNER="radio", GROUP="radio", MODE="0660" +ACTION=="add", KERNEL=="emd*", OWNER="radio", GROUP="radio", MODE="0660" +ACTION=="add", KERNEL=="ccci_pcm_rx", OWNER="audio", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="ccci_pcm_tx", OWNER="audio", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="ccci_aud", OWNER="audio", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="ccci2_aud", OWNER="audio", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="ccci3_aud", OWNER="audio", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="ccci_raw_audio", OWNER="audio", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="ccci3_raw_audio", OWNER="audio", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="eemcs_aud", OWNER="audio", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="irtx", OWNER="system", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="ir-learning", OWNER="system", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="pvrsrvkm", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="pvr_sync", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="mtgpio", OWNER="radio", GROUP="root", MODE="0600" +ACTION=="add", KERNEL=="ttySDIO*", OWNER="radio", GROUP="sdcard_rw", MODE="0660" +ACTION=="add", KERNEL=="ttyRB*", OWNER="radio", GROUP="radio", MODE="0660" +ACTION=="add", KERNEL=="mali", OWNER="system", GROUP="graphics", MODE="0666" +ACTION=="add", KERNEL=="ion", OWNER="system", GROUP="graphics", MODE="0666" +ACTION=="add", KERNEL=="touch", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="hotknot", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="RT_Monitor", OWNER="system", GROUP="system", MODE="0600" +ACTION=="add", KERNEL=="kick_powerkey", OWNER="system", GROUP="system", MODE="0600" +ACTION=="add", KERNEL=="ttyACM0", OWNER="radio", GROUP="radio", MODE="0660" +ACTION=="add", KERNEL=="tkcoredrv", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="null", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="zero", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="full", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="ptmx", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="tty", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="random", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="urandom", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="hw_random", OWNER="root", GROUP="system", MODE="0440" +ACTION=="add", KERNEL=="ashmem", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="binder", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="hwbinder", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="vndbinder", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="pmsg0", OWNER="root", GROUP="log", MODE="0222" +ACTION=="add", KERNEL=="msm_hw3dc", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="kgsl", OWNER="root", GROUP="root", MODE="0666" +ACTION=="add", KERNEL=="dri/*", OWNER="root", GROUP="graphics", MODE="0666" +ACTION=="add", KERNEL=="diag", OWNER="radio", GROUP="radio", MODE="0660" +ACTION=="add", KERNEL=="diag_arm9", OWNER="radio", GROUP="radio", MODE="0660" +ACTION=="add", KERNEL=="ttyMSM0", OWNER="bluetooth", GROUP="bluetooth", MODE="0600" +ACTION=="add", KERNEL=="uhid", OWNER="uhid", GROUP="uhid", MODE="0660" +ACTION=="add", KERNEL=="uinput", OWNER="system", GROUP="bluetooth", MODE="0660" +ACTION=="add", KERNEL=="alarm", OWNER="system", GROUP="radio", MODE="0664" +ACTION=="add", KERNEL=="rtc0", OWNER="system", GROUP="system", MODE="0640" +ACTION=="add", KERNEL=="tty0", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="graphics/*", OWNER="root", GROUP="graphics", MODE="0660" +ACTION=="add", KERNEL=="msm_hw3dm", OWNER="system", GROUP="graphics", MODE="0660" +ACTION=="add", KERNEL=="input/*", OWNER="root", GROUP="input", MODE="0660" +ACTION=="add", KERNEL=="v4l-touch*", OWNER="root", GROUP="input", MODE="0660" +ACTION=="add", KERNEL=="eac", OWNER="root", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="cam", OWNER="root", GROUP="camera", MODE="0660" +ACTION=="add", KERNEL=="pmem", OWNER="system", GROUP="graphics", MODE="0660" +ACTION=="add", KERNEL=="pmem_adsp*", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="pmem_camera*", OWNER="system", GROUP="camera", MODE="0660" +ACTION=="add", KERNEL=="oncrpc/*", OWNER="root", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="adsp/*", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="snd/*", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="mt9t013", OWNER="system", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="msm_camera/*", OWNER="system", GROUP="system", MODE="0660" +ACTION=="add", KERNEL=="akm8976_daemon", OWNER="compass", GROUP="system", MODE="0640" +ACTION=="add", KERNEL=="akm8976_aot", OWNER="compass", GROUP="system", MODE="0640" +ACTION=="add", KERNEL=="akm8973_daemon", OWNER="compass", GROUP="system", MODE="0640" +ACTION=="add", KERNEL=="akm8973_aot", OWNER="compass", GROUP="system", MODE="0640" +ACTION=="add", KERNEL=="bma150", OWNER="compass", GROUP="system", MODE="0640" +ACTION=="add", KERNEL=="cm3602", OWNER="compass", GROUP="system", MODE="0640" +ACTION=="add", KERNEL=="akm8976_pffd", OWNER="compass", GROUP="system", MODE="0640" +ACTION=="add", KERNEL=="lightsensor", OWNER="system", GROUP="system", MODE="0640" +ACTION=="add", KERNEL=="msm_pcm_out*", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="msm_pcm_in*", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="msm_pcm_ctl*", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="msm_snd*", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="msm_mp3*", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="audience_a1026*", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="tpa2018d1*", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="msm_audpre", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="msm_audio_ctl", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="htc-acoustic", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="vdec", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="q6venc", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="snd/dsp", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="snd/dsp1", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="snd/mixer", OWNER="system", GROUP="audio", MODE="0660" +ACTION=="add", KERNEL=="smd0", OWNER="radio", GROUP="radio", MODE="0640" +ACTION=="add", KERNEL=="qmi", OWNER="radio", GROUP="radio", MODE="0640" +ACTION=="add", KERNEL=="qmi0", OWNER="radio", GROUP="radio", MODE="0640" +ACTION=="add", KERNEL=="qmi1", OWNER="radio", GROUP="radio", MODE="0640" +ACTION=="add", KERNEL=="qmi2", OWNER="radio", GROUP="radio", MODE="0640" +ACTION=="add", KERNEL=="bus/usb/*", OWNER="root", GROUP="usb", MODE="0660" +ACTION=="add", KERNEL=="mtp_usb", OWNER="root", GROUP="mtp", MODE="0660" +ACTION=="add", KERNEL=="usb_accessory", OWNER="root", GROUP="usb", MODE="0660" +ACTION=="add", KERNEL=="tun", OWNER="system", GROUP="vpn", MODE="0660" +ACTION=="add", KERNEL=="ts0710mux*", OWNER="radio", GROUP="radio", MODE="0640" +ACTION=="add", KERNEL=="ppp", OWNER="radio", GROUP="vpn", MODE="0660" +ACTION=="add", KERNEL=="dvb*", OWNER="root", GROUP="system", MODE="0660" diff --git a/usr/lib/lxc-android/80-keyboard-Cosmo_Communicator.rules b/usr/lib/lxc-android/80-keyboard-Cosmo_Communicator.rules new file mode 100644 index 0000000..b2da74e --- /dev/null +++ b/usr/lib/lxc-android/80-keyboard-Cosmo_Communicator.rules @@ -0,0 +1 @@ +SUBSYSTEM=="input", ATTRS{name}=="Integrated keyboard", ENV{XKBMODEL}="planetcosmo" diff --git a/etc/udev/rules.d/80-keyboard.rules b/usr/lib/lxc-android/80-keyboard-aeon6797_6m_n.rules similarity index 100% rename from etc/udev/rules.d/80-keyboard.rules rename to usr/lib/lxc-android/80-keyboard-aeon6797_6m_n.rules diff --git a/usr/lib/lxc-android/copy-udev-rules b/usr/lib/lxc-android/copy-udev-rules deleted file mode 100755 index 6b06947..0000000 --- a/usr/lib/lxc-android/copy-udev-rules +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -# if device have /system partition have udev rules, use it -device=$(grep ^ro.product.device= /system/build.prop |sed -e 's/.*=//') -[ -e /lib/udev/rules.d/70-$device.rules ] || \ - cp /usr/lib/lxc-android/70-$device.rules /lib/udev/rules.d/ diff --git a/usr/lib/lxc-android/copy-udev-unflipped b/usr/lib/lxc-android/copy-udev-unflipped new file mode 100755 index 0000000..1f54b34 --- /dev/null +++ b/usr/lib/lxc-android/copy-udev-unflipped @@ -0,0 +1,16 @@ +#!/bin/sh -e + +# Read-only flipped model doesn't need all this +[ -d /android ] && exit 0 + +/usr/lib/lxc-android/update-fstab +grep -q " /data" /proc/mounts 2>/dev/null || mount /data +grep -q " /system" /proc/mounts 2>/dev/null || mount /system +grep -q " /vendor" /proc/mounts 2>/dev/null || mount /vendor +grep -q " /persist" /proc/mounts 2>/dev/null || mount /persist || true +[ -e /lib/modules ] || ln -s /system/lib/modules /lib/modules +device=$(grep ^ro.product.device= /system/build.prop |sed -e 's/.*=//') +[ -e /lib/udev/rules.d/70-$device.rules ] || \ + cp /usr/lib/lxc-android/70-$device.rules /lib/udev/rules.d/ +[ -e /lib/udev/rules.d/80-keyboard-$device.rules ] || \ + cp /usr/lib/lxc-android/80-keyboard-$device.rules /lib/udev/rules.d/ diff --git a/usr/lib/lxc-android/lxc-android-ready b/usr/lib/lxc-android/lxc-android-ready new file mode 100755 index 0000000..6d8092d --- /dev/null +++ b/usr/lib/lxc-android/lxc-android-ready @@ -0,0 +1,20 @@ +#!/bin/sh -e + +lxc-wait -n android -s RUNNING -t 30 +containerpid="$(lxc-info -n android -p -H)" +if [ -n "$containerpid" ]; then + while true; do + [ -f /proc/$containerpid/root/dev/.coldboot_done ] && break + sleep 0.1 + done + + # Allow custom properties before announcing that the boot is completed + if [ -f /custom/custom.prop ]; then + while [ ! -e /dev/socket/property_service ]; do sleep 0.1; done + grep "^custom\." /custom/custom.prop | sed 's/=/ /' | while read property value; do + setprop $property $value + done + fi +else + exit 1 +fi diff --git a/usr/lib/lxc-android/mount-android b/usr/lib/lxc-android/mount-android deleted file mode 100755 index 83e31f6..0000000 --- a/usr/lib/lxc-android/mount-android +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh - -INITRD=/system/boot/android-ramdisk.img -rm -Rf /tmp/android/ -mkdir -p /tmp/android/ -cd /tmp/android/ -cat $INITRD | gzip -d | cpio -i - -fstab=/tmp/android/fstab* - -cat ${fstab} | while read line; do - set -- $line - # Skip any unwanted entry - echo $1 | egrep -q "^#" && continue - ([ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ] || [ -z "$4" ]) && continue - ([ "$3" = "emmc" ] || [ "$3" = "swap" ] || [ "$3" = "mtd" ]) && continue - ([ "$2" = "/system" ] || [ "$2" = "/data" ]) && continue - # For Gemini PDA - ([ "$2" = "/nvcfg" ] || [ "$2" = "/nvdata" ]) && continue - - label=$(echo $1 | awk -F/ '{print $NF}') - [ -z "$label" ] && continue - - # In case fstab provides /dev/mmcblk0p* lines - path="/dev/$label" - for dir in by-partlabel by-name by-label by-path by-uuid by-partuuid by-id; do - if [ -e "/dev/disk/$dir/$label" ]; then - path="/dev/disk/$dir/$label" - break - fi - done - - [ ! -e "$path" ] && continue - - mkdir -p $2 - mount $path $2 -t $3 -o $4 - -done - -# check if vendor is mounted/created? otherwise link it to system -[ -e "/vendor" ] || ln -s /system/vendor /vendor diff --git a/usr/lib/lxc-android/update-fstab b/usr/lib/lxc-android/update-fstab new file mode 100755 index 0000000..95eec03 --- /dev/null +++ b/usr/lib/lxc-android/update-fstab @@ -0,0 +1,100 @@ +#!/bin/sh + +set -e + +mountpoints="system data factory persist" + +syslabels="FACTORYFS APP system SYSTEM" +datalabels="DATAFS UDA userdata USERDATA" +factorylabels="EFS efs" +persistlabels="persist" + +mountopts="noatime,nodiratime,errors=remount-ro" +romountopts="ro,${mountopts}" +bindmountopts="ro,bind" +persistopts="rw,nosuid,nodev,relatime,nodelalloc,data=ordered" + +if grep -q "^[a-z0-9/]*./system" /etc/fstab || \ + grep -q "^[a-z0-9/]*./data" /etc/fstab; then + exit 0 +fi + +tmpfile=$(mktemp /tmp/fstab.XXX) + +cleanup() +{ + case $? in + 0) + mv $tmpfile /etc/fstab + chmod 644 /etc/fstab + echo "success" + ;; + *) + rm -rf $tmpfile + echo "failed" + ;; + esac +} +trap cleanup EXIT INT QUIT ILL KILL SEGV TERM + +# logging +log=/var/log/lxc-android-boot.log +exec 3>&1 4>&2 >$log 2>&1 + +# prepare working file +cp /etc/fstab $tmpfile +echo >>$tmpfile + + +for mount in $mountpoints; do + path=$diskpath + fs="ext4" + part="" + + # make sure the mountpoint exists at all + [ -e "/$mount" ] || mkdir -p /$mount + + # different options per mountpioint + case $mount in + system) + labels=$syslabels + options=$romountopts + ;; + data) + labels=$datalabels + options=$mountopts + ;; + factory) + labels=$factorylabels + options=$romountopts + ;; + persist) + labels=$persistlabels + options=$persistopts + ;; + esac + + disk="" + for partname in $labels; do + diskpaths=$(find /dev -type l -name ${partname}|head -1) + for diskpath in $diskpaths; do + disk=$(readlink -f ${diskpath}) + [ -b "$disk" ] && break + done + done + case $diskpath in + *EFS) + mount="efs" + ;; + esac + if [ -n "$disk" ]; then + echo "# added by lxc-android-boot for /$mount" >>$tmpfile + echo "$disk\t/$mount\t$fs\t$options\t0\t0" >>$tmpfile + fi +done + +if grep -q "^[a-z0-9/]*./system" $tmpfile; then + [ -e "/vendor" ] || mkdir -p /vendor + echo "# added by lxc-android-boot for /vendor" >>$tmpfile + echo "/system/vendor\t/vendor\tauto\t$bindmountopts\t0\t0" >>$tmpfile +fi diff --git a/var/lib/lxc/android/config b/var/lib/lxc/android/config index 993cf9d..d330380 100644 --- a/var/lib/lxc/android/config +++ b/var/lib/lxc/android/config @@ -1,17 +1,28 @@ -lxc.rootfs = /var/lib/lxc/android/rootfs -lxc.utsname = armhf +lxc.rootfs.path = /var/lib/lxc/android/rootfs -lxc.network.type = none +#lxc.net.0.type = none -lxc.devttydir = lxc -lxc.tty = 4 -lxc.pts = 1024 -lxc.arch = armhf -lxc.cap.drop = mac_admin mac_override +#lxc.devttydir = lxc +#lxc.tty = 4 +#lxc.pts = 1024 +#lxc.arch = arm64 +#lxc.cap.drop = mac_admin mac_override +#lxc.pivotdir = lxc_putold lxc.hook.pre-start = /var/lib/lxc/android/pre-start.sh -lxc.init_cmd = /init +#this might not be needed? +#lxc.init_cmd = /init -lxc.aa_profile = unconfined +lxc.apparmor.profile = unconfined lxc.autodev = 0 + +#lxc.mount.entry = tmpfs dev tmpfs nosuid 0 0 +#lxc.mount.entry = /dev/__properties__ dev/__properties__ bind bind,create=dir 0 0 +#lxc.mount.entry = /dev/socket dev/socket bind bind,create=dir 0 0 +#lxc.mount.entry = proc proc proc nodev,noexec,nosuid 0 0 +#lxc.mount.entry = sys sys sysfs nodev,noexec,nosuid 0 0 +##lxc.mount.entry = tmp tmp tmpfs nodev,noexec,nosuid 0 0 +#lxc.mount.entry = /android/data data bind bind 0 0 +#lxc.mount.entry = /vendor vendor bind rbind 0 0 +#lxc.mount.entry = /mnt mnt bind rbind 0 0 diff --git a/var/lib/lxc/android/pre-start.d/10-no-adbd b/var/lib/lxc/android/pre-start.d/10-no-adbd new file mode 100755 index 0000000..dda8f64 --- /dev/null +++ b/var/lib/lxc/android/pre-start.d/10-no-adbd @@ -0,0 +1,8 @@ +#!/bin/sh + +# Make sure adbd is not started automatically +#sed -i 's/setprop persist.sys.usb.config adb$/setprop persist.sys.usb.config ""/ +#' $LXC_ROOTFS_PATH/init.rc + +# Disable adbd +rm $LXC_ROOTFS_PATH/sbin/adbd diff --git a/var/lib/lxc/android/pre-start.sh b/var/lib/lxc/android/pre-start.sh index 095bacf..98a32e7 100755 --- a/var/lib/lxc/android/pre-start.sh +++ b/var/lib/lxc/android/pre-start.sh @@ -1,51 +1,58 @@ #!/bin/sh -mount_android_partitions() { - fstab=$1 - lxc_rootfs_path=$2 - cat ${fstab} | while read line; do - set -- $line - # Skip any unwanted entry - echo $1 | egrep -q "^#" && continue - ([ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ] || [ -z "$4" ]) && continue - ([ "$3" = "emmc" ] || [ "$3" = "swap" ] || [ "$3" = "mtd" ]) && continue - [ ! -d "$2" ] && continue +if [ -f "/android/system/boot/android-ramdisk.img" ]; then + # Halium 7 or below where ramdisk is extracted to tmpfs + mount_android_partitions() { + fstab=$1 + lxc_rootfs_path=$2 + cat ${fstab} | while read line; do + set -- $line + # Skip any unwanted entry + echo $1 | egrep -q "^#" && continue + ([ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ] || [ -z "$4" ]) && continue + ([ "$3" = "emmc" ] || [ "$3" = "swap" ] || [ "$3" = "mtd" ]) && continue + [ ! -d "$2" ] && continue - mkdir -p ${lxc_rootfs_path}/$2 - mount -n -o bind,recurse $2 ${lxc_rootfs_path}/$2 - done -} + mkdir -p ${lxc_rootfs_path}/$2 + mount -n -o bind,recurse $2 ${lxc_rootfs_path}/$2 + done + } -INITRD=/system/boot/android-ramdisk.img -mount none -t tmpfs $LXC_ROOTFS_PATH -mkdir -p $LXC_ROOTFS_PATH -cd $LXC_ROOTFS_PATH -cat $INITRD | gzip -d | cpio -i + INITRD=/system/boot/android-ramdisk.img + mount none -t tmpfs $LXC_ROOTFS_PATH + mkdir -p $LXC_ROOTFS_PATH + cd $LXC_ROOTFS_PATH + cat $INITRD | gzip -d | cpio -i -mknod -m 666 $LXC_ROOTFS_PATH/dev/null c 1 3 + mknod -m 666 $LXC_ROOTFS_PATH/dev/null c 1 3 -# Create /dev/pts if missing -mkdir -p $LXC_ROOTFS_PATH/dev/pts + # Create /dev/pts if missing + mkdir -p $LXC_ROOTFS_PATH/dev/pts -# Pass /sockets through -mkdir -p /dev/socket $LXC_ROOTFS_PATH/socket -mount -n -o bind,rw /dev/socket $LXC_ROOTFS_PATH/socket + # Pass /sockets through + mkdir -p /dev/socket $LXC_ROOTFS_PATH/socket + mount -n -o bind,rw /dev/socket $LXC_ROOTFS_PATH/socket -rm $LXC_ROOTFS_PATH/sbin/adbd + rm $LXC_ROOTFS_PATH/sbin/adbd -rm -Rf $LXC_ROOTFS_PATH/vendor + rm -Rf $LXC_ROOTFS_PATH/vendor -# Mount the android partitions -mount_android_partitions $LXC_ROOTFS_PATH/fstab* "$LXC_ROOTFS_PATH" -umount $LXC_ROOTFS_PATH/nvdata $LXC_ROOTFS_PATH/nvcfg -umount /nvdata /nvcfg + # Mount the android partitions + mount_android_partitions $LXC_ROOTFS_PATH/fstab* "$LXC_ROOTFS_PATH" + umount $LXC_ROOTFS_PATH/nvdata $LXC_ROOTFS_PATH/nvcfg + umount /nvdata /nvcfg -sed -i '/on early-init/a \ mkdir /dev/socket\n\ mount none /socket /dev/socket bind' $LXC_ROOTFS_PATH/init.rc + sed -i '/on early-init/a \ mkdir /dev/socket\n\ mount none /socket /dev/socket bind' $LXC_ROOTFS_PATH/init.rc -#sed -i "/mount_all /d" $LXC_ROOTFS_PATH/init.*.rc -cp /var/lib/lxc/android/fstab.mt6797 $LXC_ROOTFS_PATH/fstab.mt6797 + #sed -i "/mount_all /d" $LXC_ROOTFS_PATH/init.*.rc + cp /var/lib/lxc/android/fstab.mt6797 $LXC_ROOTFS_PATH/fstab.mt6797 -sed -i "/swapon_all /d" $LXC_ROOTFS_PATH/init.*.rc -sed -i "/on nonencrypted/d" $LXC_ROOTFS_PATH/init.rc + sed -i "/swapon_all /d" $LXC_ROOTFS_PATH/init.*.rc + sed -i "/on nonencrypted/d" $LXC_ROOTFS_PATH/init.rc -echo 10 > /sys/class/firmware/timeout + echo 10 > /sys/class/firmware/timeout +else + # Halium 9 + mkdir -p /dev/__properties__ + mkdir -p /dev/socket +fi