script now requires sudo or root to run

This commit is contained in:
Dan Johansen 2019-04-14 10:36:11 +02:00
parent ba0810325c
commit 6c7392725c
1 changed files with 81 additions and 78 deletions

View File

@ -3,7 +3,7 @@
# Set globals # Set globals
TMPDIR=/var/tmp/manjaro-arm-installer TMPDIR=/var/tmp/manjaro-arm-installer
ARCH='aarch64' ARCH='aarch64'
NSPAWN='sudo systemd-nspawn -q --resolv-conf=copy-host --timezone=off -D' NSPAWN='systemd-nspawn -q --resolv-conf=copy-host --timezone=off -D'
# clearing variables # clearing variables
DEVICE="" DEVICE=""
@ -15,11 +15,14 @@ SDCARD=""
TIMEZONE="" TIMEZONE=""
LOCALE="" LOCALE=""
# check if root
if [ "$EUID" -ne 0 ]
then echo "This script requires root permissions to run. Please run as root or with sudo!"
exit
fi
# Sanity checks for dependencies # Sanity checks for dependencies
if [ ! -f /usr/bin/sudo ]; then if [ ! -f /usr/bin/git ]; then
echo "sudo command is missing! Please install sudo!"
exit 1
elif [ ! -f /usr/bin/git ]; then
echo "git command is missing! Please install git!" echo "git command is missing! Please install git!"
exit 1 exit 1
elif [ ! -f /usr/bin/parted ]; then elif [ ! -f /usr/bin/parted ]; then
@ -84,8 +87,8 @@ getarmprofiles () {
cd $TMPDIR/arm-profiles cd $TMPDIR/arm-profiles
git pull 1> /dev/null 2>&1 git pull 1> /dev/null 2>&1
else else
sudo mkdir -p $TMPDIR mkdir -p $TMPDIR
sudo chmod 777 $TMPDIR chmod 777 $TMPDIR
cd $TMPDIR cd $TMPDIR
git clone https://gitlab.com/Strit/arm-profiles.git 1> /dev/null 2>&1 git clone https://gitlab.com/Strit/arm-profiles.git 1> /dev/null 2>&1
fi fi
@ -107,7 +110,7 @@ create_install() {
wget -q --show-progress --progress=bar:force:noscroll https://www.strits.dk/files/Manjaro-ARM-$ARCH-latest.tar.gz wget -q --show-progress --progress=bar:force:noscroll https://www.strits.dk/files/Manjaro-ARM-$ARCH-latest.tar.gz
info "Extracting $ARCH rootfs..." info "Extracting $ARCH rootfs..."
sudo bsdtar -xpf $TMPDIR/Manjaro-ARM-$ARCH-latest.tar.gz -C $TMPDIR/root bsdtar -xpf $TMPDIR/Manjaro-ARM-$ARCH-latest.tar.gz -C $TMPDIR/root
info "Setting up keyrings..." info "Setting up keyrings..."
$NSPAWN $TMPDIR/root pacman-key --init 1> /dev/null 2>&1 $NSPAWN $TMPDIR/root pacman-key --init 1> /dev/null 2>&1
@ -123,7 +126,7 @@ create_install() {
$NSPAWN $TMPDIR/root systemctl enable $SRV_EDITION 1> /dev/null 2>&1 $NSPAWN $TMPDIR/root systemctl enable $SRV_EDITION 1> /dev/null 2>&1
info "Applying overlay for $EDITION..." info "Applying overlay for $EDITION..."
sudo cp -ap $TMPDIR/arm-profiles/overlays/$EDITION/* $TMPDIR/root/ cp -ap $TMPDIR/arm-profiles/overlays/$EDITION/* $TMPDIR/root/
info "Setting up users..." info "Setting up users..."
#setup users #setup users
@ -147,26 +150,26 @@ create_install() {
info "Setting up system settings..." info "Setting up system settings..."
#system setup #system setup
$NSPAWN $TMPDIR/root chmod u+s /usr/bin/ping 1> /dev/null 2>&1 $NSPAWN $TMPDIR/root chmod u+s /usr/bin/ping 1> /dev/null 2>&1
sudo rm -f $TMPDIR/root/etc/ssl/certs/ca-certificates.crt rm -f $TMPDIR/root/etc/ssl/certs/ca-certificates.crt
sudo rm -f $TMPDIR/root/etc/ca-certificates/extracted/tls-ca-bundle.pem rm -f $TMPDIR/root/etc/ca-certificates/extracted/tls-ca-bundle.pem
sudo cp -a /etc/ssl/certs/ca-certificates.crt $TMPDIR/root/etc/ssl/certs/ cp -a /etc/ssl/certs/ca-certificates.crt $TMPDIR/root/etc/ssl/certs/
sudo cp -a /etc/ca-certificates/extracted/tls-ca-bundle.pem $TMPDIR/root/etc/ca-certificates/extracted/ cp -a /etc/ca-certificates/extracted/tls-ca-bundle.pem $TMPDIR/root/etc/ca-certificates/extracted/
$NSPAWN $TMPDIR/root ln -sf /usr/share/zoneinfo/"$TIMEZONE" /etc/localtime 1> /dev/null 2>&1 $NSPAWN $TMPDIR/root ln -sf /usr/share/zoneinfo/"$TIMEZONE" /etc/localtime 1> /dev/null 2>&1
$NSPAWN $TMPDIR/root sed -i s/"#$LOCALE"/"$LOCALE"/g /etc/locale.gen 1> /dev/null 2>&1 $NSPAWN $TMPDIR/root sed -i s/"#$LOCALE"/"$LOCALE"/g /etc/locale.gen 1> /dev/null 2>&1
echo "LANG=$LOCALE" | sudo tee --append $TMPDIR/root/etc/locale.conf 1> /dev/null 2>&1 echo "LANG=$LOCALE" | tee --append $TMPDIR/root/etc/locale.conf 1> /dev/null 2>&1
$NSPAWN $TMPDIR/root locale-gen $NSPAWN $TMPDIR/root locale-gen
echo "KEYMAP=$KEYMAP" | sudo tee --append $TMPDIR/root/etc/vconsole.conf 1> /dev/null 2>&1 echo "KEYMAP=$KEYMAP" | tee --append $TMPDIR/root/etc/vconsole.conf 1> /dev/null 2>&1
$NSPAWN $TMPDIR/root localectl set-x11-keymap $KEYMAP 1> /dev/null 2>&1 $NSPAWN $TMPDIR/root localectl set-x11-keymap $KEYMAP 1> /dev/null 2>&1
echo "$HOSTNAME" | sudo tee --append $TMPDIR/root/etc/hostname 1> /dev/null 2>&1 echo "$HOSTNAME" | tee --append $TMPDIR/root/etc/hostname 1> /dev/null 2>&1
sudo chown -R root:root $TMPDIR/root/etc 1> /dev/null 2>&1 chown -R root:root $TMPDIR/root/etc 1> /dev/null 2>&1
sudo chown root:polkitd $TMPDIR/root/etc/polkit-1/rules.d 1> /dev/null 2>&1 chown root:polkitd $TMPDIR/root/etc/polkit-1/rules.d 1> /dev/null 2>&1
info "Doing device specific setups for $DEVICE..." info "Doing device specific setups for $DEVICE..."
if [[ "$DEVICE" = "rpi2" ]] || [[ "$DEVICE" = "rpi3" ]]; then if [[ "$DEVICE" = "rpi2" ]] || [[ "$DEVICE" = "rpi3" ]]; then
echo "dtparam=audio=on" | sudo tee --append $TMPDIR/root/boot/config.txt echo "dtparam=audio=on" | tee --append $TMPDIR/root/boot/config.txt
echo "hdmi_drive=2" | sudo tee --append $TMPDIR/root/boot/config.txt echo "hdmi_drive=2" | tee --append $TMPDIR/root/boot/config.txt
echo "audio_pwm_mode=2" | sudo tee --append $TMPDIR/root/boot/config.txt echo "audio_pwm_mode=2" | tee --append $TMPDIR/root/boot/config.txt
echo "/dev/mmcblk0p1 /boot vfat defaults 0 0" | sudo tee --append $TMPDIR/root/etc/fstab echo "/dev/mmcblk0p1 /boot vfat defaults 0 0" | tee --append $TMPDIR/root/etc/fstab
elif [[ "$DEVICE" = "oc1" ]] || [[ "$DEVICE" = "oc2" ]]; then elif [[ "$DEVICE" = "oc1" ]] || [[ "$DEVICE" = "oc2" ]]; then
$NSPAWN $TMPDIR/root systemctl enable amlogic.service 1> /dev/null 2>&1 $NSPAWN $TMPDIR/root systemctl enable amlogic.service 1> /dev/null 2>&1
elif [[ "$DEVICE" = "pinebook" ]]; then elif [[ "$DEVICE" = "pinebook" ]]; then
@ -177,18 +180,18 @@ create_install() {
info "Cleaning install for unwanted files..." info "Cleaning install for unwanted files..."
if [[ "$DEVICE" = "oc1" ]] || [[ "$DEVICE" = "rpi2" ]] || [[ "$DEVICE" = "xu4" ]]; then if [[ "$DEVICE" = "oc1" ]] || [[ "$DEVICE" = "rpi2" ]] || [[ "$DEVICE" = "xu4" ]]; then
sudo rm $TMPDIR/root/usr/bin/qemu-arm-static rm $TMPDIR/root/usr/bin/qemu-arm-static
else else
sudo rm $TMPDIR/root/usr/bin/qemu-aarch64-static rm $TMPDIR/root/usr/bin/qemu-aarch64-static
fi fi
sudo rm -rf $TMPDIR/root/var/cache/pacman/pkg/* rm -rf $TMPDIR/root/var/cache/pacman/pkg/*
sudo rm -rf $TMPDIR/root/var/log/* rm -rf $TMPDIR/root/var/log/*
sudo rm -rf $TMPDIR/root/usr/lib/systemd/system/systemd-firstboot.service rm -rf $TMPDIR/root/usr/lib/systemd/system/systemd-firstboot.service
sudo rm -rf $TMPDIR/root/etc/machine-id rm -rf $TMPDIR/root/etc/machine-id
# Remove temp files on host # Remove temp files on host
sudo rm -rf $TMPDIR/user $TMPDIR/password $TMPDIR/rootpassword rm -rf $TMPDIR/user $TMPDIR/password $TMPDIR/rootpassword
sudo rm -rf $TMPDIR/Manjaro-ARM-$ARCH-latest.tar.gz* rm -rf $TMPDIR/Manjaro-ARM-$ARCH-latest.tar.gz*
msg "$DEVICE $EDITION install complete" msg "$DEVICE $EDITION install complete"
} }
@ -198,71 +201,71 @@ prepare_card () {
# For Raspberry Pi devices # For Raspberry Pi devices
if [[ "$DEVICE" = "rpi2" ]] || [[ "$DEVICE" = "rpi3" ]]; then if [[ "$DEVICE" = "rpi2" ]] || [[ "$DEVICE" = "rpi3" ]]; then
#partition with boot and root #partition with boot and root
sudo parted -s $SDCARD mklabel msdos 1> /dev/null 2>&1 parted -s $SDCARD mklabel msdos 1> /dev/null 2>&1
sudo parted -s $SDCARD mkpart primary fat32 0% 100M 1> /dev/null 2>&1 parted -s $SDCARD mkpart primary fat32 0% 100M 1> /dev/null 2>&1
START=`cat /sys/block/$DEV_NAME/${DEV_NAME}1/start` START=`cat /sys/block/$DEV_NAME/${DEV_NAME}1/start`
SIZE=`cat /sys/block/$DEV_NAME/${DEV_NAME}1/size` SIZE=`cat /sys/block/$DEV_NAME/${DEV_NAME}1/size`
END_SECTOR=$(expr $START + $SIZE) END_SECTOR=$(expr $START + $SIZE)
sudo parted -s $SDCARD mkpart primary ext4 "${END_SECTOR}s" 100% 1> /dev/null 2>&1 parted -s $SDCARD mkpart primary ext4 "${END_SECTOR}s" 100% 1> /dev/null 2>&1
sudo partprobe $SDCARD 1> /dev/null 2>&1 partprobe $SDCARD 1> /dev/null 2>&1
sudo mkfs.vfat "${SDCARD}p1" 1> /dev/null 2>&1 mkfs.vfat "${SDCARD}p1" 1> /dev/null 2>&1
sudo mkfs.ext4 "${SDCARD}p2" 1> /dev/null 2>&1 mkfs.ext4 "${SDCARD}p2" 1> /dev/null 2>&1
#Mount SD card #Mount SD card
mkdir -p $TMPDIR/root mkdir -p $TMPDIR/root
mkdir -p $TMPDIR/boot mkdir -p $TMPDIR/boot
sudo mount ${SDCARD}1 $TMPDIR/boot mount ${SDCARD}1 $TMPDIR/boot
sudo mount ${SDCARD}2 $TMPDIR/root mount ${SDCARD}2 $TMPDIR/root
# For Odroid devices # For Odroid devices
elif [[ "$DEVICE" = "oc1" ]] || [[ "$DEVICE" = "oc2" ]] || [[ "$DEVICE" = "xu4" ]]; then elif [[ "$DEVICE" = "oc1" ]] || [[ "$DEVICE" = "oc2" ]] || [[ "$DEVICE" = "xu4" ]]; then
#Clear first 8mb #Clear first 8mb
sudo dd if=/dev/zero of=${SDCARD} bs=1M count=8 1> /dev/null 2>&1 dd if=/dev/zero of=${SDCARD} bs=1M count=8 1> /dev/null 2>&1
#partition with a single root partition #partition with a single root partition
sudo parted -s $SDCARD mklabel msdos 1> /dev/null 2>&1 parted -s $SDCARD mklabel msdos 1> /dev/null 2>&1
sudo parted -s $SDCARD mkpart primary ext4 0% 100% 1> /dev/null 2>&1 parted -s $SDCARD mkpart primary ext4 0% 100% 1> /dev/null 2>&1
sudo partprobe $SDCARD 1> /dev/null 2>&1 partprobe $SDCARD 1> /dev/null 2>&1
sudo mkfs.ext4 -O ^metadata_csum,^64bit ${SDCARD}p1 1> /dev/null 2>&1 mkfs.ext4 -O ^metadata_csum,^64bit ${SDCARD}p1 1> /dev/null 2>&1
#Mount SD card #Mount SD card
mkdir -p $TMPDIR/root mkdir -p $TMPDIR/root
sudo chmod 777 -R $TMPDIR/root chmod 777 -R $TMPDIR/root
sudo mount ${SDCARD}1 $TMPDIR/root mount ${SDCARD}1 $TMPDIR/root
# For pine devices # For pine devices
elif [[ "$DEVICE" = "pinebook" ]] || [[ "$DEVICE" = "sopine" ]]; then elif [[ "$DEVICE" = "pinebook" ]] || [[ "$DEVICE" = "sopine" ]]; then
#Clear first 8mb #Clear first 8mb
sudo dd if=/dev/zero of=${SDCARD} bs=1M count=8 1> /dev/null 2>&1 dd if=/dev/zero of=${SDCARD} bs=1M count=8 1> /dev/null 2>&1
#partition with a single root partition #partition with a single root partition
sudo parted -s $SDCARD mklabel msdos 1> /dev/null 2>&1 parted -s $SDCARD mklabel msdos 1> /dev/null 2>&1
sudo parted -s $SDCARD mkpart primary ext4 0% 100% 1> /dev/null 2>&1 parted -s $SDCARD mkpart primary ext4 0% 100% 1> /dev/null 2>&1
sudo partprobe $SDCARD 1> /dev/null 2>&1 partprobe $SDCARD 1> /dev/null 2>&1
sudo mkfs.ext4 -O ^metadata_csum,^64bit ${SDCARD}p1 1> /dev/null 2>&1 mkfs.ext4 -O ^metadata_csum,^64bit ${SDCARD}p1 1> /dev/null 2>&1
# Mount SD card # Mount SD card
mkdir -p $TMPDIR/root mkdir -p $TMPDIR/root
sudo chmod 777 -R $TMPDIR/root chmod 777 -R $TMPDIR/root
sudo mount ${SDCARD}1 $TMPDIR/root mount ${SDCARD}1 $TMPDIR/root
# For rockpro64 device # For rockpro64 device
elif [[ "$DEVICE" = "rock64" ]] || [[ "$DEVICE" = "rockpro64" ]]; then elif [[ "$DEVICE" = "rock64" ]] || [[ "$DEVICE" = "rockpro64" ]]; then
#Clear first 8mb #Clear first 8mb
sudo dd if=/dev/zero of=${SDCARD} bs=1M count=32 1> /dev/null 2>&1 dd if=/dev/zero of=${SDCARD} bs=1M count=32 1> /dev/null 2>&1
#partition with a single root partition #partition with a single root partition
sudo parted -s $SDCARD mklabel msdos 1> /dev/null 2>&1 parted -s $SDCARD mklabel msdos 1> /dev/null 2>&1
sudo parted -s $SDCARD mkpart primary ext4 32M 100% 1> /dev/null 2>&1 parted -s $SDCARD mkpart primary ext4 32M 100% 1> /dev/null 2>&1
sudo partprobe $SDCARD 1> /dev/null 2>&1 partprobe $SDCARD 1> /dev/null 2>&1
sudo mkfs.ext4 -O ^metadata_csum,^64bit ${SDCARD}p1 1> /dev/null 2>&1 mkfs.ext4 -O ^metadata_csum,^64bit ${SDCARD}p1 1> /dev/null 2>&1
# Mount SD card # Mount SD card
mkdir -p $TMPDIR/root mkdir -p $TMPDIR/root
sudo chmod 777 -R $TMPDIR/root chmod 777 -R $TMPDIR/root
sudo mount ${SDCARD}1 $TMPDIR/root mount ${SDCARD}1 $TMPDIR/root
fi fi
} }
@ -271,48 +274,48 @@ cleanup () {
# For Raspberry Pi devices # For Raspberry Pi devices
if [[ "$DEVICE" = "rpi2" ]] || [[ "$DEVICE" = "rpi3" ]]; then if [[ "$DEVICE" = "rpi2" ]] || [[ "$DEVICE" = "rpi3" ]]; then
#copy rootfs contents over to the FS #copy rootfs contents over to the FS
sudo mv $TMPDIR/root/boot/* $TMPDIR/boot mv $TMPDIR/root/boot/* $TMPDIR/boot
#clean up #clean up
sudo umount $TMPDIR/root umount $TMPDIR/root
sudo umount $TMPDIR/boot umount $TMPDIR/boot
sudo rm -r $TMPDIR/root $TMPDIR/boot rm -r $TMPDIR/root $TMPDIR/boot
sudo partprobe $SDCARD 1> /dev/null 2>&1 partprobe $SDCARD 1> /dev/null 2>&1
# For Odroid devices # For Odroid devices
elif [[ "$DEVICE" = "oc1" ]] || [[ "$DEVICE" = "oc2" ]] || [[ "$DEVICE" = "xu4" ]]; then elif [[ "$DEVICE" = "oc1" ]] || [[ "$DEVICE" = "oc2" ]] || [[ "$DEVICE" = "xu4" ]]; then
#flash bootloader #flash bootloader
cd $TMPDIR/root/boot/ cd $TMPDIR/root/boot/
sudo ./sd_fusing.sh $SDCARD 1> /dev/null 2>&1 ./sd_fusing.sh $SDCARD 1> /dev/null 2>&1
cd ~ cd ~
#clean up #clean up
sudo umount $TMPDIR/root umount $TMPDIR/root
sudo rm -r $TMPDIR/root rm -r $TMPDIR/root
sudo partprobe $SDCARD 1> /dev/null 2>&1 partprobe $SDCARD 1> /dev/null 2>&1
# For pinebook device # For pinebook device
elif [[ "$DEVICE" = "pinebook" ]] || [[ "$DEVICE" = "sopine" ]]; then elif [[ "$DEVICE" = "pinebook" ]] || [[ "$DEVICE" = "sopine" ]]; then
#flash bootloader #flash bootloader
sudo dd if=$TMPDIR/root/boot/u-boot-sunxi-with-spl-$DEVICE.bin of=${SDCARD} bs=8k seek=1 1> /dev/null 2>&1 dd if=$TMPDIR/root/boot/u-boot-sunxi-with-spl-$DEVICE.bin of=${SDCARD} bs=8k seek=1 1> /dev/null 2>&1
#clean up #clean up
sudo umount $TMPDIR/root umount $TMPDIR/root
sudo rm -r $TMPDIR/root rm -r $TMPDIR/root
sudo partprobe $SDCARD 1> /dev/null 2>&1 partprobe $SDCARD 1> /dev/null 2>&1
# For rockpro64 device # For rockpro64 device
elif [[ "$DEVICE" = "rock64" ]] || [[ "$DEVICE" = "rockpro64" ]]; then elif [[ "$DEVICE" = "rock64" ]] || [[ "$DEVICE" = "rockpro64" ]]; then
#flash bootloader #flash bootloader
sudo dd if=$TMPDIR/root/boot/idbloader.img of=${SDCARD} seek=64 conv=notrunc 1> /dev/null 2>&1 dd if=$TMPDIR/root/boot/idbloader.img of=${SDCARD} seek=64 conv=notrunc 1> /dev/null 2>&1
sudo dd if=$TMPDIR/root/boot/uboot.img of=${SDCARD} seek=16384 conv=notrunc 1> /dev/null 2>&1 dd if=$TMPDIR/root/boot/uboot.img of=${SDCARD} seek=16384 conv=notrunc 1> /dev/null 2>&1
sudo dd if=$TMPDIR/root/boot/trust.img of=${SDCARD} seek=24576 conv=notrunc 1> /dev/null 2>&1 dd if=$TMPDIR/root/boot/trust.img of=${SDCARD} seek=24576 conv=notrunc 1> /dev/null 2>&1
#clean up #clean up
sudo umount $TMPDIR/root umount $TMPDIR/root
sudo rm -r $TMPDIR/root rm -r $TMPDIR/root
sudo partprobe $SDCARD 1> /dev/null 2>&1 partprobe $SDCARD 1> /dev/null 2>&1
fi fi
} }