rootfsinstall: support for installing packages in chrooted system partition
With default kernel installations for different targets
This commit is contained in:
parent
b330e85946
commit
7bd135a19c
@ -6,6 +6,8 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
SYSTEMFSTYPE=ext4
|
SYSTEMFSTYPE=ext4
|
||||||
|
# All targets are arm currently
|
||||||
|
TARGET_ARCH=arm
|
||||||
|
|
||||||
function usage() {
|
function usage() {
|
||||||
echo "Usage: $0 device rootfs-archive [-rpi|-cubox] [-a archive] [-c command] [-fs fstype] [-k kernel] [-p password] [-y]"
|
echo "Usage: $0 device rootfs-archive [-rpi|-cubox] [-a archive] [-c command] [-fs fstype] [-k kernel] [-p password] [-y]"
|
||||||
@ -23,6 +25,7 @@ function usage() {
|
|||||||
echo "-fs fstype : filesystem type for system partition (default: ext4)"
|
echo "-fs fstype : filesystem type for system partition (default: ext4)"
|
||||||
echo "-h hostname : set given hostname"
|
echo "-h hostname : set given hostname"
|
||||||
echo "-k kernel : extract and use specified kernel file from ROOTFS/boot/ for boot"
|
echo "-k kernel : extract and use specified kernel file from ROOTFS/boot/ for boot"
|
||||||
|
echo "-i packages : install packages using package manager in chroot"
|
||||||
echo "-p password : set given password for root user"
|
echo "-p password : set given password for root user"
|
||||||
echo "-r mode : set given default video mode where applicable (e.g. -r 1920x1080-32@60)"
|
echo "-r mode : set given default video mode where applicable (e.g. -r 1920x1080-32@60)"
|
||||||
echo "-y : assume yes to all questions (script mode)"
|
echo "-y : assume yes to all questions (script mode)"
|
||||||
@ -88,6 +91,13 @@ while [ "$1" ]; do
|
|||||||
SETHOSTNAME=$2
|
SETHOSTNAME=$2
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
-i) [ "$2" ] || {
|
||||||
|
echo "Error: -i option requires a packages list as argument; aborting."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
INSTALLPACKAGES="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
-p) [ "$2" ] || {
|
-p) [ "$2" ] || {
|
||||||
echo "Error: -p option requires a password as argument; aborting."
|
echo "Error: -p option requires a password as argument; aborting."
|
||||||
exit 1
|
exit 1
|
||||||
@ -128,23 +138,29 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
case $TARGETDEVICE in
|
case $TARGETDEVICE in
|
||||||
bpi) BOOTFSTYPE=fat32
|
bpi) ARCH=arm
|
||||||
|
BOOTFSTYPE=fat32
|
||||||
BOOTFSSIZE=22M
|
BOOTFSSIZE=22M
|
||||||
BOOTFSSTART=1049k
|
BOOTFSSTART=1049k
|
||||||
[ "$USEKERNEL" ] || USEKERNEL=uImage-sunxi
|
[ "$USEKERNEL" ] || USEKERNEL=uImage-sunxi
|
||||||
KERNELDEST="@BOOT@/kernel.img"
|
KERNELDEST="@BOOT@/kernel.img"
|
||||||
|
INSTALLPACKAGES="kernel-sunxi kernel-sunxi-modules u-boot-sunxi-Bananapi $INSTALLPACKAGES"
|
||||||
;;
|
;;
|
||||||
rpi) BOOTFSTYPE=fat32
|
rpi) ARCH=arm
|
||||||
|
BOOTFSTYPE=fat32
|
||||||
BOOTFSSIZE=40M
|
BOOTFSSIZE=40M
|
||||||
BOOTFSSTART=0
|
BOOTFSSTART=0
|
||||||
[ "$USEKERNEL" ] || USEKERNEL=zImage-3.6.11-rpi
|
[ "$USEKERNEL" ] || USEKERNEL=zImage-3.6.11-rpi
|
||||||
KERNELDEST="@BOOT@/kernel.img"
|
KERNELDEST="@BOOT@/kernel.img"
|
||||||
|
INSTALLPACKAGES="kernel-rpi kernel-rpi-modules raspberrypi-firmware $INSTALLPACKAGES"
|
||||||
;;
|
;;
|
||||||
cubox) BOOTFSTYPE=ext3
|
cubox) ARCH=arm
|
||||||
|
BOOTFSTYPE=ext3
|
||||||
BOOTFSSIZE=20M
|
BOOTFSSIZE=20M
|
||||||
BOOTFSSTART=0
|
BOOTFSSTART=0
|
||||||
[ "$USEKERNEL" ] || USEKERNEL=uImage-3.6.9-cubox
|
[ "$USEKERNEL" ] || USEKERNEL=uImage-3.6.9-cubox
|
||||||
KERNELDEST="@BOOT@/boot/uImage"
|
KERNELDEST="@BOOT@/boot/uImage"
|
||||||
|
INSTALLPACKAGES="kernel-cubox kernel-cubox-modules $INSTALLPACKAGES"
|
||||||
;;
|
;;
|
||||||
*) BOOTFSTYPE=
|
*) BOOTFSTYPE=
|
||||||
if [ "$USEKERNEL" ]; then
|
if [ "$USEKERNEL" ]; then
|
||||||
@ -206,11 +222,11 @@ fi
|
|||||||
if [ "$BOOTFSTYPE" ]; then
|
if [ "$BOOTFSTYPE" ]; then
|
||||||
echo "Formatting $PARTITION1 ($BOOTFSTYPE) ..."
|
echo "Formatting $PARTITION1 ($BOOTFSTYPE) ..."
|
||||||
case "$BOOTFSTYPE" in
|
case "$BOOTFSTYPE" in
|
||||||
vfat|fat32) mkfs.vfat -s 1 -F 32 -n "BOOT" $PARTITION1 || {
|
vfat|fat32) mkfs.vfat -s 1 -F 32 -n "boot" $PARTITION1 || {
|
||||||
echo "ERROR: unable to format $PARTITION1; aborting."
|
echo "ERROR: unable to format $PARTITION1; aborting."
|
||||||
exit 1
|
exit 1
|
||||||
} ;;
|
} ;;
|
||||||
ext*) mke2fs -q -t $BOOTFSTYPE -j -L "BOOT" $PARTITION1 || {
|
ext*) mke2fs -q -t $BOOTFSTYPE -j -L "boot" $PARTITION1 || {
|
||||||
echo "ERROR: unable to format $PARTITION1; aborting."
|
echo "ERROR: unable to format $PARTITION1; aborting."
|
||||||
exit 1
|
exit 1
|
||||||
} ;;
|
} ;;
|
||||||
@ -275,6 +291,39 @@ fi
|
|||||||
|
|
||||||
[ $? -eq 0 ] || exit $?
|
[ $? -eq 0 ] || exit $?
|
||||||
|
|
||||||
|
[ -e /usr/bin/qemu-${TARGET_ARCH}.static ] && cp /usr/bin/qemu-${TARGET_ARCH}.static $ROOTMP/usr/bin/qemu-${TARGET_ARCH}
|
||||||
|
|
||||||
|
if [ "$ROOTPASSWORD" ]; then
|
||||||
|
echo "$ROOTPASSWORD" | chroot $ROOTMP passwd root --stdin || {
|
||||||
|
echo "ERROR: unable to set password for root; aborting."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$SETHOSTNAME" ]; then
|
||||||
|
echo "$SETHOSTNAME" > $ROOTMP/etc/hostname
|
||||||
|
sed -i "s|HOSTNAME=.*|HOSTNAME=$SETHOSTNAME|" $ROOTMP/etc/sysconfig/network
|
||||||
|
sed -i "s|\(127\.0\.0\.1\W*\)\(.*\)|\1 $SETHOSTNAME.localdomain $SETHOSTNAME localhost.localdomain localhost|" $ROOTMP/etc/hosts
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$INSTALLPACKAGES" ]; then
|
||||||
|
mv $ROOTMP/etc/resolv.conf $ROOTMP/etc/resolv.conf.rootfsinstall
|
||||||
|
cp /etc/resolv.conf $ROOTMP/etc/resolv.conf
|
||||||
|
chroot $ROOTMP smart channel --enable devel-kernel
|
||||||
|
chroot $ROOTMP smart update || {
|
||||||
|
echo "ERROR: error running chroot command 'smart update'; aborting."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
chroot $ROOTMP smart install -y $INSTALLPACKAGES || {
|
||||||
|
echo "ERROR: error running chroot command 'smart install $INSTALLPACKAGES'; aborting."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
mv $ROOTMP/etc/resolv.conf.rootfsinstall $ROOTMP/etc/resolv.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# Prepare boot partition
|
||||||
|
#
|
||||||
if [ "$TARGETDEVICE" = "bpi" ]; then
|
if [ "$TARGETDEVICE" = "bpi" ]; then
|
||||||
# TODO
|
# TODO
|
||||||
cp $ROOTMP/boot/Bananapi-script.bin $BOOTMP/
|
cp $ROOTMP/boot/Bananapi-script.bin $BOOTMP/
|
||||||
@ -294,7 +343,8 @@ elif [ "$TARGETDEVICE" = "rpi" ]; then
|
|||||||
for f in bootcode.bin fixup_x.dat start_x.elf; do
|
for f in bootcode.bin fixup_x.dat start_x.elf; do
|
||||||
cp $ROOTMP/boot/$f $BOOTMP/$f
|
cp $ROOTMP/boot/$f $BOOTMP/$f
|
||||||
done
|
done
|
||||||
cp $ROOTMP/boot/zImage*-rpi $BOOTMP/kernel.img
|
IMAGE=`ls $ROOTMP/boot/zImage-*-rpi | head -n 1`
|
||||||
|
cp $IMAGE $BOOTMP/kernel.img
|
||||||
else
|
else
|
||||||
if [ ! "$USEKERNEL" ]; then
|
if [ ! "$USEKERNEL" ]; then
|
||||||
SWHOME=`mktemp -d`
|
SWHOME=`mktemp -d`
|
||||||
@ -390,21 +440,9 @@ if [ "$USEKERNEL" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$SETHOSTNAME" ]; then
|
#
|
||||||
echo "$SETHOSTNAME" > $ROOTMP/etc/hostname
|
# Final custom commands
|
||||||
sed -i "s|HOSTNAME=.*|HOSTNAME=$SETHOSTNAME|" $ROOTMP/etc/sysconfig/network
|
#
|
||||||
sed -i "s|\(127\.0\.0\.1\W*\)\(.*\)|\1 $SETHOSTNAME.localdomain $SETHOSTNAME localhost.localdomain localhost|" $ROOTMP/etc/hosts
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ -e /usr/bin/qemu-arm.static ] && cp /usr/bin/qemu-arm.static $ROOTMP/usr/bin/qemu-arm
|
|
||||||
|
|
||||||
if [ "$ROOTPASSWORD" ]; then
|
|
||||||
echo "$ROOTPASSWORD" | chroot $ROOTMP passwd root --stdin || {
|
|
||||||
echo "ERROR: unable to set password for root; aborting."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
|
|
||||||
for c in `seq 1 ${#PRECHROOTCOMMANDS[*]}`; do
|
for c in `seq 1 ${#PRECHROOTCOMMANDS[*]}`; do
|
||||||
PRECHROOTCOMMAND=`echo ${PRECHROOTCOMMANDS[c-1]} | sed "s|@ROOT@|$ROOTMP|g;s|@BOOT@|$BOOTMP|g"`
|
PRECHROOTCOMMAND=`echo ${PRECHROOTCOMMANDS[c-1]} | sed "s|@ROOT@|$ROOTMP|g;s|@BOOT@|$BOOTMP|g"`
|
||||||
$PRECHROOTCOMMAND || {
|
$PRECHROOTCOMMAND || {
|
||||||
|
Loading…
Reference in New Issue
Block a user