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.

This commit is contained in:
Adam Boardman 2020-12-30 22:00:47 +00:00
parent 2223cf6c2b
commit 45e11800e6
33 changed files with 422 additions and 184 deletions

6
debian/changelog vendored
View file

@ -1,3 +1,9 @@
lxc-android (0.2+gemian) buster; urgency=medium
* Updated for cosmo
-- Adam Boardman <adamboardman@gmail.com> Wed, 30 Dec 2020 19:15:00 +0000
lxc-android (0.1+gemian1) stretch; urgency=medium
* Branched for gemian

2
debian/control vendored
View file

@ -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

View file

@ -1,4 +1,3 @@
etc/*
usr/*
var/*
lib/*

13
debian/lxc-android.service vendored Normal file
View file

@ -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

2
debian/rules vendored
View file

@ -1,4 +1,4 @@
#!/usr/bin/make -f
%:
dh $@
dh $@ --with systemd

View file

@ -1,4 +0,0 @@
[Service]
TimeoutStopSec=5s
ExecStop=
ExecStop=/usr/bin/lxc-stop -k -n android

View file

@ -1,5 +0,0 @@
[Unit]
RequiresMountsFor=/system
[Service]
ExecStartPre=-/usr/lib/lxc-android/copy-udev-rules

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -1,10 +0,0 @@
[Unit]
Description=mount system.img
[Mount]
What=/data/system.img
Where=/system
Options=ro
[Install]
RequiredBy=local-fs.target

View file

@ -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"

View file

@ -0,0 +1,2 @@
# rfkill
ACTION=="add", KERNEL=="rfkill", GROUP="aid_input", MODE="0660"

View file

@ -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

24
usr/bin/ssh-keygen.sh Normal file
View file

@ -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

View file

@ -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

View file

@ -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"

View file

@ -0,0 +1 @@
SUBSYSTEM=="input", ATTRS{name}=="Integrated keyboard", ENV{XKBMODEL}="planetcosmo"

View file

@ -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/

View file

@ -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/

View file

@ -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

View file

@ -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

100
usr/lib/lxc-android/update-fstab Executable file
View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -1,6 +1,8 @@
#!/bin/sh
mount_android_partitions() {
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
@ -14,38 +16,43 @@ mount_android_partitions() {
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