Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions build-initrd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ set -e
export FLASH_KERNEL_SKIP=1
export DEBIAN_FRONTEND=noninteractive
DEFAULTMIRROR="https://deb.debian.org/debian"
DEFAULTUBPORTSMIRROR="http://repo.ubports.com/"
UBPORTSKEYRING="https://repo.ubports.com/keyring.gpg"
APT_COMMAND="apt -y"

usage() {
Expand Down Expand Up @@ -38,12 +40,14 @@ done
# Defaults for all arguments, so they can be set by the environment
[ -z $ARCH ] && ARCH="armhf"
[ -z $MIRROR ] && MIRROR=$DEFAULTMIRROR
[ -z $RELEASE ] && RELEASE="stretch"
[ -z $UBPORTSMIRROR ] && UBPORTSMIRROR=$DEFAULTUBPORTSMIRROR
[ -z $RELEASE ] && RELEASE="buster"
[ -z $UBPORTSRELEASE ] && UBPORTSRELEASE="xenial"
[ -z $ROOT ] && ROOT=./build/$ARCH
[ -z $OUT ] && OUT=./out

# list all packages needed for halium's initrd here
[ -z $INCHROOTPKGS ] && INCHROOTPKGS="initramfs-tools dctrl-tools e2fsprogs libc6-dev zlib1g-dev libssl-dev busybox-static"
[ -z $INCHROOTPKGS ] && INCHROOTPKGS="initramfs-tools dctrl-tools dmsetup e2fsprogs libc6-dev zlib1g-dev libssl-dev busybox-static parse-android-dynparts"

BOOTSTRAP_BIN="qemu-debootstrap --arch $ARCH --variant=minbase"

Expand Down Expand Up @@ -76,6 +80,11 @@ if [ ! -e $ROOT/.min-done ]; then

#sed -i 's/main$/main universe/' $ROOT/etc/apt/sources.list
sed -i 's,'"$DEFAULTMIRROR"','"$MIRROR"',' $ROOT/etc/apt/sources.list
mkdir -p $ROOT/etc/apt/sources.list.d
echo "deb $UBPORTSMIRROR $UBPORTSRELEASE main" > $ROOT/etc/apt/sources.list.d/ubports.list

mkdir -p $ROOT/etc/apt/trusted.gpg.d
wget "$UBPORTSKEYRING" -O $ROOT/etc/apt/trusted.gpg.d/ubports.gpg

# make sure we do not start daemons at install time
mv $ROOT/sbin/start-stop-daemon $ROOT/sbin/start-stop-daemon.REAL
Expand Down
2 changes: 2 additions & 0 deletions hooks/halium
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ copy_exec /sbin/e2fsck /sbin
copy_exec /sbin/resize2fs /sbin
copy_exec /bin/chown /bin
copy_exec /bin/mount /bin
copy_exec /sbin/dmsetup /sbin
copy_exec /sbin/dumpe2fs /sbin
copy_exec /lib/$DEB_HOST_MULTIARCH/libz.so.1
copy_exec /usr/lib/$DEB_HOST_MULTIARCH/libcrypto.so
copy_exec /usr/lib/$DEB_HOST_MULTIARCH/libdl.so
copy_exec /usr/sbin/parse-android-dynparts /sbin
29 changes: 28 additions & 1 deletion scripts/halium
Original file line number Diff line number Diff line change
Expand Up @@ -486,15 +486,36 @@ mountroot() {
[ `blkid $path -o value -s TYPE` = "ext4" ] && OPTIONS="data=journal,"
mount -o discard,$OPTIONS $path /tmpmnt

# setup super partition if exists
if [ -n "/dev/disk/by-partlabel/super" ]; then
tell_kmsg "trying to parse and dmsetup subpartitions from super partition"
/sbin/parse-android-dynparts /dev/disk/by-partlabel/super | sh
fi

# Set $_syspart if it is specified as systempart= on the command line
if grep -q systempart= /proc/cmdline; then
for x in $(cat /proc/cmdline); do
case ${x} in
systempart=*)
_syspart=${x#*=}
if [ -z ${_syspart##*:*} ]; then
_syspart_options=${_syspart##*:}
_syspart=${_syspart%%:*}
fi
;;
esac
done

if [ -z "$_syspart_options" ]; then
_syspart_options=rw
fi
fi

# We need to add the slot suffix to $_syspart for A/B devices
if [ -n "$_syspart" ] && [ ! -e "$_syspart" ] && [ ! -z "$ab_slot_suffix" ]; then
tell_kmsg "A/B slot system detected! Slot suffix is $ab_slot_suffix"
_syspart="${_syspart}${ab_slot_suffix}"
tell_kmsg "system partition is at $_syspart"
fi

identify_file_layout
Expand All @@ -514,7 +535,7 @@ mountroot() {

tell_kmsg "mounting system rootfs at /halium-system"
if [ -n "$_syspart" ]; then
mount -o rw $_syspart /halium-system
mount -o "$_syspart_options" $_syspart /halium-system
elif [ -f "$imagefile" ]; then
# Rootfs is an image file
mount -o loop,rw $imagefile /halium-system
Expand All @@ -530,6 +551,12 @@ mountroot() {
identify_android_image
[ $ANDROID_IMAGE_MODE = "unknown" ] && tell_kmsg "WARNING: Android system image not found."

if { [ -n "$_syspart_options" ] && [ -z "${_syspart_options##*ro*}" ]; } || [ -e /tmpmnt/.writable_image_overlay ] || [ -e /halium-system/.writable_image_overlay ]; then
# If systempart had to be mounted ro, mount rw overlayfs on top
mkdir -p /tmpmnt/rootfs-overlay /tmpmnt/rootfs-overlay-workdir
mount -t overlay rootfs -o lowerdir=/halium-system,upperdir=/tmpmnt/rootfs-overlay,workdir=/tmpmnt/rootfs-overlay-workdir /halium-system
fi

# If either (android) /data/.writable_image or (on rootfs)
# /.writable_image exist, mount the rootfs as rw
if [ -e /tmpmnt/.writable_image ] || [ -e /halium-system/.writable_image ]; then
Expand Down