mirror of
https://github.com/t2linux/T2-Ubuntu.git
synced 2026-04-30 13:31:49 -07:00
171 lines
5.9 KiB
Bash
Executable File
171 lines
5.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -eu -o pipefail
|
|
|
|
ROOT_PATH=$(pwd)/work
|
|
OUTPUT_PATH=$(pwd)/output
|
|
|
|
FLAVOUR=$1
|
|
if [ "$FLAVOUR" = "ubuntucinnamon" ]; then
|
|
FLAVOUR_CAP="Ubuntu Cinnamon"
|
|
elif [ "$FLAVOUR" = "ubuntu-mate" ]; then
|
|
FLAVOUR_CAP="Ubuntu MATE"
|
|
elif [ "$FLAVOUR" = "ubuntukylin" ]; then
|
|
FLAVOUR_CAP="Ubuntu Kylin"
|
|
else
|
|
FLAVOUR_CAP=$(echo "${FLAVOUR}" | tr '_-' ' ' | awk '{for(i=1;i<=NF;i++) $i=toupper(substr($i,1,1)) substr($i,2); print}')
|
|
fi
|
|
ISO_MOUNT_DIR="$ROOT_PATH/${FLAVOUR}-original" # Temporary mount point for the original ISO
|
|
VER=26.04
|
|
CODENAME=resolute
|
|
KERNEL_VERSION=7.0.1
|
|
PKGREL=1
|
|
ISO_IMAGE=${FLAVOUR}-26.04-desktop-amd64.iso
|
|
ISO_IMAGE_OUTPUT="${OUTPUT_PATH}/${FLAVOUR}-${VER}-${KERNEL_VERSION}-t2-${CODENAME}.iso"
|
|
ISO_WORK_DIR="$ROOT_PATH/${FLAVOUR}-iso"
|
|
CHROOT_DIR="$ROOT_PATH/${FLAVOUR}-edit"
|
|
CHROOT_DIR_EXTRA="$ROOT_PATH/${FLAVOUR}-edit-extra"
|
|
|
|
if [ "$FLAVOUR" = "kubuntu" ] || [ "$FLAVOUR" = "ubuntu-unity" ]; then
|
|
SUBIQUITY=no
|
|
else
|
|
SUBIQUITY=yes
|
|
fi
|
|
|
|
echo "ROOT_PATH=$ROOT_PATH"
|
|
echo "ISO_MOUNT_DIR=$ISO_MOUNT_DIR"
|
|
echo "ISO_WORK_DIR=$ISO_WORK_DIR"
|
|
echo "CHROOT_DIR=$CHROOT_DIR"
|
|
|
|
mkdir -p "$ROOT_PATH"
|
|
mkdir -p "$ISO_WORK_DIR"
|
|
mkdir -p "$CHROOT_DIR"
|
|
mkdir -p "$(dirname "$ISO_IMAGE_OUTPUT")"
|
|
touch "$ISO_IMAGE_OUTPUT"
|
|
echo >&2 "===]> Info: Installing required packages..."
|
|
|
|
apt update && apt update && \
|
|
DEBIAN_FRONTEND=noninteractive apt install -y tzdata \
|
|
&& apt install -y util-linux rsync squashfs-tools grub-pc-bin grub-common \
|
|
xorriso isolinux grub-efi-amd64-bin mtools dosfstools curl
|
|
|
|
echo >&2 "===]> Info: Download ISO..."
|
|
if [ "$FLAVOUR" = "ubuntu" ]; then
|
|
curl -L -o "$(pwd)/${ISO_IMAGE}" "https://releases.ubuntu.com/${VER}/${ISO_IMAGE}"
|
|
else
|
|
curl -L -o "$(pwd)/${ISO_IMAGE}" "https://cdimage.ubuntu.com/${FLAVOUR}/releases/${VER}/release/${ISO_IMAGE}"
|
|
fi
|
|
|
|
# Run entrypoint.sh to extract and customize the ISO
|
|
echo >&2 "===]> Info: Starting extraction and customization..."
|
|
/bin/bash -c "
|
|
ISO_IMAGE=${ISO_IMAGE} \\
|
|
ISO_MOUNT_DIR=${ISO_MOUNT_DIR} \\
|
|
ISO_WORK_DIR=${ISO_WORK_DIR} \\
|
|
CHROOT_DIR=${CHROOT_DIR} \\
|
|
CHROOT_DIR_EXTRA=${CHROOT_DIR_EXTRA} \\
|
|
ROOT_PATH=${ROOT_PATH} \\
|
|
KERNEL_VERSION=${KERNEL_VERSION} \\
|
|
FLAVOUR=${FLAVOUR} \\
|
|
SUBIQUITY=${SUBIQUITY} \\
|
|
$(pwd)/01_edit_iso.sh"
|
|
|
|
# Enter the Chroot Environment and Apply Customizations
|
|
echo >&2 "===]> Info: Creating chroot environment... "
|
|
# Mount Required Filesystems for Chroot
|
|
mount --bind /dev "${CHROOT_DIR}/dev"
|
|
mount --bind /dev/pts "${CHROOT_DIR}/dev/pts"
|
|
mount --bind /proc "${CHROOT_DIR}/proc"
|
|
mount --bind /sys "${CHROOT_DIR}/sys"
|
|
|
|
mkdir -p "${CHROOT_DIR}/tmp/setup_files"
|
|
#rm -f "${CHROOT_DIR}/etc/resolv.conf"
|
|
#make a back up
|
|
cp -p "${CHROOT_DIR}/etc/resolv.conf" "${CHROOT_DIR}/etc/resolv.conf.backup"
|
|
cp -p /etc/resolv.conf "${CHROOT_DIR}/etc/resolv.conf"
|
|
cp "$(pwd)/chroot_iso.sh" "${CHROOT_DIR}/tmp/setup_files"
|
|
ls "${CHROOT_DIR}/tmp/setup_files"
|
|
echo >&2 "===]> Info: Running chroot environment... "
|
|
chroot "${CHROOT_DIR}" /bin/bash -c "KERNEL_VERSION=${KERNEL_VERSION} PKGREL=${PKGREL} SUBIQUITY=${SUBIQUITY} /tmp/setup_files/chroot_iso.sh"
|
|
echo >&2 "===]> Info: Getting Kernel environment... "
|
|
T2_KERNEL=${KERNEL_VERSION}-${PKGREL}-t2-${CODENAME}
|
|
|
|
echo >&2 "===]> Info: Cleanup the chroot environment... "
|
|
# restore backup
|
|
cp -p "${CHROOT_DIR}/etc/resolv.conf.backup" "${CHROOT_DIR}/etc/resolv.conf"
|
|
sleep 10 #Sometimes umount fails as mounts are busy.
|
|
umount "${CHROOT_DIR}/dev/pts"
|
|
umount "${CHROOT_DIR}/dev"
|
|
umount "${CHROOT_DIR}/proc"
|
|
umount "${CHROOT_DIR}/sys"
|
|
|
|
echo >&2 "===]> Info: Reset firmware flag for fresh boot... "
|
|
rm -f "${CHROOT_DIR}/etc/get_apple_firmware_attempted" || true
|
|
|
|
echo >&2 "===]> Info: Squashing ${FLAVOUR_CAP} file system ... "
|
|
if [ "$SUBIQUITY" = "yes" ]; then
|
|
mksquashfs "$CHROOT_DIR" "$ISO_WORK_DIR/casper/minimal.squashfs" -comp xz -noappend
|
|
printf "%s" "$(du -sx --block-size=1 "${CHROOT_DIR}" | cut -f1)" >"${ISO_WORK_DIR}"/casper/minimal.size
|
|
chroot "${CHROOT_DIR}" dpkg-query -W --showformat='${Package} ${Version}\n' | tee "${ISO_WORK_DIR}"/casper/minimal.manifest
|
|
cd ${ISO_WORK_DIR}/casper
|
|
ln -s minimal.size minimal.standard.size
|
|
ln -s minimal.squashfs minimal.standard.squashfs
|
|
ln -s minimal.manifest filesystem.manifest
|
|
FILESYSTEM_SIZE=$(($(cat minimal.size)+$(cat minimal.standard.live.size)))
|
|
echo ${FILESYSTEM_SIZE} > filesystem.size
|
|
LINUXGENERIC=$(cat ./install-sources.yaml | grep default | grep generic | cut -d ":" -f 2 | xargs)
|
|
cat <<EOF | tee ./install-sources.yaml
|
|
kernel:
|
|
default: ${LINUXGENERIC}
|
|
sources:
|
|
- default: true
|
|
description:
|
|
en: ${FLAVOUR_CAP} for T2 Macs
|
|
id: ${FLAVOUR}-desktop-minimal
|
|
locale_support: none
|
|
name:
|
|
en: ${FLAVOUR_CAP} 26.04 Resolute Raccoon
|
|
path: minimal.squashfs
|
|
size: ${FILESYSTEM_SIZE}
|
|
type: fsimage-layered
|
|
variant: desktop
|
|
version: 2
|
|
EOF
|
|
cd -
|
|
else
|
|
mksquashfs "$CHROOT_DIR" "$ISO_WORK_DIR/casper/filesystem.squashfs" -comp xz -noappend
|
|
fi
|
|
|
|
# Run create_iso.sh to generate the new ISO
|
|
# echo "Creating the custom ISO..."
|
|
echo >&2 "===]> Info: Creating iso ... "
|
|
/bin/bash -c "
|
|
ISO_WORK_DIR=${ISO_WORK_DIR} \\
|
|
CHROOT_DIR=${CHROOT_DIR} \\
|
|
ISO_IMAGE_OUTPUT=${ISO_IMAGE_OUTPUT} \\
|
|
ROOT_PATH=${ROOT_PATH} \\
|
|
T2_KERNEL=${T2_KERNEL} \\
|
|
FLAVOUR=${FLAVOUR} \\
|
|
SUBIQUITY=${SUBIQUITY} \\
|
|
$(pwd)/02_create_iso.sh"
|
|
# split iso
|
|
|
|
ISO_SIZE=$(du -m "${OUTPUT_PATH}/${FLAVOUR}-${VER}-${KERNEL_VERSION}-t2-${CODENAME}.iso" | cut -f1)
|
|
if [ "$ISO_SIZE" -gt 6000 ]; then
|
|
SPLIT_SIZE=2000M
|
|
elif [ "$ISO_SIZE" -gt 4500 ]; then
|
|
SPLIT_SIZE=1500M
|
|
elif [ "$ISO_SIZE" -gt 4000 ]; then
|
|
SPLIT_SIZE=1200M
|
|
elif [ "$ISO_SIZE" -gt 3000 ]; then
|
|
SPLIT_SIZE=1000M
|
|
elif [ "$ISO_SIZE" -gt 2000 ]; then
|
|
SPLIT_SIZE=600M
|
|
else
|
|
SPLIT_SIZE=500M
|
|
fi
|
|
split -b "${SPLIT_SIZE}" -x "${OUTPUT_PATH}/${FLAVOUR}-${VER}-${KERNEL_VERSION}-t2-${CODENAME}.iso" "${OUTPUT_PATH}/${FLAVOUR}-${VER}-${KERNEL_VERSION}-t2-${CODENAME}.iso."
|
|
sha256sum "${OUTPUT_PATH}"/*.iso > "${OUTPUT_PATH}/sha256-${FLAVOUR}-${VER}"
|
|
|
|
|