From 0dfa3c4febec69d832dccdf23730328fa87eeae5 Mon Sep 17 00:00:00 2001 From: isoft Date: Mon, 19 Dec 2022 09:35:53 +0000 Subject: [PATCH] add sw64 architecture --- .../live/config_files/sw64/boot.msg | 5 + .../live/config_files/sw64/grub.conf | 13 +++ .../live/config_files/sw64/grub2-efi.cfg | 36 ++++++ .../live/config_files/sw64/isolinux.cfg | 110 ++++++++++++++++++ .../99-generic/runtime-cleanup.tmpl | 14 ++- .../99-generic/runtime-install.tmpl | 48 ++++---- share/templates.d/99-generic/sw64.tmpl | 96 +++++++++++++++ src/pylorax/__init__.py | 4 +- src/pylorax/creator.py | 13 +-- src/pylorax/mount.py | 2 +- src/pylorax/treebuilder.py | 5 +- 11 files changed, 305 insertions(+), 41 deletions(-) create mode 100644 share/templates.d/99-generic/live/config_files/sw64/boot.msg create mode 100644 share/templates.d/99-generic/live/config_files/sw64/grub.conf create mode 100644 share/templates.d/99-generic/live/config_files/sw64/grub2-efi.cfg create mode 100644 share/templates.d/99-generic/live/config_files/sw64/isolinux.cfg create mode 100644 share/templates.d/99-generic/sw64.tmpl diff --git a/share/templates.d/99-generic/live/config_files/sw64/boot.msg b/share/templates.d/99-generic/live/config_files/sw64/boot.msg new file mode 100644 index 0000000..ff54899 --- /dev/null +++ b/share/templates.d/99-generic/live/config_files/sw64/boot.msg @@ -0,0 +1,5 @@ + +splash.lss + + - Press the 0107 key to begin the installation process. + diff --git a/share/templates.d/99-generic/live/config_files/sw64/grub.conf b/share/templates.d/99-generic/live/config_files/sw64/grub.conf new file mode 100644 index 0000000..6c4a51f --- /dev/null +++ b/share/templates.d/99-generic/live/config_files/sw64/grub.conf @@ -0,0 +1,13 @@ +#debug --graphics +default=1 +splashimage=@SPLASHPATH@ +timeout 60 +hiddenmenu +title Start @PRODUCT@ @VERSION@ + findiso + kernel @KERNELPATH@ @ROOT@ @EXTRA@ rd.live.image quiet + initrd @INITRDPATH@ +title Test this media & start @PRODUCT@ @VERSION@ + findiso + kernel @KERNELPATH@ @ROOT@ @EXTRA@ rd.live.image rd.live.check quiet + initrd @INITRDPATH@ diff --git a/share/templates.d/99-generic/live/config_files/sw64/grub2-efi.cfg b/share/templates.d/99-generic/live/config_files/sw64/grub2-efi.cfg new file mode 100644 index 0000000..2e24b15 --- /dev/null +++ b/share/templates.d/99-generic/live/config_files/sw64/grub2-efi.cfg @@ -0,0 +1,36 @@ +set default="1" + +function load_video { + insmod efi_gop + insmod efi_uga + insmod video_bochs + insmod video_cirrus + insmod all_video +} + +load_video +set gfxpayload=keep +insmod gzio +insmod part_gpt +insmod ext2 + +set timeout=60 +### END /etc/grub.d/00_header ### + +search --no-floppy --set=root -l '@ISOLABEL@' + +### BEGIN /etc/grub.d/10_linux ### +menuentry 'Start @PRODUCT@ @VERSION@' --class fedora --class gnu-linux --class gnu --class os { + linuxefi @KERNELPATH@ @ROOT@ @EXTRA@ rd.live.image quiet + initrdefi @INITRDPATH@ +} +menuentry 'Test this media & start @PRODUCT@ @VERSION@' --class fedora --class gnu-linux --class gnu --class os { + linuxefi @KERNELPATH@ @ROOT@ @EXTRA@ rd.live.image rd.live.check quiet + initrdefi @INITRDPATH@ +} +submenu 'Troubleshooting -->' { + menuentry 'Start @PRODUCT@ @VERSION@ in basic graphics mode' --class fedora --class gnu-linux --class gnu --class os { + linuxefi @KERNELPATH@ @ROOT@ @EXTRA@ rd.live.image nomodeset quiet + initrdefi @INITRDPATH@ + } +} diff --git a/share/templates.d/99-generic/live/config_files/sw64/isolinux.cfg b/share/templates.d/99-generic/live/config_files/sw64/isolinux.cfg new file mode 100644 index 0000000..bc36bb9 --- /dev/null +++ b/share/templates.d/99-generic/live/config_files/sw64/isolinux.cfg @@ -0,0 +1,110 @@ +default vesamenu.c32 +timeout 600 + +display boot.msg + +# Clear the screen when exiting the menu, instead of leaving the menu displayed. +# For vesamenu, this means the graphical background is still displayed without +# the menu itself for as long as the screen remains in graphics mode. +menu clear +menu background splash.png +menu title @PRODUCT@ @VERSION@ +menu vshift 8 +menu rows 18 +menu margin 8 +#menu hidden +menu helpmsgrow 15 +menu tabmsgrow 13 + +# Border Area +menu color border * #00000000 #00000000 none + +# Selected item +menu color sel 0 #ffffffff #00000000 none + +# Title bar +menu color title 0 #ff7ba3d0 #00000000 none + +# Press [Tab] message +menu color tabmsg 0 #ff3a6496 #00000000 none + +# Unselected menu item +menu color unsel 0 #84b8ffff #00000000 none + +# Selected hotkey +menu color hotsel 0 #84b8ffff #00000000 none + +# Unselected hotkey +menu color hotkey 0 #ffffffff #00000000 none + +# Help text +menu color help 0 #ffffffff #00000000 none + +# A scrollbar of some type? Not sure. +menu color scrollbar 0 #ffffffff #ff355594 none + +# Timeout msg +menu color timeout 0 #ffffffff #00000000 none +menu color timeout_msg 0 #ffffffff #00000000 none + +# Command prompt text +menu color cmdmark 0 #84b8ffff #00000000 none +menu color cmdline 0 #ffffffff #00000000 none + +# Do not display the actual menu unless the user presses a key. All that is displayed is a timeout message. + +menu tabmsg Press Tab for full configuration options on menu items. + +menu separator # insert an empty line +menu separator # insert an empty line + +label linux + menu label ^Start @PRODUCT@ @VERSION@ + kernel vmlinuz + append initrd=initrd.img @ROOT@ @EXTRA@ rd.live.image quiet + +label check + menu label Test this ^media & start @PRODUCT@ @VERSION@ + menu default + kernel vmlinuz + append initrd=initrd.img @ROOT@ @EXTRA@ rd.live.image rd.live.check quiet + +menu separator # insert an empty line + +# utilities submenu +menu begin ^Troubleshooting + menu title Troubleshooting + +label vesa + menu indent count 5 + menu label Start @PRODUCT@ @VERSION@ in ^basic graphics mode + text help + Try this option out if you're having trouble starting + @PRODUCT@ @VERSION@. + endtext + kernel vmlinuz + append initrd=initrd.img @ROOT@ @EXTRA@ rd.live.image nomodeset quiet + +label memtest + menu label Run a ^memory test + text help + If your system is having issues, a problem with your + system's memory may be the cause. Use this utility to + see if the memory is working correctly. + endtext + kernel memtest + +menu separator # insert an empty line + +label local + menu label Boot from ^local drive + localboot 0xffff + +menu separator # insert an empty line +menu separator # insert an empty line + +label returntomain + menu label Return to ^main menu + menu exit + +menu end diff --git a/share/templates.d/99-generic/runtime-cleanup.tmpl b/share/templates.d/99-generic/runtime-cleanup.tmpl index 6be0a4c..2cfb11c 100644 --- a/share/templates.d/99-generic/runtime-cleanup.tmpl +++ b/share/templates.d/99-generic/runtime-cleanup.tmpl @@ -43,7 +43,7 @@ ## Miscellanous unnecessary gpg program removepkg pinentry ## no storage device monitoring -removepkg device-mapper-event dmraid-events sgpio +## removepkg device-mapper-event dmraid-events sgpio ## logrotate isn't useful in anaconda removepkg logrotate remove /etc/logrotate.d @@ -76,12 +76,18 @@ remove /usr/share/mime/video /usr/share/mime/x-content /usr/share/mime/x-epoc remove /var/db /var/games /var/tmp /var/yp /var/nis /var/opt /var/local remove /var/mail /var/spool /var/preserve /var/report -remove /var/lib/rpm/* /var/lib/yum /var/lib/dnf +## remove /var/lib/rpm/* /var/lib/yum /var/lib/dnf ## clean up the files created by various '> /dev/null's remove /dev/* ## icons cache remove /usr/share/icons/*/icon-theme.cache +remove /usr/lib/fontconfig/cache/* +remove /lib/fontconfig/cache/* +remove /var/lib/systemd/catalog/database +remove /var/cache/ldconfig/aux-cache +remove /var/log/tallylog +remove /root/lorax-packages.log rebuildfile/rootfs/root/lorax-packages.log ## clean up kernel modules removekmod sound drivers/media drivers/hwmon \ @@ -132,7 +138,7 @@ removefrom authconfig /usr/sbin/* /usr/share/* removefrom bash /etc/* /usr/bin/bashbug* /usr/share/* removefrom bind-utils /usr/bin/host /usr/bin/nsupdate -removefrom bitmap-fangsongti-fonts /usr/share/fonts/* +## removefrom bitmap-fangsongti-fonts /usr/share/fonts/* removefrom ca-certificates /etc/pki/java/* removefrom ca-certificates /etc/pki/tls/certs/ca-bundle.trust.crt /etc/ssl/* removefrom cairo /usr/${libdir}/libcairo-script* /usr/bin/cairo-sphinx diff --git a/share/templates.d/99-generic/runtime-install.tmpl b/share/templates.d/99-generic/runtime-install.tmpl index 792cf70..d7fc112 100644 --- a/share/templates.d/99-generic/runtime-install.tmpl +++ b/share/templates.d/99-generic/runtime-install.tmpl @@ -5,7 +5,7 @@ installpkg anaconda anaconda-widgets kexec-tools-anaconda-addon anaconda-install-env-deps ## Other available payloads installpkg dnf -installpkg rpm-ostree ostree +installpkg rpm ## speed up compression on multicore systems installpkg pigz @@ -105,7 +105,7 @@ ## extra storage packages # hostname is needed for iscsi to work, see RHBZ#1593917 -installpkg udisks2 udisks2-iscsi hostname +installpkg udisks2 hostname ## extra libblockdev plugins installpkg libblockdev-lvm-dbus @@ -129,7 +129,7 @@ installpkg pciutils usbutils ipmitool installpkg mt-st smartmontools installpkg hdparm -%if basearch not in ("aarch64", "ppc64le", "s390x"): +%if basearch not in ("aarch64", "ppc64le", "s390x", "sw_64"): installpkg pcmciautils %endif ## see bug #1483278 @@ -143,24 +143,24 @@ ## fonts & themes -installpkg aajohan-comfortaa-fonts +#installpkg aajohan-comfortaa-fonts installpkg abattis-cantarell-fonts -installpkg bitmap-fangsongti-fonts +#installpkg bitmap-fangsongti-fonts installpkg dejavu-sans-fonts dejavu-sans-mono-fonts installpkg google-noto-sans-cjk-ttc-fonts -installpkg google-noto-sans-gurmukhi-fonts -installpkg google-noto-sans-sinhala-vf-fonts +#installpkg google-noto-sans-gurmukhi-fonts +#installpkg google-noto-sans-sinhala-vf-fonts installpkg jomolhari-fonts -installpkg khmeros-base-fonts -installpkg lohit-assamese-fonts -installpkg lohit-bengali-fonts -installpkg lohit-devanagari-fonts -installpkg lohit-gujarati-fonts -installpkg lohit-kannada-fonts -installpkg lohit-marathi-fonts -installpkg lohit-odia-fonts -installpkg lohit-tamil-fonts -installpkg lohit-telugu-fonts +#installpkg khmeros-base-fonts +#installpkg lohit-assamese-fonts +#installpkg lohit-bengali-fonts +#installpkg lohit-devanagari-fonts +#installpkg lohit-gujarati-fonts +#installpkg lohit-kannada-fonts +#installpkg lohit-marathi-fonts +#installpkg lohit-odia-fonts +#installpkg lohit-tamil-fonts +#installpkg lohit-telugu-fonts installpkg madan-fonts installpkg paktype-naskh-basic-fonts installpkg sil-abyssinica-fonts @@ -171,13 +171,13 @@ installpkg xorg-x11-fonts-misc ## debugging/bug reporting tools -installpkg gdb-gdbserver -installpkg libreport-plugin-bugzilla libreport-plugin-reportuploader +#installpkg gdb-gdbserver +#installpkg libreport-plugin-bugzilla libreport-plugin-reportuploader installpkg fpaste installpkg python3-pyatspi ## extra tools not required by anaconda -installpkg vim-minimal strace lsof dump xz less +installpkg vim-minimal strace lsof xz less installpkg wget rsync bind-utils ftp mtr vconfig installpkg icfg spice-vdagent installpkg gdisk hexedit sg3_utils diff --git a/share/templates.d/99-generic/sw64.tmpl b/share/templates.d/99-generic/sw64.tmpl new file mode 100644 index 0000000..8d669c9 --- /dev/null +++ b/share/templates.d/99-generic/sw64.tmpl @@ -0,0 +1,96 @@ +<%page args="kernels, runtime_img, runtime_base, basearch, inroot, outroot, product, isolabel"/> +<% +configdir="tmp/config_files/sw64" +STAGE2IMG="isoft/sw64/root-image.fs.sfs" +#BOOTDIR="isolinux" +BOOTDIR="boot" +ISOLINUXDIR="isolinux" +LORAXDIR="usr/share/lorax/" + +## Don't allow spaces or escape characters in the iso label +#def valid_label(ch): +# return ch.isalnum() or ch == '_' + +#isolabel = ''.join(ch if valid_label(ch) else '-' for ch in isolabel) + +import os +from os.path import basename +from pylorax.sysutils import joinpaths + +# Test the runtime_img, if it is > 4GiB we need to set -iso-level to 3 +if os.stat(joinpaths(inroot, runtime_img)).st_size >= 4*1024**3: + isoargs = "-iso-level 3" +else: + isoargs = "" +%> + +mkdir isoft/sw64 +install ${runtime_img} ${STAGE2IMG} +treeinfo stage2 mainimage isoft/sw64/${runtime_base} + +## install bootloader and config files +mkdir ${ISOLINUXDIR} +install ${configdir}/isolinux.bin ${ISOLINUXDIR} +install ${configdir}/isolinux.cfg ${ISOLINUXDIR} +install ${configdir}/boot.msg ${ISOLINUXDIR} +install ${configdir}/grub.conf ${ISOLINUXDIR} +install usr/share/anaconda/boot/syslinux-splash.png ${ISOLINUXDIR}/splash.png +install ${configdir}/isolinux/anaconda_configure_user.sh ${ISOLINUXDIR} +install ${configdir}/isolinux/.bashrc ${ISOLINUXDIR} + +## configure bootloader +replace @VERSION@ ${product.version} ${ISOLINUXDIR}/grub.conf ${ISOLINUXDIR}/isolinux.cfg ${ISOLINUXDIR}/*.msg +replace @PRODUCT@ '${product.name}' ${ISOLINUXDIR}/grub.conf ${ISOLINUXDIR}/isolinux.cfg ${ISOLINUXDIR}/*.msg +replace @ROOT@ 'inst.stage2=hd:LABEL=${isolabel|udev}' ${ISOLINUXDIR}/isolinux.cfg + +## install kernels +mkdir ${BOOTDIR} +mkdir ${BOOTDIR}/grub +mkdir ${BOOTDIR}/grub/fonts +mkdir ${BOOTDIR}/grub/locale +install ${configdir}/boot/bootloader.bin ${BOOTDIR} +install ${configdir}/boot/grub/grub.cfg ${BOOTDIR}/grub/ +install ${configdir}/boot/grub/grub.efi ${BOOTDIR}/grub/ +install ${configdir}/boot/grub/kernel.* ${BOOTDIR}/grub/ +install ${configdir}/boot/grub/splash.xpm.gz ${BOOTDIR}/grub/ +install ${configdir}/boot/grub/fonts/unicode.pf2 ${BOOTDIR}/grub/fonts/ +install ${configdir}/boot/grub/locale/zh_CN.mo ${BOOTDIR}/grub/locale/ + +%for kernel in kernels: + %if kernel.flavor: + ## i386 PAE + installkernel images-xen ${kernel.path} ${BOOTDIR}/vmlinuz-${kernel.flavor} + installinitrd images-xen ${kernel.initrd.path} ${BOOTDIR}/initrd-${kernel.flavor}.img + %else: + ## normal i386, x86_64 + installkernel images-${basearch} ${kernel.path} ${BOOTDIR}/vmlinuz + installinitrd images-${basearch} ${kernel.initrd.path} ${BOOTDIR}/initrd.img + %endif +%endfor + +replace @VERSION@ '${product.version}' ${BOOTDIR}/grub/grub.cfg +replace @PRODUCT@ '${product.name}' ${BOOTDIR}/grub/grub.cfg +replace @LABEL@ '${isolabel|udev}' ${BOOTDIR}/grub/grub.cfg + +install ${configdir}/efibootimg ${BOOTDIR}/../ + +mkdir EFI +mkdir EFI/BOOT +mkdir EFI/BOOT/fonts +mkdir EFI/BOOT/locale +install ${configdir}/EFI/BOOT/BOOT.cfg EFI/BOOT/ +install ${configdir}/EFI/BOOT/grub.cfg EFI/BOOT/ +install ${configdir}/EFI/BOOT/grub.efi EFI/BOOT/ +install ${configdir}/EFI/BOOT/kernel.* EFI/BOOT/ +install ${configdir}/EFI/BOOT/splash.xpm.gz EFI/BOOT/ +install ${configdir}/EFI/BOOT/fonts/unicode.pf2 EFI/BOOT/fonts/ +install ${configdir}/EFI/BOOT/locale/zh_CN.mo EFI/BOOT/locale/ + +## make boot.iso +mkdir images +runcmd xorrisofs ${isoargs} -o ${outroot}/images/boot.iso \ + -b ${ISOLINUXDIR}/isolinux.bin -c ${ISOLINUXDIR}/boot.cat \ + -boot-load-size 4 -boot-info-table -no-emul-boot \ + -R -J -V '${isolabel}' \ + ${outroot} +treeinfo images-${basearch} boot.iso images/boot.iso diff --git a/src/pylorax/__init__.py b/src/pylorax/__init__.py index 8700ff5..c37c0e0 100644 --- a/src/pylorax/__init__.py +++ b/src/pylorax/__init__.py @@ -61,7 +61,7 @@ else: DRACUT_DEFAULT = ["--xz", "--install", "/.buildstamp", "--no-early-microcode", "--add", "fips"] # Used for DNF conf.module_platform_id -DEFAULT_PLATFORM_ID = "platform:f32" +DEFAULT_PLATFORM_ID = "platform:sw64" class ArchData(DataHolder): lib64_arches = ("x86_64", "ppc64le", "s390x", "ia64", "aarch64") @@ -309,7 +309,7 @@ class Lorax(BaseLoraxClass): rb.writepkgsizes(joinpaths(logdir, "final-pkgsizes.txt")) logger.info("creating the runtime image") - runtime = "images/install.img" + runtime = "isoft/sw64/root-image.fs.sfs" compression = self.conf.get("compression", "type") compressargs = self.conf.get("compression", "args").split() # pylint: disable=no-member if self.conf.getboolean("compression", "bcj"): diff --git a/src/pylorax/creator.py b/src/pylorax/creator.py index 7075d32..79d35fd 100644 --- a/src/pylorax/creator.py +++ b/src/pylorax/creator.py @@ -51,7 +51,7 @@ from pylorax.sysutils import joinpaths, remove DRACUT_DEFAULT = ["--xz", "--add", "livenet dmsquash-live dmsquash-live-ntfs convertfs pollcdrom qemu qemu-net", "--omit", "plymouth", "--no-hostonly", "--debug", "--no-early-microcode"] -RUNTIME = "images/install.img" +RUNTIME = "isoft/sw64/root-image.fs.sfs" class FakeDNF(object): """ @@ -336,7 +336,7 @@ def make_livecd(opts, mount_dir, work_dir): :param opts: options passed to livemedia-creator :type opts: argparse options :param str mount_dir: Directory tree to compress - :param str work_dir: Output compressed image to work_dir+images/install.img + :param str work_dir: Output compressed image to work_dir+isoft/sw64/root-image.fs.sfs This uses wwood's squashfs live initramfs method: * put the real / into LiveOS/rootfs.img @@ -354,7 +354,7 @@ def make_livecd(opts, mount_dir, work_dir): # Link /images to work_dir/images to make the templates happy if os.path.islink(joinpaths(mount_dir, "images")): os.unlink(joinpaths(mount_dir, "images")) - rc = execWithRedirect("/bin/ln", ["-s", joinpaths(work_dir, "images"), + rc = execWithRedirect("/bin/ln", ["-s", joinpaths(work_dir, "isoft/sw64"), joinpaths(mount_dir, "images")]) if rc: raise RuntimeError("Failed to symlink images from mount_dir to work_dir") @@ -529,9 +529,8 @@ def make_live_images(opts, work_dir, disk_img): sys_root = "" squashfs_root_dir = joinpaths(work_dir, "squashfs_root") - liveos_dir = joinpaths(squashfs_root_dir, "LiveOS") - os.makedirs(liveos_dir) - rootfs_img = joinpaths(liveos_dir, "rootfs.img") + os.makedirs(squashfs_root_dir) + rootfs_img = joinpaths(squashfs_root_dir, "root-image.fs") if opts.fs_image or opts.no_virt: # Find the ostree root in the fsimage @@ -573,7 +572,7 @@ def make_live_images(opts, work_dir, disk_img): log.info("Packing live rootfs image") add_pxe_args = [] - live_image_name = "live-rootfs.squashfs.img" + live_image_name = "root-image.fs.sfs" compression, compressargs = squashfs_args(opts) rc = mksquashfs(squashfs_root_dir, joinpaths(work_dir, live_image_name), compression, compressargs) if rc != 0: diff --git a/src/pylorax/mount.py b/src/pylorax/mount.py index 19e399b..a50f5a9 100644 --- a/src/pylorax/mount.py +++ b/src/pylorax/mount.py @@ -67,7 +67,7 @@ class IsoMountpoint(object): else: self.repo = None self.stage2 = os.path.exists(self.mount_dir+"/LiveOS/squashfs.img") or \ - os.path.exists(self.mount_dir+"/images/install.img") + os.path.exists(self.mount_dir+"/isoft/sw64/root-image.fs.sfs") try: for kernel, initrd in kernel_list: diff --git a/src/pylorax/treebuilder.py b/src/pylorax/treebuilder.py index cbb8872..cead5b2 100644 --- a/src/pylorax/treebuilder.py +++ b/src/pylorax/treebuilder.py @@ -42,6 +42,7 @@ templatemap = { 'aarch64': 'aarch64.tmpl', 'arm': 'arm.tmpl', 'armhfp': 'arm.tmpl', + "sw_64": 'sw64.tmpl' } def generate_module_info(moddir, outfile=None): @@ -245,7 +246,7 @@ class RuntimeBuilder(object): # Catch problems with the rootfs being too small and clearly log them try: - imgutils.mkrootfsimg(self.vars.root, joinpaths(workdir, "LiveOS/rootfs.img"), + imgutils.mkrootfsimg(self.vars.root, joinpaths(workdir, "root-image.fs"), "Anaconda", size=size) except CalledProcessError as e: if e.stdout and "No space left on device" in e.stdout: @@ -253,7 +254,7 @@ class RuntimeBuilder(object): raise # squash the live rootfs and clean up workdir - rc = imgutils.mksquashfs(workdir, outfile, compression, compressargs) + rc = imgutils.mksquashfs(joinpaths(workdir, "root-image.fs"), outfile, compression, compressargs) remove(workdir) return rc -- 2.33.0