Add generic-efi device option
This commit is contained in:
parent
85e01aa75a
commit
c54ad67431
|
|
@ -21,6 +21,7 @@ This script is "interactive". Meaning that it asks you questions when run to cus
|
|||
* btrfs-progs (for btrfs filesystem support)
|
||||
* f2fs-tools (for f2fs filesystem support)
|
||||
* cryptsetup (for encryption support)
|
||||
* grub-efi-arm64 (only needed when script is run from other arcitectures than `aarch64`) (from AUR) (for `generic-efi` support)
|
||||
|
||||
## Installing and using from Manjaro (x64 and ARM) repositories:
|
||||
To use this script, please make sure that the following is correct:
|
||||
|
|
@ -59,6 +60,7 @@ sudo bash ./manjaro-arm-installer
|
|||
## Supported Devices:
|
||||
* ClockworkPi DevTerm
|
||||
* Generic
|
||||
* Generic EFI
|
||||
* Beelink GT1 Ultimate
|
||||
* Odroid C4
|
||||
* Odroid C2
|
||||
|
|
|
|||
|
|
@ -58,8 +58,8 @@ for i in "${DEPENDENCIES[@]}"; do
|
|||
done
|
||||
|
||||
if [[ "$CARCH" != "aarch64" ]]; then
|
||||
if [ ! -f "/usr/lib/binfmt.d/qemu-static.conf" ]; then
|
||||
echo "qemu-static.conf file is missing. Please install the relevant package."
|
||||
if [ ! -f "/usr/lib/binfmt.d/qemu-aarch64-static.conf" ]; then
|
||||
echo "qemu-aarch64-static.conf file is missing. Please install the relevant package."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
|
@ -292,6 +292,9 @@ create_install() {
|
|||
rm -f $TMPDIR/Manjaro-ARM-$ARCH-latest.tar.gz*
|
||||
|
||||
msg "$DEVICE $EDITION install complete"
|
||||
if [[ "$DEVICE" = "generic-efi" ]]; then
|
||||
msg "Please run 'sudo update-grub' after boot to correctly configure Grub!"
|
||||
fi
|
||||
}
|
||||
|
||||
prepare_card () {
|
||||
|
|
@ -316,13 +319,39 @@ prepare_card () {
|
|||
parted -s $SDCARD mklabel gpt 1> /dev/null 2>&1
|
||||
;;
|
||||
esac
|
||||
if [[ "$DEVICE" = "generic-efi" ]]; then
|
||||
parted -s $SDCARD mkpart primary fat32 0% 512M > /dev/null 2>&1
|
||||
else
|
||||
parted -s $SDCARD mkpart primary fat32 32M 512M 1> /dev/null 2>&1
|
||||
fi
|
||||
sleep 5
|
||||
START=`cat /sys/block/$DEV_NAME/${DEV_NAME}${SDDEV}1/start`
|
||||
SIZE=`cat /sys/block/$DEV_NAME/${DEV_NAME}${SDDEV}1/size`
|
||||
END_SECTOR=$(expr $START + $SIZE)
|
||||
case "$FSTYPE" in
|
||||
btrfs)
|
||||
case "$DEVICE" in
|
||||
generic-efi)
|
||||
parted -s $SDCARD mkpart primary btrfs "${END_SECTOR}s" 100% > /dev/null 2>&1
|
||||
parted -s $SDCARD set 1 esp on
|
||||
partprobe $SDCARD > /dev/null 2>&1
|
||||
mkfs.vfat "${SDCARD}${SDDEV}1" -n BOOT_MNJRO > /dev/null 2>&1
|
||||
mkfs.btrfs -m single -L ROOT_MNJRO "${SDCARD}${SDDEV}p2" > /dev/null 2>&1
|
||||
|
||||
# Create and mount the subvolumes
|
||||
info "Creating btrfs subvolumes..."
|
||||
mkdir -p $TMPDIR/root
|
||||
mkdir -p $TMPDIR/boot/efi
|
||||
mount ${SDCARD}${SDDEV}1 $TMPDIR/boot/efi
|
||||
mount -o compress=zstd "${SDCARD}${SDDEV}2" $TMPDIR/root
|
||||
btrfs su cr $TMPDIR/root/@ > /dev/null 2>&1
|
||||
btrfs su cr $TMPDIR/root/@home > /dev/null 2>&1
|
||||
umount $TMPDIR/root
|
||||
mount -o compress=zstd,subvol=@ "${SDCARD}${SDDEV}2" $TMPDIR/root
|
||||
mkdir -p $TMPDIR/root/home
|
||||
mount -o compress=zstd,subvol=@home "${SDCARD}${SDDEV}2" $TMPDIR/root/home
|
||||
;;
|
||||
*)
|
||||
parted -s $SDCARD mkpart primary btrfs "${END_SECTOR}s" 100% 1> /dev/null 2>&1
|
||||
partprobe $SDCARD 1> /dev/null 2>&1
|
||||
mkfs.vfat "${SDCARD}${SDDEV}1" -n BOOT_MNJRO 1> /dev/null 2>&1
|
||||
|
|
@ -340,7 +369,22 @@ prepare_card () {
|
|||
mount -o compress=zstd,subvol=@home "${SDCARD}${SDDEV}2" $TMPDIR/root/home
|
||||
mount ${SDCARD}${SDDEV}1 $TMPDIR/boot
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
f2fs)
|
||||
case "$DEVICE" in
|
||||
generic-efi)
|
||||
parted -s $SDCARD mkpart primary f2fs "${END_SECTOR}s" 100% > /dev/null 2>&1
|
||||
parted -s $SDCARD set 1 esp on
|
||||
partprobe $SDCARD > /dev/null 2>&1
|
||||
mkfs.vfat "${SDCARD}${SDDEV}1" -n BOOT_MNJRO > /dev/null 2>&1
|
||||
mkfs.f2fs -f -l ROOT_MNJRO -O extra_attr,inode_checksum,sb_checksum,compression "${SDCARD}${SDDEV}2" 1> /dev/null 2>&1
|
||||
mkdir -p $TMPDIR/root
|
||||
mkdir -p $TMPDIR/boot/efi
|
||||
mount ${SDCARD}${SDDEV}1 $TMPDIR/boot/efi
|
||||
mount -t f2fs ${SDCARD}${SDDEV}2 $TMPDIR/root
|
||||
;;
|
||||
*)
|
||||
parted -s $SDCARD mkpart primary f2fs "${END_SECTOR}s" 100% 1> /dev/null 2>&1
|
||||
partprobe $SDCARD 1> /dev/null 2>&1
|
||||
mkfs.vfat "${SDCARD}${SDDEV}1" -n BOOT_MNJRO 1> /dev/null 2>&1
|
||||
|
|
@ -351,7 +395,22 @@ prepare_card () {
|
|||
mount ${SDCARD}${SDDEV}1 $TMPDIR/boot
|
||||
mount -t f2fs ${SDCARD}${SDDEV}2 $TMPDIR/root
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
ext4)
|
||||
case "$DEVICE" in
|
||||
generic-efi)
|
||||
parted -s $SDCARD mkpart primary ext4 "${END_SECTOR}s" 100% > /dev/null 2>&1
|
||||
parted -s $SDCARD set 1 esp on
|
||||
partprobe $SDCARD > /dev/null 2>&1
|
||||
mkfs.vfat "${SDCARD}${SDDEV}1" -n BOOT_MNJRO > /dev/null 2>&1
|
||||
mkfs.ext4 -O ^metadata_csum,^64bit "${SDCARD}${SDDEV}2" -L ROOT_MNJRO > /dev/null 2>&1
|
||||
mkdir -p $TMPDIR/root
|
||||
mkdir -p $TMPDIR/boot/efi
|
||||
mount ${SDCARD}${SDDEV}1 $TMPDIR/boot/efi
|
||||
mount ${SDCARD}${SDDEV}2 $TMPDIR/root
|
||||
;;
|
||||
*)
|
||||
parted -s $SDCARD mkpart primary ext4 "${END_SECTOR}s" 100% 1> /dev/null 2>&1
|
||||
partprobe $SDCARD 1> /dev/null 2>&1
|
||||
mkfs.vfat "${SDCARD}${SDDEV}1" -n BOOT_MNJRO 1> /dev/null 2>&1
|
||||
|
|
@ -377,12 +436,16 @@ prepare_card () {
|
|||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
cleanup () {
|
||||
if [[ "$DEVICE" != "generic-efi" ]]; then
|
||||
msg "Writing bootloader and cleaning up after install..."
|
||||
# Move boot files
|
||||
mv $TMPDIR/root/boot/* $TMPDIR/boot
|
||||
fi
|
||||
# Flash bootloader
|
||||
case "$DEVICE" in
|
||||
oc2)
|
||||
|
|
@ -421,7 +484,11 @@ cleanup () {
|
|||
|
||||
# Change boot script and fstab to root partition UUID
|
||||
ROOT_PARTUUID=$(lsblk -p -o NAME,PARTUUID | grep ${DEV_NAME}${SDDEV}2 | awk '{print $2}')
|
||||
ROOT_UUID=$(blkid | grep ${DEV_NAME}${SDDEV}2 | awk '{print $3}' | grep -oP "[^/]=\K.*" | sed 's/\"//g')
|
||||
info "Set root partition to $ROOT_PARTUUID in the relevant boot script and /etc/fstab..."
|
||||
if [[ "$DEVICE" = "generic-efi" ]]; then
|
||||
info "Set root partition to $ROOT_UUID in /boot/grub/grub.cfg..."
|
||||
fi
|
||||
if [ -f $TMPDIR/boot/extlinux/extlinux.conf ]; then
|
||||
sed -i "s/LABEL=ROOT_MNJRO/PARTUUID=$ROOT_PARTUUID/g" $TMPDIR/boot/extlinux/extlinux.conf
|
||||
elif [ -f $TMPDIR/boot/efi/extlinux/extlinux.conf ]; then
|
||||
|
|
@ -471,14 +538,134 @@ cleanup () {
|
|||
echo "PARTUUID=$ROOT_PARTUUID / $FSTYPE defaults 0 1" >> $TMPDIR/root/etc/fstab
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ "$DEVICE" = "generic-efi" ]]; then
|
||||
sed -i "s|/boot|/boot/efi|g" $TMPDIR/root/etc/fstab
|
||||
|
||||
msg "Setup GRUB for EFI..."
|
||||
grub-install --target=arm64-efi --efi-directory=$TMPDIR/boot/efi --removable --boot-directory=$TMPDIR/root/boot --bootloader-id=grub ${SDCARD}
|
||||
mkdir -p $TMPDIR/root/boot/grub
|
||||
if [ -f $TMPDIR/root/boot/Image ]; then
|
||||
KERNEL="/boot/Image"
|
||||
INITRAMFS="/boot/initramfs-linux.img"
|
||||
else
|
||||
KERNEL="/boot/$(ls $TMPDIR/root/boot/ | grep vmlinuz)"
|
||||
INITRAMFS="/boot/$(ls $TMPDIR/root/boot/ | grep initramfs | grep -v fallback)"
|
||||
fi
|
||||
echo "Kernel image is $KERNEL..."
|
||||
echo "Initramfs image is $INITRAMFS..."
|
||||
echo "Creating minimal grub configuration..."
|
||||
echo '### BEGIN /etc/grub.d/00_header ###
|
||||
insmod part_gpt
|
||||
insmod part_msdos
|
||||
if [ -s $prefix/grubenv ]; then
|
||||
load_env
|
||||
fi
|
||||
if [ "${next_entry}" ] ; then
|
||||
set default="${next_entry}"
|
||||
set next_entry=
|
||||
save_env next_entry
|
||||
set boot_once=true
|
||||
else
|
||||
set default="${saved_entry}"
|
||||
fi
|
||||
|
||||
if [ x"${feature_menuentry_id}" = xy ]; then
|
||||
menuentry_id_option="--id"
|
||||
else
|
||||
menuentry_id_option=""
|
||||
fi
|
||||
|
||||
export menuentry_id_option
|
||||
|
||||
if [ "${prev_saved_entry}" ]; then
|
||||
set saved_entry="${prev_saved_entry}"
|
||||
save_env saved_entry
|
||||
set prev_saved_entry=
|
||||
save_env prev_saved_entry
|
||||
set boot_once=true
|
||||
fi
|
||||
|
||||
function savedefault {
|
||||
if [ -z "${boot_once}" ]; then
|
||||
saved_entry="${chosen}"
|
||||
save_env saved_entry
|
||||
fi
|
||||
}
|
||||
|
||||
function load_video {
|
||||
if [ x$feature_all_video_module = xy ]; then
|
||||
insmod all_video
|
||||
else
|
||||
insmod efi_gop
|
||||
insmod efi_uga
|
||||
insmod ieee1275_fb
|
||||
insmod vbe
|
||||
insmod vga
|
||||
insmod video_bochs
|
||||
insmod video_cirrus
|
||||
fi
|
||||
}
|
||||
|
||||
set menu_color_normal=white/black
|
||||
set menu_color_highlight=green/black
|
||||
|
||||
if [ x$feature_default_font_path = xy ] ; then
|
||||
font=unicode
|
||||
else
|
||||
insmod part_gpt
|
||||
insmod ext2
|
||||
search --no-floppy --fs-uuid --set=root $ROOT_UUID
|
||||
font="/usr/share/grub/unicode.pf2"
|
||||
fi
|
||||
|
||||
if loadfont $font ; then
|
||||
set gfxmode=auto
|
||||
load_video
|
||||
insmod gfxterm
|
||||
fi
|
||||
terminal_input console
|
||||
terminal_output gfxterm
|
||||
if [ x$feature_timeout_style = xy ] ; then
|
||||
set timeout_style=menu
|
||||
set timeout=5
|
||||
# Fallback normal timeout code in case the timeout_style feature is
|
||||
# unavailable.
|
||||
else
|
||||
set timeout=5
|
||||
fi
|
||||
### END /etc/grub.d/00_header ###' > $TMPDIR/root/boot/grub/grub.cfg
|
||||
|
||||
echo "### BEGIN /etc/grub.d/10_linux ###
|
||||
menuentry 'Manjaro ARM' --class manjaro --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-$ROOT_UUID' {
|
||||
savedefault
|
||||
load_video
|
||||
set gfxpayload=keep
|
||||
insmod gzio
|
||||
insmod part_gpt
|
||||
insmod ext2
|
||||
search --no-floppy --fs-uuid --set=root $ROOT_UUID
|
||||
linux $(if [[ "$FILESYSTEM" = "btrfs" ]]; then echo "/@"; fi)$KERNEL root=UUID=$ROOT_UUID rw quiet splash plymouth.ignore-serial-consoles $(if [[ "$FSTYPE" = "btrfs" ]]; then echo "rootflags=subvol=@ rootfstype=btrfs"; fi)
|
||||
initrd $(if [[ "$FILESYSTEM" = "btrfs" ]]; then echo "/@"; fi)$INITRAMFS
|
||||
}" >> $TMPDIR/root/boot/grub/grub.cfg
|
||||
fi
|
||||
|
||||
#clean up
|
||||
if [[ "$FSTYPE" = "btrfs" ]]; then
|
||||
umount $TMPDIR/root/home
|
||||
umount $TMPDIR/root
|
||||
if [[ "$DEVICE" = "generic-efi" ]]; then
|
||||
umount $TMPDIR/boot/efi
|
||||
else
|
||||
umount $TMPDIR/boot
|
||||
fi
|
||||
else
|
||||
umount $TMPDIR/root
|
||||
if [[ "$DEVICE" = "generic-efi" ]]; then
|
||||
umount $TMPDIR/boot/efi
|
||||
else
|
||||
umount $TMPDIR/boot
|
||||
fi
|
||||
if [[ "$CRYPT" = "yes" ]]; then
|
||||
cryptsetup close /dev/mapper/ROOT_MNJRO
|
||||
fi
|
||||
|
|
@ -528,6 +715,7 @@ DEVICE=$(dialog --clear --title "Manjaro ARM Installer v${VERSION}" \
|
|||
--menu "Choose a device:" 20 75 10 \
|
||||
"clockworkpi-a06" "ClockworkPi DevTerm" \
|
||||
"generic" "Generic" \
|
||||
"generic-efi" "Generic EFI" \
|
||||
"gt1-ultimate" "Beelink GT1 Ultimate" \
|
||||
"oc4" "Odroid C4" \
|
||||
"oc2" "Odroid C2" \
|
||||
|
|
@ -733,12 +921,16 @@ else
|
|||
fi
|
||||
|
||||
if [ ! -z "$SDCARD" ]; then
|
||||
if [[ "$DEVICE" = "generic-efi" ]]; then
|
||||
FSTYPE="ext4"
|
||||
else
|
||||
FSTYPE=$(dialog --clear --title "Manjaro ARM Installer v${VERSION}" \
|
||||
--menu "Choose a filesystem:" 10 90 10 \
|
||||
"ext4" "Regular ext4 filesystem for the root partition" \
|
||||
"btrfs" "Uses btrfs for root partition and makes / and /home subvolumes" \
|
||||
"f2fs" "Use f2fs for the root partition" \
|
||||
3>&1 1>&2 2>&3 3>&-)
|
||||
fi
|
||||
else
|
||||
clear
|
||||
exit 1
|
||||
|
|
|
|||
Loading…
Reference in New Issue