diff options
| author | Linux User <emmett@vmi2195005.contaboserver.net> | 2025-04-11 06:52:47 +0000 |
|---|---|---|
| committer | Linux User <emmett@vmi2195005.contaboserver.net> | 2025-04-11 06:52:47 +0000 |
| commit | 45060d13faf603ba1e5f6a636b826fed85114a8a (patch) | |
| tree | 07cb15402a7a72156267070cec32a3465d98f679 | |
| parent | cd09bb7d98628514649b1ea2cec6dff948d5ca04 (diff) | |
| download | alicelinux-45060d13faf603ba1e5f6a636b826fed85114a8a.tar.gz alicelinux-45060d13faf603ba1e5f6a636b826fed85114a8a.zip | |
added utilsclang
| -rw-r--r-- | utils/mkiso.d/include/etc/issue | 21 | ||||
| -rw-r--r-- | utils/mkiso.d/include/etc/skel/.profile | 9 | ||||
| -rw-r--r-- | utils/mkiso.d/init | 96 | ||||
| -rw-r--r-- | utils/mkiso.d/live_script.sh | 26 | ||||
| -rwxr-xr-x | utils/mkiso.sh | 194 | ||||
| -rwxr-xr-x | utils/mkrootfs.sh | 39 | ||||
| -rwxr-xr-x | utils/qemu.sh | 23 |
7 files changed, 408 insertions, 0 deletions
diff --git a/utils/mkiso.d/include/etc/issue b/utils/mkiso.d/include/etc/issue new file mode 100644 index 00000000..e8f879f5 --- /dev/null +++ b/utils/mkiso.d/include/etc/issue @@ -0,0 +1,21 @@ +Alice Linux \r (\l) + +Project page : https://codeberg.org/emmett1/alicelinux + +user login : live +user password: live + +root login : root +root password: root + +run 'sway' after login to start gui + +Some default sway keybindsym reminder: + + Super + Enter : foot terminal + Super + d : menu launcher + Super + Shift + q : quit program + Super + Shift + e : exit sway + +run 'doas poweroff' to poweroff live system + diff --git a/utils/mkiso.d/include/etc/skel/.profile b/utils/mkiso.d/include/etc/skel/.profile new file mode 100644 index 00000000..e425b03b --- /dev/null +++ b/utils/mkiso.d/include/etc/skel/.profile @@ -0,0 +1,9 @@ +# ~/.profile + +export ENV=~/.ashrc + +if [ -z "$XDG_RUNTIME_DIR" ]; then + XDG_RUNTIME_DIR="/tmp/$(id -u)-runtime-dir" + mkdir -pm 0700 "$XDG_RUNTIME_DIR" + export XDG_RUNTIME_DIR +fi diff --git a/utils/mkiso.d/init b/utils/mkiso.d/init new file mode 100644 index 00000000..05356e39 --- /dev/null +++ b/utils/mkiso.d/init @@ -0,0 +1,96 @@ +#!/bin/busybox sh + +NEWROOT=/.newroot +INITRAMFS=/run/initramfs +MEDIA=$INITRAMFS/media +LOWER=$INITRAMFS/lower +UPPER=$INITRAMFS/upper +WORK=$INITRAMFS/work +SFSIMAGE=$MEDIA/boot/rootfs.sfs + +/bin/busybox --install -s /bin + +clear + +mkdir -p /proc /sys /run /dev +mount -t proc proc /proc +mount -t sysfs sysfs /sys +mount -t tmpfs run /run +mount -t devtmpfs dev /dev + +mkdir -p $LOWER $MEDIA $UPPER $WORK $NEWROOT + +exec >/dev/console </dev/console 2>&1 + +PRINTK="`cat /proc/sys/kernel/printk`" +echo "0" > /proc/sys/kernel/printk + +# mdev +mkdir -p /etc +echo '$MODALIAS=.* 0:0 660 @modprobe "$MODALIAS"' > /etc/mdev.conf +mdev -df & pid_mdev=$! + +# load kernel modules, twice +find /sys -name 'modalias' -type f -exec cat '{}' + | sort -u | xargs modprobe -b -a >/dev/null 2>&1 +find /sys -name 'modalias' -type f -exec cat '{}' + | sort -u | xargs modprobe -b -a >/dev/null 2>&1 + +# load kernel modules required for live iso +for m in loop cdrom isofs overlay squashfs usb-storage loop fuse exfat; do + modprobe $m >/dev/null 2>&1 +done + +echo "Please wait..." + +# figure out media +if [ -f /proc/sys/dev/cdrom/info ]; then + CDROM=$(grep name /proc/sys/dev/cdrom/info | awk -F : '{print $2}' | awk '{print $1}') +fi + +while [ "$wait" != 10 ]; do + BLOCK=$(grep -E '[vsh]d' /proc/partitions | awk '{print $4}') + for i in $CDROM $BLOCK; do + mount -v -r /dev/$i $MEDIA >/dev/null 2>&1 || continue + [ -f $MEDIA/boot/livemedia ] || { umount $MEDIA; continue; } + MEDIAFOUND=1 + break 2 + done + wait=$(( wait + 1 )) + sleep 1 +done + +if [ ! "$MEDIAFOUND" ]; then + echo "Media not found even after 10 seconds" + sh + echo "Cannot go further" + sleep 99999 + exit 1 +fi + +# mount stuffs +loopdevice=$(losetup -f) +losetup -f $SFSIMAGE +mount -r $loopdevice $LOWER +mount -t overlay overlay -o lowerdir=$LOWER,upperdir=$UPPER,workdir=$WORK $NEWROOT +if [ -f $MEDIA/boot/rootfs.gz ]; then + tar -xzaf $MEDIA/boot/rootfs.gz -C $NEWROOT +fi + +kill $pid_mdev + +mount --move /sys $NEWROOT/sys +mount --move /proc $NEWROOT/proc +mount --move /dev $NEWROOT/dev +mount --move /run $NEWROOT/run + +# execute live script if exist +if [ -f $NEWROOT/$MEDIA/boot/live_script.sh ]; then + chroot $NEWROOT sh $MEDIA/boot/live_script.sh +fi + +# switch to newroot +clear +exec /bin/switch_root $NEWROOT /sbin/init + +echo "This is the end of initramfs" +echo "Nothing further, here's the shell" +/bin/busybox sh diff --git a/utils/mkiso.d/live_script.sh b/utils/mkiso.d/live_script.sh new file mode 100644 index 00000000..bb470dc1 --- /dev/null +++ b/utils/mkiso.d/live_script.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +LIVEUSER=live +PASSWORD=live +LIVEHOSTNAME=alicelive + +adduser -D $LIVEUSER +for g in users wheel audio video input; do + addgroup $LIVEUSER $g +done + +passwd -d $LIVEUSER >/dev/null 2>&1 +passwd -d root >/dev/null 2>&1 + +echo "root:root" | chpasswd -c SHA512 +echo "$LIVEUSER:$PASSWORD" | chpasswd -c SHA512 + +for sv in tty1 tty2 tty3 seatd; do + [ -d /etc/sv/$sv ] && ln -s /etc/sv/$sv /var/service +done + +echo $LIVEHOSTNAME > /etc/hostname + +if [ -f /etc/doas.conf ]; then + echo "permit nopass $LIVEUSER" >> /etc/doas.conf +fi diff --git a/utils/mkiso.sh b/utils/mkiso.sh new file mode 100755 index 00000000..c6fc083d --- /dev/null +++ b/utils/mkiso.sh @@ -0,0 +1,194 @@ +#!/bin/sh -e + +msg() { echo "-> $@"; } +cleanup() { rm -rf $WORKDIR; } + +prepare_rootfs() { + [ -d $ROOTFS ] && return + basepkg="baselayout autils binutils bison busybox + bzip2 ca-certificates curl file flex gcc + git gmp initscripts linux-headers m4 make + mpc mpfr musl openssl patch spm xz zlib" + requiredpkg="linux grub syslinux efibootmgr" + extrapkg="pfetch sway swaybg swayidle swaylock wmenu mpv + foot firefox fff ranger dejavu-fonts-ttf wpa_supplicant dhcpcd + imv lm-sensors opendoas zstd rsync squashfs-tools" + mkdir -p $ROOTFS/var/lib/spm/db + APKG_NOPROMPT=1 APKG_ROOT=$ROOTFS apkg -I $basepkg $requiredpkg $extrapkg +} + +squashfs_rootfs() { + [ -f $ISODIR/boot/rootfs.sfs ] && return + mkdir -p $ISODIR/boot + + msg "squashing rootfs..." + mksquashfs \ + $ROOTFS \ + $ISODIR/boot/rootfs.sfs \ + -b 1048576 \ + -comp xz \ + -wildcards \ + -e tmp/* -e root/* -e sys/* -e dev/* -e proc/* -e run/* +} + +add_kmod() { + [ -f $INITRAMFSDIR/$KERNEL_MODULES_DIR/$1 ] && continue + mkdir -p $INITRAMFSDIR/$KERNEL_MODULES_DIR/${1%/*} + cp $ROOTFS/$KERNEL_MODULES_DIR/$1 $INITRAMFSDIR/$KERNEL_MODULES_DIR/${1%/*} + for d in $(grep $1: $ROOTFS/$KERNEL_MODULES_DIR/modules.dep | tr ' ' '\n' | tail -n+2); do + add_kmod $d + done +} + +make_initramfs() { + [ -f $ISODIR/boot/initrd ] && return + mkdir -p $INITRAMFSDIR/bin + cp $MKISOD/init $INITRAMFSDIR + chmod +x $INITRAMFSDIR/init + cp /bin/busybox $INITRAMFSDIR/bin + + KERNEL_VER=$(file $ROOTFS/boot/vmlinuz-linux | awk '{print $9}') + KERNEL_MODULES_DIR=lib/modules/$KERNEL_VER + + msg "copying kernel modules..." + ( cd $ROOTFS/$KERNEL_MODULES_DIR + for rk in $required_kmods; do + [ -d kernel/$rk ] || continue + for f in $(find kernel/$rk -type f); do + add_kmod $f + done + done + ) + + for i in order builtin builtin.modinfo; do + cp $ROOTFS/$KERNEL_MODULES_DIR/modules.$i $INITRAMFSDIR/lib/modules/$KERNEL_VER/ + done + depmod -b $INITRAMFSDIR $KERNEL_VER + + msg "generating live initrd..." + ( cd $INITRAMFSDIR ; find . | cpio -o -H newc | gzip -9 ) > $ISODIR/boot/initrd +} + +prepare_grub() { + [ -f $ISODIR/boot/efiboot.img ] && return + msg "preparing grub boot files..." + mkdir -p $ISODIR/boot/grub/x86_64-efi $ISODIR/boot/grub/fonts + echo "set prefix=/boot/grub" > $ISODIR/boot/grub-early.cfg + cp -a $ROOTFS/usr/lib/grub/x86_64-efi/*.mod $ISODIR/boot/grub/x86_64-efi + cp -a $ROOTFS/usr/lib/grub/x86_64-efi/*.lst $ISODIR/boot/grub/x86_64-efi + cp $ROOTFS/usr/share/grub/unicode.pf2 $ISODIR/boot/grub/fonts/unicode.pf2 + + # UEFI + rm -f $ISODIR/boot/efiboot.img + mkdir -p $ISODIR/efi/boot + grub-mkimage -c $ISODIR/boot/grub-early.cfg -o $ISODIR/efi/boot/bootx64.efi -O x86_64-efi -p "" iso9660 normal search search_fs_file + modprobe loop + dd if=/dev/zero of=$ISODIR/boot/efiboot.img count=4096 + mkdosfs -n LIVE-UEFI $ISODIR/boot/efiboot.img + mkdir -p $ISODIR/boot/efiboot + mount -o loop $ISODIR/boot/efiboot.img $ISODIR/boot/efiboot + mkdir -p $ISODIR/boot/efiboot/EFI/boot + cp $ISODIR/efi/boot/bootx64.efi $ISODIR/boot/efiboot/EFI/boot + umount $ISODIR/boot/efiboot + rm -fr $ISODIR/boot/efiboot +} + +prepare_syslinux() { + [ -f $ISODIR/isolinux/isolinux.bin ] && return + msg "preparing syslinux boot files..." + mkdir -p $ISODIR/isolinux + cp $ROOTFS/usr/share/syslinux/ldlinux.c32 $ISODIR/isolinux + cp $ROOTFS/usr/share/syslinux/isolinux.bin $ISODIR/isolinux +} + +make_iso() { + cp $ROOTFS/boot/vmlinuz-linux $ISODIR/boot/vmlinuz + [ -f $MKISOD/live_script.sh ] && cp $MKISOD/live_script.sh $ISODIR/boot + touch $ISODIR/boot/livemedia + + if [ -d $MKISOD/include ]; then + echo "include rootfs files..." + ( + cd $MKISOD/include + chown -R 0:0 * + tar -czf $ISODIR/boot/rootfs.gz * + ) + fi + + cat << EOF > $ISODIR/isolinux/isolinux.cfg +#UI /isolinux/menu.c32 +DEFAULT silent +TIMEOUT 0 + +LABEL silent +LINUX /boot/vmlinuz +APPEND initrd=/boot/initrd +EOF + + cat << EOF > $ISODIR/boot/grub/grub.cfg +set default=0 +set timeout=3 +set timeout_style=hidden + +menuentry 'Alice Linux' { + linux /boot/vmlinuz + initrd /boot/initrd +} +EOF + + msg "generating iso..." + rm -f $OUTPUT + xorriso -as mkisofs \ + -isohybrid-mbr $ROOTFS/usr/share/syslinux/isohdpfx.bin \ + -c isolinux/boot.cat \ + -b isolinux/isolinux.bin \ + -no-emul-boot \ + -boot-load-size 4 \ + -boot-info-table \ + -eltorito-alt-boot \ + -e boot/efiboot.img \ + -no-emul-boot \ + -isohybrid-gpt-basdat \ + -volid ALICE \ + -o $OUTPUT $ISODIR + + sha256sum $OUTPUT > $ISOSUM +} + +WORKDIR=/tmp/alice-iso +ROOTFS=$WORKDIR/rootfs +ISODIR=$WORKDIR/liveiso +INITRAMFSDIR=$WORKDIR/initramfs +MKISOD=$PWD/mkiso.d +OUTPUT=$PWD/alicelinux-$(date +%Y%m%d).iso +ISOSUM=$OUTPUT.sha256sum + +required_kmods="crypto + fs lib + drivers/block + drivers/md + drivers/ata + drivers/firewire + drivers/input/keyboard + drivers/input/mouse + drivers/scsi + drivers/message + drivers/pcmcia + drivers/virtio + drivers/usb/host + drivers/usb/storage + drivers/hid + drivers/cdrom" + +cleanup +prepare_rootfs +squashfs_rootfs +make_initramfs +prepare_grub +prepare_syslinux +make_iso +cleanup + +msg "making iso done" + +exit 0 diff --git a/utils/mkrootfs.sh b/utils/mkrootfs.sh new file mode 100755 index 00000000..0b31bdcc --- /dev/null +++ b/utils/mkrootfs.sh @@ -0,0 +1,39 @@ +#!/bin/sh -e + +[ "$(id -u)" = 0 ] || { + echo "making rootfs required root access" + false +} + +HERE=$(pwd) +OUTNAME=alicelinux-rootfs-$(date +%Y%m%d) +TARBALL=$HERE/$OUTNAME.tar.xz +PKGLIST=$TARBALL.pkglist +SHASUM=$TARBALL.sha256sum +ROOTFS=/tmp/alicerootfs +basepkg="baselayout autils b3sum bison busybox bzip2 + ca-certificates curl file git initscripts + libressl linux-headers llvm m4 make musl + patch spm xz zlib-ng zstd" + +rm -rf $ROOTFS +mkdir -p $ROOTFS/var/lib/spm/db +APKG_ROOT=$ROOTFS apkg -i $basepkg +apkg-chroot $ROOTFS revdep -v + +rm -f $TARBALL + +echo "compressing rootfs..." +(cd $ROOTFS; tar -cJpf $TARBALL *) + +for i in $ROOTFS/var/lib/spm/db/*; do + n=${i##*/} + v=$(head -n1 $i); v=${v%-*} + echo "$n $v" >> $PKGLIST +done + +sha256sum ${TARBALL##*/} > $SHASUM + +rm -rf $ROOTFS + +echo "alice rootfs created." diff --git a/utils/qemu.sh b/utils/qemu.sh new file mode 100755 index 00000000..11b82a6d --- /dev/null +++ b/utils/qemu.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +PORTSDIR="$(dirname $(dirname $(realpath $0)))" +SCRIPTDIR="$(dirname $(realpath $0))" + +[ -f /tmp/qemu-vm.img ] || { + qemu-img create -f qcow2 /tmp/qemu-vm.img 50G +} + +qemu-system-x86_64 -enable-kvm \ + -cpu host \ + -drive file=/tmp/qemu-vm.img,if=virtio \ + -device virtio-rng-pci \ + -m 2G \ + -smp 4 \ + -monitor stdio \ + -name "QEMU" \ + -boot d \ + -cdrom $@ + +rm -f /tmp/qemu-vm.img + +exit 0 |