3 PATH=/bin:/usr/bin:/sbin:/usr/sbin
4 SYSTEM_RECOVERY="@SYSTEM_RECOVERY_LIBEXEC_DIR@/system-recovery"
5 SYSTEM_RECOVERY_GUI="/usr/bin/system-recovery_gui"
8 BLKID="/usr/sbin/blkid"
9 REBOOT="@INITRD_RECOVERY_LIBEXEC_DIR@/minireboot"
11 UMOUNT="/usr/bin/umount"
14 MKDIR="/usr/bin/mkdir"
15 RMDIR="/usr/bin/rmdir"
18 FAKE_ROOT="/system-ro"
19 #------------------------------------------------
20 # mount_usb_partitions
21 #------------------------------------------------
22 USB_MOUNTPOINT_PREFIX=@USB_MOUNTPOINT_ROOT@/@USB_MOUNTPOINT_PREFIX@
23 mount_usb_partitions() {
24 echo "mount USB partitions"
30 LAST_MOUNTED_DEVICE=""
31 for DEVICE_TYPE in ${DEVICE_TYPE_LIST[@]}
34 for ((i=0; i<10; i++))
36 DEVICES=$("$BLKID" /dev/sd* -t TYPE="${DEVICE_TYPE}" -o device)
37 if [ ! -z "${DEVICES}" ]
39 for DEVICE in ${DEVICES}
41 USB_MOUNTPOINT_INDEX=$(echo ${DEVICE} | "$CUT" -b 8- | "$TR" '[:lower:]' '[:upper:]')
42 USB_MOUNTPOINT=${USB_MOUNTPOINT_PREFIX}${USB_MOUNTPOINT_INDEX}
43 "$MKDIR" -p ${USB_MOUNTPOINT}
44 "$MOUNT" -t ${DEVICE_TYPE} ${DEVICE} ${USB_MOUNTPOINT}
46 LAST_MOUNTED_DEVICE=${DEVICE}
55 if [ -z "${LAST_MOUNTED_DEVICE}" ]
57 echo "WARNING : USB not mounted"
61 #------------------------------------------------
62 # umount_usb_partitions
63 #------------------------------------------------
64 umount_usb_partitions() {
65 echo "umount USB partitions"
66 USB_MOUNTPOINTS=$("$LS" -d ${USB_MOUNTPOINT_PREFIX}*)
67 for USB_MOUNTPOINT in ${USB_MOUNTPOINTS}
69 "$UMOUNT" ${USB_MOUNTPOINT}
70 "$RMDIR" ${USB_MOUNTPOINT}
74 #------------------------------------------------
76 #------------------------------------------------
88 #------------------------------------------------
90 #------------------------------------------------
92 P_SLOT=$([[ $(</proc/cmdline) =~ partition_ab=([ab]) ]]; echo ${BASH_REMATCH[1]})
95 if [ "${P_SLOT}" != "" ]; then
97 echo "Using A/B slot: ${P_SLOT}"
100 PART_ROOTFS=`/sbin/blkid -t PARTLABEL=rootfs${P_SUFFIX} -o device -l`
101 if [ x$PART_ROOTFS = "x" ]
103 PART_ROOTFS=`/sbin/blkid -L rootfs`
106 PART_SYSTEM_DATA=`/sbin/blkid -t PARTLABEL=system-data -o device -l`
107 if [ x$PART_SYSTEM_DATA = "x" ]
109 PART_SYSTEM_DATA=`/sbin/blkid -L system-data`
112 PART_RAMDISK=`/sbin/blkid -t PARTLABEL=ramdisk${P_SUFFIX} -o device -l`
113 if [ x$PART_RAMDISK = "x" ]
115 PART_RAMDISK=`/sbin/blkid -L ramdisk`
118 PART_HAL=`/sbin/blkid -t PARTLABEL=hal${P_SUFFIX} -o device -l`
119 if [ x$PART_HAL = "x" ]
121 PART_HAL=`/sbin/blkid -L hal`
124 PART_USER=$("$BLKID" --match-token PARTLABEL=user -o device -l || "$BLKID" --match-token LABEL=user -o device -l)
127 #------------------------------------------------
129 #------------------------------------------------
132 /usr/bin/verityctl create rootfs "${PART_ROOTFS}" "${FAKE_ROOT}"
135 echo "verifyboot: disabled"
139 echo "verityboot: enabled";
143 echo "verifyboot: enabled but corrupted"
147 echo "verifyboot: disabling"
150 "$MOUNT" -o ro "${PART_ROOTFS}" "${FAKE_ROOT}"
153 #------------------------------------------------
155 #------------------------------------------------
160 "$MOUNT" -t proc none ${FAKE_ROOT}/proc
161 "$MOUNT" -t sysfs none ${FAKE_ROOT}/sys
162 "$MOUNT" -t devtmpfs devtmpfs ${FAKE_ROOT}/dev
163 "$MOUNT" -t devpts devpts ${FAKE_ROOT}/dev/pts
164 "$MOUNT" -t tmpfs tmpfs ${FAKE_ROOT}/tmp
167 #------------------------------------------------
168 # run_recovery_target
169 #------------------------------------------------
170 run_recovery_target() {
172 exec /bin/chroot . /usr/lib/systemd/systemd --unit=recovery.target $@
175 #------------------------------------------------
176 # system-recovery initrc
177 #------------------------------------------------
178 echo "Starting system recovery."
181 # For debugging - It should be deleted on Release
182 /sbin/agetty -l /bin/sh -n --keep-baud 115200,38400,9600 console linux &
184 [ -x "${SYSTEM_RECOVERY_GUI}" ] && "${SYSTEM_RECOVERY_GUI}" &
185 [ -x "${SYSTEM_RECOVERY}" ] && "${SYSTEM_RECOVERY}"
187 umount_usb_partitions