diff --git a/LICENSE b/LICENSE index 6b156fe..f288702 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ -GNU GENERAL PUBLIC LICENSE + GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -631,8 +631,8 @@ to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - {one line to give the program's name and a brief idea of what it does.} - Copyright (C) {year} {name of author} + + Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -645,14 +645,14 @@ the "copyright" line and a pointer to where the full notice is found. GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see . + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: - {project} Copyright (C) {year} {fullname} + Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. @@ -664,12 +664,11 @@ might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see -. +. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. - +. diff --git a/README.md b/README.md index f29d086..e81482d 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,6 @@ Clone:\ `sudo ./fix_permissions.sh` ## Build -`sudo ./build.sh -v` +`sudo ./mkarchiso /path/to/profile` ## The iso appears at out folder diff --git a/airootfs/etc/environment b/airootfs/etc/environment index e26c32e..39b5a92 100755 --- a/airootfs/etc/environment +++ b/airootfs/etc/environment @@ -4,5 +4,7 @@ # # Syntax: simple "KEY=VAL" pairs on separate lines # -# QT_QPA_PLATFORMTHEME=qt5ct +QT_QPA_PLATFORMTHEME=qt5ct +#QT_STYLE_OVERRIDE=kvantum BROWSER=cachy-browser +EDITOR=nano diff --git a/airootfs/etc/group b/airootfs/etc/group new file mode 100755 index 0000000..725b55e --- /dev/null +++ b/airootfs/etc/group @@ -0,0 +1,8 @@ +root:x:0:root +adm:x:4:liveuser +wheel:x:10:liveuser +uucp:x:14:liveuser +nopasswdlogin:x:966:liveuser +rfkill:x:983:liveuser +sys:x:3:bin,liveuser +liveuser:x:1000: diff --git a/airootfs/etc/gshadow b/airootfs/etc/gshadow new file mode 100755 index 0000000..29a1e7b --- /dev/null +++ b/airootfs/etc/gshadow @@ -0,0 +1,2 @@ +root:!*::root +liveuser:!*:: diff --git a/airootfs/etc/hostname b/airootfs/etc/hostname index a5f866b..73c3973 100755 --- a/airootfs/etc/hostname +++ b/airootfs/etc/hostname @@ -1,3 +1,3 @@ # # SPDX-License-Identifier: GPL-3.0-or-later -archiso +CachyOS diff --git a/airootfs/etc/mkinitcpio.conf b/airootfs/etc/mkinitcpio.conf index 31d49f4..a376034 100755 --- a/airootfs/etc/mkinitcpio.conf +++ b/airootfs/etc/mkinitcpio.conf @@ -55,7 +55,7 @@ FILES=() HOOKS=(base udev memdisk archiso_shutdown archiso archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs archiso_kms block filesystems keyboard) # COMPRESSION -# Use this to compress the initramfs image. By default, zstd compression +# Use this to compress the initramfs image. By default, gzip compression # is used. Use 'cat' to create an uncompressed image. COMPRESSION="zstd" #COMPRESSION="gzip" diff --git a/airootfs/etc/mkinitcpio.d/linux.preset b/airootfs/etc/mkinitcpio.d/linux.preset index a1949cd..d35f137 100755 --- a/airootfs/etc/mkinitcpio.d/linux.preset +++ b/airootfs/etc/mkinitcpio.d/linux.preset @@ -8,4 +8,4 @@ PRESETS=('archiso') ALL_kver='/boot/vmlinuz-linux' ALL_config='/etc/mkinitcpio.conf' -archiso_image="/boot/archiso.img" +archiso_image="/boot/initramfs-linux.img" diff --git a/airootfs/etc/motd b/airootfs/etc/motd index 2152ce0..344732f 100755 --- a/airootfs/etc/motd +++ b/airootfs/etc/motd @@ -1,18 +1,19 @@ This ISO is based on Arch-ISO modified hugely to provide Installation Environment for CachyOS. https://cachyos.org -Arch-ISO Source: -https://gitlab.archlinux.org/archlinux/archiso - CachyOS-archiso Sources: https://gitlab.com/cachyos/cachyos-archiso -Live environment will start now and let you install CachyOS to disk, or tryout XFCE4-Desktop from Live-Session. +Arch-ISO Source: +https://gitlab.archlinux.org/archlinux/archiso -Bugs can be reported here: -https://forum.endeavouros.com/c/Arch-based-related-questions/bug-reports +Calamares as our installer: +https://github.com/calamares/calamares + +Live environment will start now and let you install CachyOS to disk, or tryout Plasma-Desktop from Live-Session. Getting help at the forum: https://forum.cachyos.org -Welcome to your cachy! +Welcome to your cachy +--- diff --git a/airootfs/etc/pacman.conf b/airootfs/etc/pacman.conf index 59f2eee..c323579 100755 --- a/airootfs/etc/pacman.conf +++ b/airootfs/etc/pacman.conf @@ -16,7 +16,7 @@ #GPGDir = /etc/pacman.d/gnupg/ #HookDir = /etc/pacman.d/hooks/ HoldPkg = pacman glibc -#XferCommand = /usr/bin/curl -C - -f %u > %o +#XferCommand = /usr/bin/curl -L -C - -f -o %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #CleanMethod = KeepInstalled #UseDelta = 0.7 @@ -33,10 +33,11 @@ Architecture = auto #UseSyslog Color ILoveCandy -#TotalDownload -# We cannot check disk space from within a chroot environment +#NoProgressBar #CheckSpace -#VerbosePkgLists +VerbosePkgLists +DisableDownloadTimeout +ParallelDownloads = 10 # By default, pacman accepts packages signed by keys that its local keyring # trusts (see pacman-key and its man page), as well as unsigned packages. diff --git a/airootfs/etc/passwd b/airootfs/etc/passwd index 2807d5d..aebc492 100755 --- a/airootfs/etc/passwd +++ b/airootfs/etc/passwd @@ -1 +1 @@ -root:x:0:0:root:/root:/usr/bin/zsh +root:x:0:0:root:/root:/bin/bash diff --git a/airootfs/etc/skel/.bashrc b/airootfs/etc/skel/.bashrc index 3256bd4..6ff8a1b 100755 --- a/airootfs/etc/skel/.bashrc +++ b/airootfs/etc/skel/.bashrc @@ -164,6 +164,19 @@ _open_files_for_editing() { done } +_Pacdiff() { + local differ pacdiff=/usr/bin/pacdiff + + if [ -n "$(echo q | DIFFPROG=diff $pacdiff)" ] ; then + for differ in kdiff3 meld diffuse ; do + if [ -x /usr/bin/$differ ] ; then + DIFFPROG=$differ su-c_wrapper $pacdiff + break + fi + done + fi +} + #------------------------------------------------------------ ## Aliases for the functions above. @@ -171,8 +184,5 @@ _open_files_for_editing() { ## # alias ef='_open_files_for_editing' # 'ef' opens given file(s) for editing - -## Other potentially useful aliases. -# -# alias pacdiff=eos-pacdiff +# alias pacdiff=_Pacdiff ################################################################################ diff --git a/airootfs/etc/skel/.config/Kvantum/kvantum.kvconfig b/airootfs/etc/skel/.config/Kvantum/kvantum.kvconfig new file mode 100755 index 0000000..3159ec3 --- /dev/null +++ b/airootfs/etc/skel/.config/Kvantum/kvantum.kvconfig @@ -0,0 +1,2 @@ +[General] +theme=KvArc diff --git a/airootfs/etc/skel/.config/qt5ct/qt5ct.conf b/airootfs/etc/skel/.config/qt5ct/qt5ct.conf new file mode 100755 index 0000000..dfda865 --- /dev/null +++ b/airootfs/etc/skel/.config/qt5ct/qt5ct.conf @@ -0,0 +1,28 @@ +[Appearance] +color_scheme_path=/usr/share/qt5ct/colors/darker.conf +custom_palette=false +icon_theme=Arc-X-D +standard_dialogs=default +style=kvantum + +[Fonts] +fixed=@Variant(\0\0\0@\0\0\0\x1e\0S\0o\0u\0r\0\x63\0\x65\0 \0\x43\0o\0\x64\0\x65\0 \0P\0r\0o@$\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10) +general=@Variant(\0\0\0@\0\0\0\x12\0N\0o\0t\0o\0 \0S\0\x61\0n\0s@$\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10) + +[Interface] +activate_item_on_single_click=1 +buttonbox_layout=0 +cursor_flash_time=1000 +dialog_buttons_have_icons=1 +double_click_interval=400 +gui_effects=@Invalid() +keyboard_scheme=2 +menus_have_icons=true +show_shortcuts_in_context_menus=true +stylesheets=/usr/share/qt5ct/qss/scrollbar-simple.qss, /usr/share/qt5ct/qss/sliders-simple.qss, /usr/share/qt5ct/qss/tooltip-simple.qss, /usr/share/qt5ct/qss/traynotification-simple.qss +toolbutton_style=4 +underline_shortcut=1 +wheel_scroll_lines=3 + +[SettingsWindow] +geometry="@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x6\xc0\0\0\x3;\0\0\t\xa2\0\0\x6\xe\0\0\x6\xc2\0\0\x3W\0\0\t\xa0\0\0\x6\f\0\0\0\0\0\0\0\0\a\x80\0\0\x6\xc2\0\0\x3W\0\0\t\xa0\0\0\x6\f)" diff --git a/airootfs/etc/skel/.gnupg/gpg.conf b/airootfs/etc/skel/.gnupg/gpg.conf new file mode 100755 index 0000000..6c666d0 --- /dev/null +++ b/airootfs/etc/skel/.gnupg/gpg.conf @@ -0,0 +1,7 @@ +no-greeting +no-permission-warning +lock-never +keyserver-options timeout=10 +keyserver-options import-clean +keyserver-options no-self-sigs-only +keyserver hkp://keys.openpgp.org diff --git a/airootfs/etc/skel/.xprofile b/airootfs/etc/skel/.xprofile index e04c0a5..346bc80 100755 --- a/airootfs/etc/skel/.xprofile +++ b/airootfs/etc/skel/.xprofile @@ -1,2 +1 @@ -xcompmgr & xset s off -dpms & diff --git a/airootfs/etc/skel/xed.dconf b/airootfs/etc/skel/xed.dconf new file mode 100755 index 0000000..50ee2c6 --- /dev/null +++ b/airootfs/etc/skel/xed.dconf @@ -0,0 +1,6 @@ +[org/x/editor/preferences/editor] +bracket-matching=false +display-line-numbers=true +prefer-dark-theme=true +scheme='cobalt' +wrap-mode='none' diff --git a/airootfs/etc/systemd/network/20-ethernet.network b/airootfs/etc/systemd/network/20-ethernet.network deleted file mode 100755 index efa309c..0000000 --- a/airootfs/etc/systemd/network/20-ethernet.network +++ /dev/null @@ -1,13 +0,0 @@ -# -# SPDX-License-Identifier: GPL-3.0-or-later - -[Match] -Name=en* -Name=eth* - -[Network] -DHCP=yes -IPv6PrivacyExtensions=yes - -[DHCP] -RouteMetric=512 diff --git a/airootfs/etc/systemd/network/20-wireless.network b/airootfs/etc/systemd/network/20-wireless.network deleted file mode 100755 index bf9ab9d..0000000 --- a/airootfs/etc/systemd/network/20-wireless.network +++ /dev/null @@ -1,13 +0,0 @@ -# -# SPDX-License-Identifier: GPL-3.0-or-later - -[Match] -Name=wlp* -Name=wlan* - -[Network] -DHCP=yes -IPv6PrivacyExtensions=yes - -[DHCP] -RouteMetric=1024 diff --git a/airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service b/airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service deleted file mode 120000 index 4c158e6..0000000 --- a/airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/systemd/system/systemd-networkd.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service b/airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service deleted file mode 120000 index 4f6ae34..0000000 --- a/airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/systemd/system/systemd-resolved.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/iwd.service b/airootfs/etc/systemd/system/multi-user.target.wants/iwd.service deleted file mode 120000 index 3625abd..0000000 --- a/airootfs/etc/systemd/system/multi-user.target.wants/iwd.service +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/systemd/system/iwd.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/systemd-networkd.service b/airootfs/etc/systemd/system/multi-user.target.wants/systemd-networkd.service deleted file mode 120000 index 4c158e6..0000000 --- a/airootfs/etc/systemd/system/multi-user.target.wants/systemd-networkd.service +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/systemd/system/systemd-networkd.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service b/airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service deleted file mode 120000 index 4f6ae34..0000000 --- a/airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/systemd/system/systemd-resolved.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/sockets.target.wants/systemd-networkd.socket b/airootfs/etc/systemd/system/sockets.target.wants/systemd-networkd.socket deleted file mode 120000 index 51942c8..0000000 --- a/airootfs/etc/systemd/system/sockets.target.wants/systemd-networkd.socket +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/systemd/system/systemd-networkd.socket \ No newline at end of file diff --git a/airootfs/root/.zlogin b/airootfs/root/.zlogin index f598e43..0fb119d 100755 --- a/airootfs/root/.zlogin +++ b/airootfs/root/.zlogin @@ -1 +1,6 @@ +# fix for screen readers +if grep -Fq 'accessibility=' /proc/cmdline &> /dev/null; then + setopt SINGLE_LINE_ZLE +fi + ~/.automated_script.sh diff --git a/build.sh b/build.sh deleted file mode 100755 index c2a2b62..0000000 --- a/build.sh +++ /dev/null @@ -1,345 +0,0 @@ -#!/usr/bin/env bash -# -# SPDX-License-Identifier: GPL-3.0-or-later - -set -e -u - -iso_name=cachyos -iso_label="CACHYOS" -iso_publisher="CachyOS GNU/Linux " -iso_application="CachyOS GNU/Linux Live/Rescue CD" -iso_version=$(date +%Y.%m.%d) -install_dir=arch -work_dir=work -out_dir=out -gpg_key="" - -verbose="" -script_path="$( cd -P "$( dirname "$(readlink -f "$0")" )" && pwd )" -MKARCHISO=$script_path/mkarchiso - -umask 0022 - -_usage () -{ - echo "usage ${0} [options]" - echo - echo " General options:" - echo " -N Set an iso filename (prefix)" - echo " Default: ${iso_name}" - echo " -V Set an iso version (in filename)" - echo " Default: ${iso_version}" - echo " -L Set an iso label (disk label)" - echo " Default: ${iso_label}" - echo " -P Set a publisher for the disk" - echo " Default: '${iso_publisher}'" - echo " -A Set an application name for the disk" - echo " Default: '${iso_application}'" - echo " -D Set an install_dir (directory inside iso)" - echo " Default: ${install_dir}" - echo " -w Set the working directory" - echo " Default: ${work_dir}" - echo " -o Set the output directory" - echo " Default: ${out_dir}" - echo " -v Enable verbose output" - echo " -h This help message" - exit "${1}" -} - -# Helper function to run make_*() only one time per architecture. -run_once() { - if [[ ! -e "${work_dir}/build.${1}" ]]; then - "$1" - touch "${work_dir}/build.${1}" - fi -} - -bypass_umount_error(){ - -# Not used for now -umount -l $script_path/work/x86_64/airootfs/proc $script_path/work/x86_64/airootfs/dev || true - -} - -# Setup custom pacman.conf with current cache directories. -make_pacman_conf() { - local _cache_dirs - _cache_dirs=("$(pacman -v 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g')") - sed -r "s|^#?\\s*CacheDir.+|CacheDir = $(echo -n "${_cache_dirs[@]}")|g" \ - "${script_path}/pacman.conf" > "${work_dir}/pacman.conf" -} - -# Prepare working directory and copy custom airootfs files (airootfs) -make_custom_airootfs() { - local _airootfs="${work_dir}/x86_64/airootfs" - mkdir -p -- "${_airootfs}" - - if [[ -d "${script_path}/airootfs" ]]; then - cp -af --no-preserve=ownership -- "${script_path}/airootfs/." "${_airootfs}" - - [[ -e "${_airootfs}/etc/shadow" ]] && chmod -f 0400 -- "${_airootfs}/etc/shadow" - [[ -e "${_airootfs}/etc/gshadow" ]] && chmod -f 0400 -- "${_airootfs}/etc/gshadow" - - mkdir -p "${_airootfs}/usr/lib" - echo "VERSION=$iso_version" >> "${_airootfs}/usr/lib/cachtyos-release" - - # Set up user home directories and permissions - if [[ -e "${_airootfs}/etc/passwd" ]]; then - while IFS=':' read -a passwd -r; do - [[ "${passwd[5]}" == '/' ]] && continue - - if [[ -d "${_airootfs}${passwd[5]}" ]]; then - chown -hR -- "${passwd[2]}:${passwd[3]}" "${_airootfs}${passwd[5]}" - chmod -f 0750 -- "${_airootfs}${passwd[5]}" - else - install -d -m 0750 -o "${passwd[2]}" -g "${passwd[3]}" -- "${_airootfs}${passwd[5]}" - fi - done < "${_airootfs}/etc/passwd" - fi - fi -} - -# Packages (airootfs) -make_packages() { - if [[ "${gpg_key}" ]]; then - gpg --export "${gpg_key}" > "${work_dir}/gpgkey" - exec 17<>"${work_dir}/gpgkey" - fi - if [ -n "${verbose}" ]; then - ARCHISO_GNUPG_FD="${gpg_key:+17}" $MKARCHISO -v -w "${work_dir}/x86_64" -C "${work_dir}/pacman.conf" -D "${install_dir}" \ - -p "$(grep -h -v '^#' "${script_path}/packages.x86_64"| sed ':a;N;$!ba;s/\n/ /g')" install - else - ARCHISO_GNUPG_FD="${gpg_key:+17}" $MKARCHISO -w "${work_dir}/x86_64" -C "${work_dir}/pacman.conf" -D "${install_dir}" \ - -p "$(grep -h -v '^#' "${script_path}/packages.x86_64"| sed ':a;N;$!ba;s/\n/ /g')" install - fi - if [[ "${gpg_key}" ]]; then - exec 17<&- - fi -} - -# Copy mkinitcpio archiso hooks and build initramfs (airootfs) -make_setup_mkinitcpio() { - local _hook - mkdir -p ${work_dir}/x86_64/airootfs/etc/initcpio/hooks - mkdir -p ${work_dir}/x86_64/airootfs/etc/initcpio/install - for _hook in archiso archiso_shutdown archiso_loop_mnt; do - cp /usr/lib/initcpio/hooks/${_hook} ${work_dir}/x86_64/airootfs/etc/initcpio/hooks - cp /usr/lib/initcpio/install/${_hook} ${work_dir}/x86_64/airootfs/etc/initcpio/install - done - sed -i "s|/usr/lib/initcpio/|/etc/initcpio/|g" ${work_dir}/x86_64/airootfs/etc/initcpio/install/archiso_shutdown - cp /usr/lib/initcpio/install/archiso_kms ${work_dir}/x86_64/airootfs/etc/initcpio/install - cp /usr/lib/initcpio/archiso_shutdown ${work_dir}/x86_64/airootfs/etc/initcpio - cp ${script_path}/mkinitcpio.conf ${work_dir}/x86_64/airootfs/etc/mkinitcpio-archiso.conf -} - - -# Customize installation (airootfs) -make_customize_airootfs() { - if [[ -e "${script_path}/airootfs/etc/passwd" ]]; then - while IFS=':' read -a passwd -r; do - [[ "${passwd[5]}" == '/' ]] && continue - cp -RdT --preserve=mode,timestamps,links -- "${work_dir}/x86_64/airootfs/etc/skel" "${work_dir}/x86_64/airootfs${passwd[5]}" - chown -hR -- "${passwd[2]}:${passwd[3]}" "${work_dir}/x86_64/airootfs${passwd[5]}" - - done < "${script_path}/airootfs/etc/passwd" - fi - - if [[ -e "${work_dir}/x86_64/airootfs/root/customize_airootfs.sh" ]]; then - if [ -n "${verbose}" ]; then - $MKARCHISO -v -w "${work_dir}/x86_64" -C "${work_dir}/pacman.conf" -D "${install_dir}" \ - -r '/root/customize_airootfs.sh' run - else - $MKARCHISO -w "${work_dir}/x86_64" -C "${work_dir}/pacman.conf" -D "${install_dir}" \ - -r '/root/customize_airootfs.sh' run - fi - rm "${work_dir}/x86_64/airootfs/root/customize_airootfs.sh" - fi -} - -# Prepare kernel/initramfs ${install_dir}/boot/ -make_boot() { - mkdir -p "${work_dir}/iso/${install_dir}/boot/x86_64" - cp "${work_dir}/x86_64/airootfs/boot/archiso.img" "${work_dir}/iso/${install_dir}/boot/x86_64/" - cp "${work_dir}/x86_64/airootfs/boot/vmlinuz-linux" "${work_dir}/iso/${install_dir}/boot/x86_64/" -} - -# Add other aditional/extra files to ${install_dir}/boot/ -make_boot_extra() { - if [[ -e "${work_dir}/x86_64/airootfs/boot/memtest86+/memtest.bin" ]]; then - # rename for PXE: https://wiki.archlinux.org/index.php/Syslinux#Using_memtest - cp "${work_dir}/x86_64/airootfs/boot/memtest86+/memtest.bin" "${work_dir}/iso/${install_dir}/boot/memtest" - mkdir -p "${work_dir}/iso/${install_dir}/boot/licenses/memtest86+/" - cp "${work_dir}/x86_64/airootfs/usr/share/licenses/common/GPL2/license.txt" \ - "${work_dir}/iso/${install_dir}/boot/licenses/memtest86+/" - fi - if [[ -e "${work_dir}/x86_64/airootfs/boot/intel-ucode.img" ]]; then - cp "${work_dir}/x86_64/airootfs/boot/intel-ucode.img" "${work_dir}/iso/${install_dir}/boot/" - mkdir -p "${work_dir}/iso/${install_dir}/boot/licenses/intel-ucode/" - cp "${work_dir}/x86_64/airootfs/usr/share/licenses/intel-ucode/"* \ - "${work_dir}/iso/${install_dir}/boot/licenses/intel-ucode/" - fi - if [[ -e "${work_dir}/x86_64/airootfs/boot/amd-ucode.img" ]]; then - cp "${work_dir}/x86_64/airootfs/boot/amd-ucode.img" "${work_dir}/iso/${install_dir}/boot/" - mkdir -p "${work_dir}/iso/${install_dir}/boot/licenses/amd-ucode/" - cp "${work_dir}/x86_64/airootfs/usr/share/licenses/amd-ucode/"* \ - "${work_dir}/iso/${install_dir}/boot/licenses/amd-ucode/" - fi -} - -# Prepare /${install_dir}/boot/syslinux -make_syslinux() { - _uname_r=$(file -b "${work_dir}/x86_64/airootfs/boot/vmlinuz-linux"| awk 'f{print;f=0} /version/{f=1}' RS=' ') - mkdir -p "${work_dir}/iso/${install_dir}/boot/syslinux" - for _cfg in "${script_path}/syslinux/"*.cfg; do - sed "s|%ARCHISO_LABEL%|${iso_label}|g; - s|%INSTALL_DIR%|${install_dir}|g" "${_cfg}" > "${work_dir}/iso/${install_dir}/boot/syslinux/${_cfg##*/}" - done - cp "${script_path}/syslinux/splash.png" "${work_dir}/iso/${install_dir}/boot/syslinux/" - cp "${work_dir}/x86_64/airootfs/usr/lib/syslinux/bios/"*.c32 "${work_dir}/iso/${install_dir}/boot/syslinux/" - cp "${work_dir}/x86_64/airootfs/usr/lib/syslinux/bios/lpxelinux.0" "${work_dir}/iso/${install_dir}/boot/syslinux/" - cp "${work_dir}/x86_64/airootfs/usr/lib/syslinux/bios/memdisk" "${work_dir}/iso/${install_dir}/boot/syslinux/" - mkdir -p "${work_dir}/iso/${install_dir}/boot/syslinux/hdt" - gzip -c -9 "${work_dir}/x86_64/airootfs/usr/share/hwdata/pci.ids" > \ - "${work_dir}/iso/${install_dir}/boot/syslinux/hdt/pciids.gz" - gzip -c -9 "${work_dir}/x86_64/airootfs/usr/lib/modules/${_uname_r}/modules.alias" > \ - "${work_dir}/iso/${install_dir}/boot/syslinux/hdt/modalias.gz" -} - -# Prepare /isolinux -make_isolinux() { - mkdir -p "${work_dir}/iso/isolinux" - sed "s|%INSTALL_DIR%|${install_dir}|g" \ - "${script_path}/isolinux/isolinux.cfg" > "${work_dir}/iso/isolinux/isolinux.cfg" - cp "${work_dir}/x86_64/airootfs/usr/lib/syslinux/bios/isolinux.bin" "${work_dir}/iso/isolinux/" - cp "${work_dir}/x86_64/airootfs/usr/lib/syslinux/bios/isohdpfx.bin" "${work_dir}/iso/isolinux/" - cp "${work_dir}/x86_64/airootfs/usr/lib/syslinux/bios/ldlinux.c32" "${work_dir}/iso/isolinux/" -} - -# Prepare /EFI -make_efi() { - mkdir -p "${work_dir}/iso/EFI/boot" - cp "${work_dir}/x86_64/airootfs/usr/lib/systemd/boot/efi/systemd-bootx64.efi" \ - "${work_dir}/iso/EFI/boot/bootx64.efi" - - mkdir -p "${work_dir}/iso/loader/entries" - cp "${script_path}/efiboot/loader/loader.conf" "${work_dir}/iso/loader/" - - sed "s|%ARCHISO_LABEL%|${iso_label}|g; - s|%INSTALL_DIR%|${install_dir}|g" \ - "${script_path}/efiboot/loader/entries/archiso-x86_64-usb.conf" > \ - "${work_dir}/iso/loader/entries/archiso-x86_64.conf" - - sed "s|%ARCHISO_LABEL%|${iso_label}|g; - s|%INSTALL_DIR%|${install_dir}|g" \ - "${script_path}/efiboot/loader/entries/archiso-x86_64-usb-nonfree.conf" > \ - "${work_dir}/iso/loader/entries/archiso-x86_64-nonfree.conf" - - - # edk2-shell based UEFI shell - # shellx64.efi is picked up automatically when on / - cp "${work_dir}/x86_64/airootfs/usr/share/edk2-shell/x64/Shell_Full.efi" "${work_dir}/iso/shellx64.efi" -} - -# Prepare efiboot.img::/EFI for "El Torito" EFI boot mode -make_efiboot() { - mkdir -p "${work_dir}/iso/EFI/archiso" - truncate -s 100M "${work_dir}/iso/EFI/archiso/efiboot.img" - mkfs.fat -n ARCHISO_EFI "${work_dir}/iso/EFI/archiso/efiboot.img" - - mkdir -p "${work_dir}/efiboot" - mount "${work_dir}/iso/EFI/archiso/efiboot.img" "${work_dir}/efiboot" - - mkdir -p "${work_dir}/efiboot/EFI/archiso" - cp "${work_dir}/iso/${install_dir}/boot/x86_64/vmlinuz-linux" "${work_dir}/efiboot/EFI/archiso/" - cp "${work_dir}/iso/${install_dir}/boot/x86_64/archiso.img" "${work_dir}/efiboot/EFI/archiso/" - - cp "${work_dir}/iso/${install_dir}/boot/intel-ucode.img" "${work_dir}/efiboot/EFI/archiso/" - cp "${work_dir}/iso/${install_dir}/boot/amd-ucode.img" "${work_dir}/efiboot/EFI/archiso/" - - mkdir -p "${work_dir}/efiboot/EFI/boot" - cp "${work_dir}/x86_64/airootfs/usr/lib/systemd/boot/efi/systemd-bootx64.efi" \ - "${work_dir}/efiboot/EFI/boot/bootx64.efi" - - mkdir -p "${work_dir}/efiboot/loader/entries" - cp "${script_path}/efiboot/loader/loader.conf" "${work_dir}/efiboot/loader/" - - sed "s|%ARCHISO_LABEL%|${iso_label}|g; - s|%INSTALL_DIR%|${install_dir}|g" \ - "${script_path}/efiboot/loader/entries/archiso-x86_64-cd.conf" > \ - "${work_dir}/efiboot/loader/entries/archiso-x86_64.conf" - - sed "s|%ARCHISO_LABEL%|${iso_label}|g; - s|%INSTALL_DIR%|${install_dir}|g" \ - "${script_path}/efiboot/loader/entries/archiso-x86_64-cd-nonfree.conf" > \ - "${work_dir}/efiboot/loader/entries/archiso-x86_64-nonfree.conf" - - # shellx64.efi is picked up automatically when on / - cp "${work_dir}/iso/shellx64.efi" "${work_dir}/efiboot/" - - umount -d "${work_dir}/efiboot" -} - -# Build airootfs filesystem image -make_prepare() { - cp -a -l -f "${work_dir}/x86_64/airootfs" "${work_dir}" - if [ -n "${verbose}" ]; then - $MKARCHISO -v -w "${work_dir}" -D "${install_dir}" pkglist - $MKARCHISO -v -w "${work_dir}" -D "${install_dir}" ${gpg_key:+-g ${gpg_key}} prepare - else - $MKARCHISO -w "${work_dir}" -D "${install_dir}" pkglist - $MKARCHISO -w "${work_dir}" -D "${install_dir}" ${gpg_key:+-g ${gpg_key}} prepare - fi - rm -rf "${work_dir}/airootfs" - # rm -rf "${work_dir}/x86_64/airootfs" (if low space, this helps) -} - -# Build ISO -make_iso() { - if [ -n "${verbose}" ]; then - $MKARCHISO -v -w "${work_dir}" -D "${install_dir}" -L "${iso_label}" -P "${iso_publisher}" \ - -A "${iso_application}" -o "${out_dir}" iso "${iso_name}-${iso_version}-x86_64.iso" - else - $MKARCHISO -w "${work_dir}" -D "${install_dir}" -L "${iso_label}" -P "${iso_publisher}" \ - -A "${iso_application}" -o "${out_dir}" iso "${iso_name}-${iso_version}-x86_64.iso" - fi -} - -if [[ ${EUID} -ne 0 ]]; then - echo "This script must be run as root." - _usage 1 -fi - -while getopts 'N:V:L:P:A:D:w:o:g:vh' arg; do - case "${arg}" in - N) iso_name="${OPTARG}" ;; - V) iso_version="${OPTARG}" ;; - L) iso_label="${OPTARG}" ;; - P) iso_publisher="${OPTARG}" ;; - A) iso_application="${OPTARG}" ;; - D) install_dir="${OPTARG}" ;; - w) work_dir="${OPTARG}" ;; - o) out_dir="${OPTARG}" ;; - g) gpg_key="${OPTARG}" ;; - v) verbose="-v" ;; - h) _usage 0 ;; - *) - echo "Invalid argument '${arg}'" - _usage 1 - ;; - esac -done - -mkdir -p "${work_dir}" - -run_once make_pacman_conf -run_once make_custom_airootfs -run_once make_packages -run_once make_customize_airootfs -run_once make_boot -run_once make_boot_extra -run_once make_syslinux -run_once make_isolinux -run_once make_efi -run_once make_efiboot -run_once make_prepare -run_once make_iso diff --git a/ci.build.sh b/ci.build.sh index b26d6e7..c83c76e 100755 --- a/ci.build.sh +++ b/ci.build.sh @@ -3,4 +3,4 @@ pacman --noconfirm -Syu --needed base-devel archiso mkinitcpio-archiso git squashfs-tools sudo ./fix_permissions.sh -sudo ./build.sh -v +sudo ./mkarchiso . diff --git a/efiboot/loader/entries/archiso-x86_64-cd-nonfree.conf b/efiboot/loader/entries/archiso-x86_64-cd-nonfree.conf deleted file mode 100644 index 863c6d7..0000000 --- a/efiboot/loader/entries/archiso-x86_64-cd-nonfree.conf +++ /dev/null @@ -1,9 +0,0 @@ -# -# SPDX-License-Identifier: GPL-3.0-or-later - -title CachyOS x86_64 UEFI NVIDIA (nonfree, latest cards only, no legacy) (CD) -linux /EFI/archiso/vmlinuz-linux -initrd /EFI/archiso/intel-ucode.img -initrd /EFI/archiso/amd-ucode.img -initrd /EFI/archiso/archiso.img -options archisobasedir=%INSTALL_DIR% cow_spacesize=10G archisolabel=%ARCHISO_LABEL% nvidia nouveau.modeset=0 nouveau.blacklist=yes modprobe.blacklist=nouveau i915.modeset=1 radeon.modeset=1 diff --git a/efiboot/loader/entries/archiso-x86_64-cd.conf b/efiboot/loader/entries/archiso-x86_64-cd.conf deleted file mode 100644 index bc04baf..0000000 --- a/efiboot/loader/entries/archiso-x86_64-cd.conf +++ /dev/null @@ -1,9 +0,0 @@ -# -# SPDX-License-Identifier: GPL-3.0-or-later - -title CachyOS x86_64 UEFI Default (CD) -linux /EFI/archiso/vmlinuz-linux -initrd /EFI/archiso/intel-ucode.img -initrd /EFI/archiso/amd-ucode.img -initrd /EFI/archiso/archiso.img -options archisobasedir=%INSTALL_DIR% cow_spacesize=10G archisolabel=%ARCHISO_LABEL% i915.modeset=1 radeon.modeset=1 nvidia.blacklist=yes modprobe.blacklist=nvidia nouveau.modeset=1 nouveau diff --git a/efiboot/loader/entries/archiso-x86_64-usb-nonfree.conf b/efiboot/loader/entries/archiso-x86_64-linux-nonfree.conf similarity index 73% rename from efiboot/loader/entries/archiso-x86_64-usb-nonfree.conf rename to efiboot/loader/entries/archiso-x86_64-linux-nonfree.conf index d8cbcb6..85c6099 100644 --- a/efiboot/loader/entries/archiso-x86_64-usb-nonfree.conf +++ b/efiboot/loader/entries/archiso-x86_64-linux-nonfree.conf @@ -1,9 +1,9 @@ # # SPDX-License-Identifier: GPL-3.0-or-later -title CachyOS x86_64 UEFI Nvidia (nonfree, latest cards only, no legacy) (USB) +title CachyOS x86_64 UEFI NVIDIA (nonfree, latest cards only, no legacy) (CD) linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux initrd /%INSTALL_DIR%/boot/intel-ucode.img initrd /%INSTALL_DIR%/boot/amd-ucode.img -initrd /%INSTALL_DIR%/boot/x86_64/archiso.img +initrd /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img options archisobasedir=%INSTALL_DIR% cow_spacesize=10G archisolabel=%ARCHISO_LABEL% nvidia nouveau.modeset=0 nouveau.blacklist=yes modprobe.blacklist=nouveau i915.modeset=1 radeon.modeset=1 diff --git a/efiboot/loader/entries/archiso-x86_64-usb.conf b/efiboot/loader/entries/archiso-x86_64-linux.conf similarity index 80% rename from efiboot/loader/entries/archiso-x86_64-usb.conf rename to efiboot/loader/entries/archiso-x86_64-linux.conf index 3ce28fd..e54e437 100644 --- a/efiboot/loader/entries/archiso-x86_64-usb.conf +++ b/efiboot/loader/entries/archiso-x86_64-linux.conf @@ -1,9 +1,9 @@ # # SPDX-License-Identifier: GPL-3.0-or-later -title CachyOS x86_64 UEFI Default (USB) +title CachyOS x86_64 UEFI Default linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux initrd /%INSTALL_DIR%/boot/intel-ucode.img initrd /%INSTALL_DIR%/boot/amd-ucode.img -initrd /%INSTALL_DIR%/boot/x86_64/archiso.img +initrd /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img options archisobasedir=%INSTALL_DIR% cow_spacesize=10G archisolabel=%ARCHISO_LABEL% i915.modeset=1 radeon.modeset=1 nvidia.blacklist=yes modprobe.blacklist=nvidia nouveau.modeset=1 nouveau diff --git a/efiboot/loader/loader.conf b/efiboot/loader/loader.conf index fd7db27..1ea5ce5 100644 --- a/efiboot/loader/loader.conf +++ b/efiboot/loader/loader.conf @@ -2,4 +2,4 @@ # SPDX-License-Identifier: GPL-3.0-or-later timeout 3 -default archiso-x86_64.conf +default archiso-x86_64-linux.conf diff --git a/fix_permissions.sh b/fix_permissions.sh index efa3829..8684135 100755 --- a/fix_permissions.sh +++ b/fix_permissions.sh @@ -2,15 +2,10 @@ # For all folders find ./airootfs -type d -exec chmod -R 755 {} \; -#find ./airootfs -type d -exec chown root:root {} \; chown root:root -R ./airootfs -#chown root:root $(find ./airootfs |grep -v "/etc/skel") - chmod 700 ./airootfs/root chmod -R 700 airootfs/etc/sudoers.d chmod 444 ./airootfs/etc/sudoers.d/g_wheel -#chown root:root ./airootfs/etc/sudoers.d -#chown root:root ./airootfs/etc/sudoers.d/g_wheel -chmod +x ./{build.sh,mkarchiso,run_before_squashfs.sh} +chmod +x ./{mkarchiso,run_before_squashfs.sh} diff --git a/isolinux/isolinux.cfg b/isolinux/isolinux.cfg deleted file mode 100644 index 7b14d59..0000000 --- a/isolinux/isolinux.cfg +++ /dev/null @@ -1,9 +0,0 @@ -# -# SPDX-License-Identifier: GPL-3.0-or-later - -PATH /%INSTALL_DIR%/boot/syslinux/ -DEFAULT loadconfig - -LABEL loadconfig - CONFIG /%INSTALL_DIR%/boot/syslinux/archiso.cfg - APPEND /%INSTALL_DIR%/ diff --git a/mirrorlist b/mirrorlist new file mode 100755 index 0000000..93cd03d --- /dev/null +++ b/mirrorlist @@ -0,0 +1,76 @@ +########################################## +### This mirrorlist is only a fallback ### +########################################## +### Note that the mirrors were not ranked, so you may get better mirrorlist +### by ranking with e.g. program 'reflector-simple'. + +## Germany & United States + +Server = http://mirror.f4st.host/archlinux/$repo/os/$arch +Server = https://mirror.f4st.host/archlinux/$repo/os/$arch + +Server = http://arch.mirror.constant.com/$repo/os/$arch +Server = https://arch.mirror.constant.com/$repo/os/$arch + +Server = https://mirror.pseudoform.org/$repo/os/$arch + +Server = http://mirror.lty.me/archlinux/$repo/os/$arch +Server = https://mirror.lty.me/archlinux/$repo/os/$arch + +Server = https://mirror.pkgbuild.com/$repo/os/$arch + +Server = http://iad.mirrors.misaka.one/archlinux/$repo/os/$arch +Server = https://iad.mirrors.misaka.one/archlinux/$repo/os/$arch + +Server = http://archlinux.thaller.ws/$repo/os/$arch +Server = https://archlinux.thaller.ws/$repo/os/$arch + +Server = https://america.mirror.pkgbuild.com/$repo/os/$arch + +Server = http://mirror.wtnet.de/arch/$repo/os/$arch +Server = https://mirror.wtnet.de/arch/$repo/os/$arch + +Server = http://arlm.tyzoid.com/$repo/os/$arch +Server = https://arlm.tyzoid.com/$repo/os/$arch + +Server = http://phinau.de/arch/$repo/os/$arch +Server = https://phinau.de/arch/$repo/os/$arch + +Server = http://arch.hu.fo/archlinux/$repo/os/$arch +Server = https://arch.hu.fo/archlinux/$repo/os/$arch + +Server = http://mirror.chaoticum.net/arch/$repo/os/$arch +Server = https://mirror.chaoticum.net/arch/$repo/os/$arch + +Server = http://archmirror1.octyl.net/$repo/os/$arch +Server = https://archmirror1.octyl.net/$repo/os/$arch + +Server = http://arch.jensgutermuth.de/$repo/os/$arch +Server = https://arch.jensgutermuth.de/$repo/os/$arch + +Server = http://mirror.hackingand.coffee/arch/$repo/os/$arch +Server = https://mirror.hackingand.coffee/arch/$repo/os/$arch + +Server = http://arch.mirror.zachlge.org/$repo/os/$arch +Server = https://arch.mirror.zachlge.org/$repo/os/$arch + +Server = http://mirror.arizona.edu/archlinux/$repo/os/$arch +Server = https://mirror.arizona.edu/archlinux/$repo/os/$arch + +Server = http://mirror.mikrogravitation.org/archlinux/$repo/os/$arch +Server = https://mirror.mikrogravitation.org/archlinux/$repo/os/$arch + +Server = http://mirrors.lug.mtu.edu/archlinux/$repo/os/$arch +Server = https://mirrors.lug.mtu.edu/archlinux/$repo/os/$arch + +Server = http://ftp.halifax.rwth-aachen.de/archlinux/$repo/os/$arch +Server = https://ftp.halifax.rwth-aachen.de/archlinux/$repo/os/$arch +Server = https://mirror.bethselamin.de/$repo/os/$arch +Server = http://mirror.23m.com/archlinux/$repo/os/$arch +Server = https://mirror.23m.com/archlinux/$repo/os/$arch +Server = http://mirror.moson.org/arch/$repo/os/$arch +Server = https://mirror.moson.org/arch/$repo/os/$arch +Server = http://mirror.ubrco.de/archlinux/$repo/os/$arch +Server = https://mirror.ubrco.de/archlinux/$repo/os/$arch +Server = http://mirrors.niyawe.de/archlinux/$repo/os/$arch +Server = https://mirrors.niyawe.de/archlinux/$repo/os/$arch diff --git a/mkarchiso b/mkarchiso index 13b9937..fce55cc 100755 --- a/mkarchiso +++ b/mkarchiso @@ -1,36 +1,55 @@ -#!/bin/bash +#!/usr/bin/env bash # # SPDX-License-Identifier: GPL-3.0-or-later set -e -u -export LANG=C +# Control the environment +umask 0022 +export LANG="C" +export SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-"$(date +%s)"}" -app_name=${0##*/} -arch=$(uname -m) +# Set application name from the script's file name +app_name="${0##*/}" + +# Define global variables. All of them will be overwritten later pkg_list=() -run_cmd="" -quiet="y" -pacman_conf="/etc/pacman.conf" -iso_label="ARCH_$(date +%Y%m)" -iso_publisher="Arch Linux " -iso_application="Arch Linux Live/Rescue CD" -install_dir="arch" -work_dir="work" -out_dir="out" -sfs_mode="sfs" -sfs_comp="xz" -gpg_key= +quiet="" +work_dir="" +out_dir="" +img_name="" +gpg_key="" +iso_name="" +iso_label="" +iso_publisher="" +iso_application="" +iso_version="" +install_dir="" +arch="" +pacman_conf="" +packages="" +bootmodes=() +airootfs_image_type="" +airootfs_image_tool_options=() +declare -A file_permissions=() script_path="$( cd -P "$( dirname "$(readlink -f "$0")" )" && pwd )" # executed inside _mkairootfs_sfs right before squashfs -RUN_BEFORE_SQUASHFS=${script_path}/run_before_squashfs.sh +RUN_BEFORE_SQUASHFS=$script_path/run_before_squashfs.sh + # Show an INFO message # $1: message string _msg_info() { local _msg="${1}" - echo "[mkarchiso] INFO: ${_msg}" + [[ "${quiet}" == "y" ]] || printf '[%s] INFO: %s\n' "${app_name}" "${_msg}" +} + +# Show a WARNING message +# $1: message string +_msg_warning() { + local _msg="${1}" + printf '[%s] WARNING: %s\n' "${app_name}" "${_msg}" >&2 } # Show an ERROR message then exit with status @@ -39,137 +58,84 @@ _msg_info() { _msg_error() { local _msg="${1}" local _error=${2} - echo - echo "[mkarchiso] ERROR: ${_msg}" - echo - if [[ ${_error} -gt 0 ]]; then + printf '[%s] ERROR: %s\n' "${app_name}" "${_msg}" >&2 + if (( _error > 0 )); then exit "${_error}" fi } -_chroot_init() { - mkdir -p ${work_dir}/airootfs - _pacman base syslinux -} - -_chroot_run() { - eval arch-chroot ${work_dir}/airootfs "${run_cmd}" -} - _mount_airootfs() { trap "_umount_airootfs" EXIT HUP INT TERM - mkdir -p "${work_dir}/mnt/airootfs" - _msg_info "Mounting '${work_dir}/airootfs.img' on '${work_dir}/mnt/airootfs'" - mount "${work_dir}/airootfs.img" "${work_dir}/mnt/airootfs" + install -d -m 0755 -- "${work_dir}/mnt/airootfs" + _msg_info "Mounting '${airootfs_dir}.img' on '${work_dir}/mnt/airootfs'..." + mount -- "${airootfs_dir}.img" "${work_dir}/mnt/airootfs" _msg_info "Done!" } _umount_airootfs() { - _msg_info "Unmounting '${work_dir}/mnt/airootfs'" - umount -d "${work_dir}/mnt/airootfs" + _msg_info "Unmounting '${work_dir}/mnt/airootfs'..." + umount -d -- "${work_dir}/mnt/airootfs" _msg_info "Done!" - rmdir "${work_dir}/mnt/airootfs" + rmdir -- "${work_dir}/mnt/airootfs" trap - EXIT HUP INT TERM } # Show help usage, with an exit status. # $1: exit status number. -_usage () -{ - echo "usage ${app_name} [options] command " - echo " general options:" - echo " -p PACKAGE(S) Package(s) to install, can be used multiple times" - echo " -r Run inside airootfs" - echo " -C Config file for pacman." - echo " Default: '${pacman_conf}'" - echo " -L