forked from artix/artools
		
	Compare commits
	
		
			13 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 7bf4dff1a1 | |||
| 529e73e2ab | |||
| 7be420a24f | |||
| cd76f7d3cf | |||
| 918b95db58 | |||
| 77c464d603 | |||
| 55945b8975 | |||
| f83cc2a4a8 | |||
| 6d5dbc5774 | |||
| 36ee26e18c | |||
| 0b9e18ed5b | |||
| b26b6da61c | |||
| e1f762cd91 | 
							
								
								
									
										9
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								Makefile
									
									
									
									
									
								
							| @@ -27,7 +27,7 @@ BASE_LIBS = \ | ||||
| BASE_UTIL = lib/util-base.sh | ||||
|  | ||||
| BASE_DATA = \ | ||||
| 	$(wildcard data/base/pacman*.conf) | ||||
| 	$(wildcard data/pacman/pacman*.conf) | ||||
|  | ||||
| PKG_CONF = \ | ||||
| 	data/conf/artools-pkg.conf | ||||
| @@ -95,7 +95,7 @@ PKG_LIBS = \ | ||||
| PKG_UTIL = lib/util-pkg.sh | ||||
|  | ||||
| PKG_DATA = \ | ||||
| 	data/pkg/makepkg.conf | ||||
| 	data/pacman/makepkg.conf | ||||
|  | ||||
| PATCHES = \ | ||||
| 	$(wildcard data/patches/*.patch) | ||||
| @@ -116,8 +116,6 @@ ISO_LIBS = \ | ||||
|  | ||||
| ISO_UTIL = lib/util-iso.sh | ||||
|  | ||||
| ISO_DATA = \ | ||||
| 	data/iso/mkinitcpio.conf | ||||
|  | ||||
| DIRMODE = -dm0755 | ||||
| FILEMODE = -m0644 | ||||
| @@ -211,9 +209,6 @@ install_iso: install_cpio | ||||
| 	install $(FILEMODE) $(ISO_UTIL) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(ISO_LIBS) $(DESTDIR)$(LIBDIR)/$(TOOLS)/iso | ||||
|  | ||||
| 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(ISO_DATA) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||
|  | ||||
| install: install_base install_pkg install_iso | ||||
|  | ||||
| .PHONY: all clean install install_base install_pkg install_iso | ||||
|   | ||||
| @@ -23,6 +23,8 @@ umask 0022 | ||||
| working_dir='' | ||||
| files=() | ||||
|  | ||||
| mount_args=() | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options] working-dir [run arguments]" | ||||
|     echo "A wrapper around chroot. Provides support for pacman." | ||||
| @@ -33,16 +35,15 @@ usage() { | ||||
|     echo '    -c <dir>      Set pacman cache' | ||||
|     echo '    -f <file>     Copy file from the host to the chroot' | ||||
|     echo '    -s            Do not run setarch' | ||||
|     echo '    -r <list>     Bind mountargs ro' | ||||
|     echo '    -w <list>     Bind mountargs rw' | ||||
|     echo '                  List format [src1:target1 ... srcN:targetN]' | ||||
|     echo '    -b <list>     Bind mountargs' | ||||
|     echo '                  List format [mntarg1:src1:dest1 ... mntargN:srcN:destN]' | ||||
|     echo '    -h            This message' | ||||
|     exit 1 | ||||
| } | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='hC:M:c:r:w:f:s' | ||||
| opts='hC:M:c:b:f:s' | ||||
|  | ||||
| while getopts ${opts} arg; do | ||||
|     case "${arg}" in | ||||
| @@ -51,8 +52,7 @@ while getopts ${opts} arg; do | ||||
|         c) cache_dirs+=("$OPTARG") ;; | ||||
|         f) files+=("$OPTARG") ;; | ||||
|         s) nosetarch=1 ;; | ||||
|         r) bindmounts_ro=("$OPTARG") ;; | ||||
|         w) bindmounts_rw=("$OPTARG") ;; | ||||
|         b) bindmounts=("$OPTARG"); mount_args+=(${bindmounts[@]}) ;; | ||||
|         h|?) usage ;; | ||||
|         *) error "invalid argument '$arg'"; usage ;; | ||||
|     esac | ||||
| @@ -76,6 +76,14 @@ fi | ||||
|  | ||||
| host_mirrors=($($pacconf_cmd --repo world Server 2> /dev/null | sed -r 's#(.*/)world/os/.*#\1$repo/os/$arch#')) | ||||
|  | ||||
| for host_mirror in "${host_mirrors[@]}"; do | ||||
|     if [[ $host_mirror == *file://* ]]; then | ||||
|         host_mirror=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g') | ||||
|         info "host mirror: %s" "$host_mirror" | ||||
|         in_array "$host_mirror" "${cache_dirs[@]}" || cache_dirs+=("$host_mirror") | ||||
|     fi | ||||
| done | ||||
|  | ||||
| while read -r line; do | ||||
|     mapfile -t lines < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" \ | ||||
|         --repo $line Server | sed -r 's#(.*/)[^/]+/os/.+#\1$repo/os/$arch#') | ||||
| @@ -95,9 +103,9 @@ copy_hostconf () { | ||||
|  | ||||
|     printf 'Server = %s\n' "${host_mirrors[@]}" >"$working_dir/etc/pacman.d/mirrorlist" | ||||
|  | ||||
|     [[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf" | ||||
|     [[ -n $pacman_conf ]] && cp $pacman_conf "${working_dir}/etc/pacman.conf" | ||||
|  | ||||
|     [[ -n $makepkg_conf ]] && cp $makepkg_conf "$1/etc/makepkg.conf" | ||||
|     [[ -n $makepkg_conf ]] && cp $makepkg_conf "${working_dir}/etc/makepkg.conf" | ||||
|  | ||||
|     local file | ||||
|     for file in "${files[@]}"; do | ||||
| @@ -105,37 +113,30 @@ copy_hostconf () { | ||||
|         cp -T "$file" "$working_dir$file" | ||||
|     done | ||||
|  | ||||
|     sed -r "s|^#?\\s*CacheDir.+|CacheDir = ${cache_dirs[*]}|g" -i "$1/etc/pacman.conf" | ||||
|     sed -r "s|^#?\\s*CacheDir.+|CacheDir = ${cache_dirs[*]}|g" -i "${working_dir}/etc/pacman.conf" | ||||
| } | ||||
|  | ||||
| mount_args+=("-B:${cache_dirs[0]//:/\\:}:${cache_dirs[0]//:/\\:}" "-B:/etc/hosts:/etc/hosts") | ||||
|  | ||||
| for cache_dir in "${cache_dirs[@]:1}"; do | ||||
|     mount_args+=("-Br:${cache_dir//:/\\:}:${cache_dir//:/\\:}") | ||||
| done | ||||
|  | ||||
| chroot_extra_mount() { | ||||
|     chroot_add_resolv_conf "$1" | ||||
|     chroot_mount "/etc/hosts" "$1/etc/hosts" -B | ||||
|     chroot_mount "${cache_dirs[0]}" "$1${cache_dirs[0]}" -B | ||||
|     chroot_add_resolv_conf "${working_dir}" | ||||
|  | ||||
|     for cache_dir in ${cache_dirs[@]:1}; do | ||||
|         chroot_mount "$cache_dir" "$1${cache_dir}" -Br | ||||
|     done | ||||
|  | ||||
|     for m in ${bindmounts_ro[@]}; do | ||||
|         chroot_mount "${m%%:*}" "$1${m##*:}" -Br | ||||
|     done | ||||
|  | ||||
|     for m in ${bindmounts_rw[@]}; do | ||||
|         chroot_mount "${m%%:*}" "$1${m##*:}" -B | ||||
|     done | ||||
|  | ||||
|     for host_mirror in "${host_mirrors[@]}"; do | ||||
|         if [[ $host_mirror == *file://* ]]; then | ||||
|             host_mirror_path=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g') | ||||
|             chroot_mount "$host_mirror_path" "$1$host_mirror_path" -Br | ||||
|         fi | ||||
|     for arg in ${mount_args[@]}; do | ||||
|         local flag=${arg%%:*} | ||||
|         local dest=${arg##*:} | ||||
|         local src=${arg%:*} | ||||
|         src=${src#*:} | ||||
|         chroot_mount "${src}" "${working_dir}${dest}" "${flag}" | ||||
|     done | ||||
| } | ||||
|  | ||||
| sync_host_localtime(){ | ||||
|     if [[ -e /etc/localtime ]]; then | ||||
|         cp -L /etc/localtime "$1"/etc/localtime | ||||
|         cp -L /etc/localtime "${working_dir}"/etc/localtime | ||||
|     fi | ||||
| } | ||||
|  | ||||
| @@ -148,13 +149,13 @@ elif [[ $(cat "$working_dir/.artools") != ${CHROOTVERSION} ]]; then | ||||
|     die "chroot '%s' is not at version %s. Please rebuild." "$working_dir" "${CHROOTVERSION}" | ||||
| fi | ||||
|  | ||||
| sync_host_localtime "${working_dir}" | ||||
| sync_host_localtime | ||||
|  | ||||
| chroot_api_mount "${working_dir}" || die "failed to setup API filesystems in chroot %s" "${working_dir}" | ||||
|  | ||||
| chroot_extra_mount "${working_dir}" | ||||
| chroot_extra_mount | ||||
|  | ||||
| copy_hostconf "${working_dir}" | ||||
| copy_hostconf | ||||
|  | ||||
| eval $(grep '^CARCH=' "$working_dir/etc/makepkg.conf") | ||||
|  | ||||
|   | ||||
| @@ -14,10 +14,7 @@ | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
| load_makepkg_config | ||||
|  | ||||
| file_to_sign="$1" | ||||
|  | ||||
|   | ||||
| @@ -48,12 +48,15 @@ prepare_build(){ | ||||
|     iso_label="ARTIX_$(date +%Y%m)" | ||||
|  | ||||
|     basestrap_args+=(-C ${pacman_conf}) | ||||
|     work_dir=${CHROOTS_ISO}/${PROFILE}/${ARCH} | ||||
|     work_dir=${CHROOTS_ISO}/${PROFILE}/artix | ||||
|  | ||||
|     iso_dir="${ISO_POOL}/${PROFILE}" | ||||
|  | ||||
|     iso_root=${CHROOTS_ISO}/${PROFILE}/iso | ||||
|     live_dir=/LiveOS | ||||
|  | ||||
|     mnt_dir=${CHROOTS_ISO}/${PROFILE}/mnt | ||||
|  | ||||
|     prepare_dir "${mnt_dir}" | ||||
|     prepare_dir "${iso_dir}" | ||||
|     prepare_dir "${iso_root}" | ||||
| @@ -114,6 +117,7 @@ pretend=false | ||||
| images_only=false | ||||
| iso_only=false | ||||
| persist=false | ||||
| use_dracut=false | ||||
|  | ||||
| basestrap_args=(-GMc) | ||||
| cmd=${0##*/} | ||||
| @@ -129,13 +133,14 @@ usage() { | ||||
|     echo "                       [default: ${ISO_POOL}]" | ||||
|     echo '    -i <name>          Init system to use' | ||||
|     echo "                       [default: ${INITSYS}]" | ||||
|     echo '    -g <key>           The gpg key for sfs signing' | ||||
|     echo '    -g <key>           The gpg key for img signing' | ||||
|     echo "                       [default: ${GPG_KEY}]" | ||||
|     echo '    -m                 Set SquashFS image mode to persistence' | ||||
|     echo '    -c                 Disable clean work dir' | ||||
|     echo '    -x                 Build images only' | ||||
|     echo '    -z                 Generate iso only' | ||||
|     echo '                       Requires pre built images (-x)' | ||||
|     echo '    -d                 Use dracut instead of mkinitcpio for iso initramfs' | ||||
|     echo '    -q                 Query settings and pretend build' | ||||
|     echo '    -h                 This help' | ||||
|     echo '' | ||||
| @@ -145,7 +150,7 @@ usage() { | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='p:r:t:i:g:czxmqh' | ||||
| opts='p:r:t:i:g:czxmdqh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
| @@ -158,6 +163,7 @@ while getopts "${opts}" arg; do | ||||
|         x) images_only=true ;; | ||||
|         z) iso_only=true ;; | ||||
|         m) persist=true ;; | ||||
|         d) use_dracut=true ;; | ||||
|         q) pretend=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|   | ||||
| @@ -195,8 +195,7 @@ sync_repos(){ | ||||
|     fi | ||||
| } | ||||
|  | ||||
| load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
| load_makepkg_config | ||||
|  | ||||
| sync=false | ||||
| sync_arch=true | ||||
|   | ||||
| @@ -16,22 +16,7 @@ | ||||
|  | ||||
| shopt -s extglob | ||||
|  | ||||
| # Source makepkg.conf; fail if it is not found | ||||
| if [[ -r '/etc/makepkg.conf' ]]; then | ||||
|     # shellcheck source=makepkg-x86_64.conf | ||||
|     source '/etc/makepkg.conf' | ||||
| else | ||||
|     die '/etc/makepkg.conf not found!' | ||||
| fi | ||||
|  | ||||
| # Source user-specific makepkg.conf overrides | ||||
| if [[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" ]]; then | ||||
|     # shellcheck source=/dev/null | ||||
|     source "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" | ||||
| elif [[ -r "$HOME/.makepkg.conf" ]]; then | ||||
|     # shellcheck source=/dev/null | ||||
|     source "$HOME/.makepkg.conf" | ||||
| fi | ||||
| load_makepkg_config | ||||
|  | ||||
| usage() { | ||||
|     cat <<- _EOF_ | ||||
|   | ||||
| @@ -141,8 +141,7 @@ symlink_commit_pkg(){ | ||||
|     fi | ||||
| } | ||||
|  | ||||
| load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
| load_makepkg_config | ||||
|  | ||||
| REPO_SRC='trunk' | ||||
| PACKAGE='' | ||||
|   | ||||
| @@ -85,7 +85,7 @@ compare(){ | ||||
|  | ||||
| is_db_entry() { | ||||
|     local pkgname="$1" repo="$(arch2artix $2)" | ||||
|     if [[ -d ${USER_CACHE_DIR}/${LINKSDBEXT}/${ARCH}/$repo/$pkgname ]];then | ||||
|     if [[ -d ${db_cache_dir}/${LINKSDBEXT}/${ARCH}/$repo/$pkgname ]];then | ||||
|         return 0 | ||||
|     fi | ||||
|     return 1 | ||||
| @@ -127,7 +127,7 @@ check_db(){ | ||||
| update_db_cache(){ | ||||
|     msg "Updating database cache" | ||||
|     for repo in "${searchrepos[@]}"; do | ||||
|         local cachedir=${USER_CACHE_DIR}/${LINKSDBEXT}/${ARCH}/${repo} | ||||
|         local cachedir=${db_cache_dir}/${LINKSDBEXT}/${ARCH}/${repo} | ||||
|         rm -rf "$cachedir" | ||||
|         mkdir -p "$cachedir" | ||||
|         msg2 "%s" "$repo" | ||||
| @@ -140,7 +140,7 @@ update_db_cache(){ | ||||
| query_db() { | ||||
|     for repo in "${searchrepos[@]}"; do | ||||
|         local prefix= | ||||
|         local db=${USER_CACHE_DIR}/${LINKSDBEXT}/${ARCH}/${repo}/ | ||||
|         local db=${db_cache_dir}/${LINKSDBEXT}/${ARCH}/${repo}/ | ||||
|         if [[ -d ${db} ]]; then | ||||
|             while read -rd '' pkg; do | ||||
|                 read -r match | ||||
| @@ -185,8 +185,9 @@ show_version_table(){ | ||||
|     done | ||||
| } | ||||
|  | ||||
| load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
| db_cache_dir="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools" | ||||
|  | ||||
| load_makepkg_config | ||||
|  | ||||
| unstable=false | ||||
| staging=true | ||||
|   | ||||
| @@ -129,8 +129,7 @@ update_repo(){ | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
| load_makepkg_config | ||||
|  | ||||
| add_pkg=false | ||||
| del_pkg=false | ||||
|   | ||||
| @@ -33,8 +33,7 @@ run_checkpkg=0 | ||||
| temp_chroot=0 | ||||
| run_nocheck=0 | ||||
|  | ||||
| bindmounts_ro=() | ||||
| bindmounts_rw=() | ||||
| bindmounts=() | ||||
|  | ||||
| copy=$USER | ||||
| [[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER | ||||
| @@ -147,8 +146,7 @@ install_packages() { | ||||
|  | ||||
|     cp -- "${install_pkgs[@]}" "$copydir/root/" | ||||
|     chroot-run \ | ||||
|         -r "${bindmounts_ro[@]}" \ | ||||
|         -r "${bindmounts_rw[@]}" \ | ||||
|         -b "${bindmounts[@]}" \ | ||||
|         "$copydir" \ | ||||
|         bash -c 'yes y | pacman -U -- "$@"' -bash "${pkgnames[@]/#//root/}" | ||||
|     ret=$? | ||||
| @@ -282,13 +280,12 @@ move_products() { | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='hcur:I:l:nNCTD:d:U:' | ||||
| opts='hcur:I:l:nNCTb:U:' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "$arg" in | ||||
|         c) clean_first=1 ;; | ||||
|         D) bindmounts_ro+=("$OPTARG") ;; | ||||
|         d) bindmounts_rw+=("$OPTARG") ;; | ||||
|         b) bindmounts+=("$OPTARG") ;; | ||||
|         u) update_first=1 ;; | ||||
|         r) passeddir="$OPTARG" ;; | ||||
|         I) install_pkgs+=("$OPTARG") ;; | ||||
| @@ -332,16 +329,12 @@ for arg in "${@:$OPTIND}"; do | ||||
|     esac | ||||
| done | ||||
|  | ||||
| if [[ -n $SUDO_USER ]]; then | ||||
| 	eval "USER_HOME=~$SUDO_USER" | ||||
| else | ||||
| 	USER_HOME=$HOME | ||||
| fi | ||||
|  | ||||
| umask 0022 | ||||
|  | ||||
| load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
| ORIG_HOME=$HOME | ||||
| IFS=: read -r _ _ _ _ _ HOME _ < <(getent passwd "${SUDO_USER:-$USER}") | ||||
| load_makepkg_config | ||||
| HOME=$ORIG_HOME | ||||
|  | ||||
| # Use PKGBUILD directory if these don't exist | ||||
| [[ -d $PKGDEST ]]    || PKGDEST=$PWD | ||||
| @@ -356,11 +349,10 @@ if [[ ! -d $copydir ]] || (( clean_first )); then | ||||
|     sync_chroot "$chrootdir" "$copydir" "$copy" | ||||
| fi | ||||
|  | ||||
| bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest") | ||||
| bindmounts+=("-B:${PWD}:/startdir" "-B:${SRCDEST}:/srcdest") | ||||
|  | ||||
| (( update_first )) && chroot-run \ | ||||
|         -r "${bindmounts_ro[*]}" \ | ||||
|         -w "${bindmounts_rw[*]}" \ | ||||
|         -b "${bindmounts[*]}" \ | ||||
|         "$copydir" \ | ||||
|         pacman -Syuu --noconfirm | ||||
|  | ||||
| @@ -381,8 +373,7 @@ download_sources | ||||
| prepare_chroot | ||||
|  | ||||
| if chroot-run \ | ||||
|     -r "${bindmounts_ro[*]}" \ | ||||
|     -w "${bindmounts_rw[*]}" \ | ||||
|     -b "${bindmounts[*]}" \ | ||||
|     "$copydir" \ | ||||
|     /chrootbuild "${makepkg_args[@]}" | ||||
| then | ||||
|   | ||||
| @@ -144,6 +144,6 @@ PACKAGE="$1"/PKGBUILD; shift | ||||
|  | ||||
| . "$PACKAGE" | ||||
|  | ||||
| . /etc/makepkg.conf | ||||
| load_makepkg_config | ||||
|  | ||||
| write_pkg_yaml | ||||
|   | ||||
| @@ -11,7 +11,7 @@ | ||||
| # possible values: openrc, runit, s6 | ||||
| # INITSYS="openrc" | ||||
|  | ||||
| # gpg key; leave empty or commented to skip sfs signing | ||||
| # gpg key; leave empty or commented to skip img signing | ||||
| # GPG_KEY="" | ||||
|  | ||||
| # set upload bandwidth limit in kB/s | ||||
|   | ||||
| @@ -1,5 +0,0 @@ | ||||
| MODULES=(loop dm-snapshot) | ||||
|  | ||||
| HOOKS=(base udev artix_shutdown artix artix_loop_mnt artix_pxe_common artix_pxe_http artix_pxe_nbd artix_pxe_nfs artix_kms modconf block filesystems keyboard keymap) | ||||
|  | ||||
| COMPRESSION="xz" | ||||
| @@ -132,17 +132,17 @@ DBGSRCDIR="/usr/src/debug" | ||||
| COMPRESSGZ=(gzip -c -f -n) | ||||
| COMPRESSBZ2=(bzip2 -c -f) | ||||
| COMPRESSXZ=(xz -c -z -) | ||||
| COMPRESSZST=(zstd -c -z -q -) | ||||
| COMPRESSLRZ=(lrzip -q) | ||||
| COMPRESSLZO=(lzop -q) | ||||
| COMPRESSZ=(compress -c -f) | ||||
| COMPRESSLZ4=(lz4 -q) | ||||
| COMPRESSLZ=(lzip -c -f) | ||||
| 
 | ||||
| ######################################################################### | ||||
| # EXTENSION DEFAULTS | ||||
| ######################################################################### | ||||
| # | ||||
| # WARNING: Do NOT modify these variables unless you know what you are | ||||
| #          doing. | ||||
| # | ||||
| PKGEXT='.pkg.tar.xz' | ||||
| SRCEXT='.src.tar.gz' | ||||
| 
 | ||||
| @@ -16,10 +16,9 @@ | ||||
| #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 | ||||
| Architecture = auto | ||||
| 
 | ||||
| # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup | ||||
| @@ -16,10 +16,9 @@ | ||||
| #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 | ||||
| Architecture = auto | ||||
| 
 | ||||
| # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup | ||||
| @@ -16,10 +16,9 @@ | ||||
| #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 | ||||
| Architecture = auto | ||||
| 
 | ||||
| # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup | ||||
| @@ -16,10 +16,9 @@ | ||||
| #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 | ||||
| Architecture = auto | ||||
| 
 | ||||
| # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup | ||||
| @@ -16,10 +16,9 @@ | ||||
| #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 | ||||
| Architecture = auto | ||||
| 
 | ||||
| # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup | ||||
| @@ -16,10 +16,9 @@ | ||||
| #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 | ||||
| Architecture = auto | ||||
| 
 | ||||
| # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup | ||||
| @@ -16,10 +16,9 @@ | ||||
| #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 | ||||
| Architecture = auto | ||||
| 
 | ||||
| # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup | ||||
| @@ -16,10 +16,9 @@ | ||||
| #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 | ||||
| Architecture = auto | ||||
| 
 | ||||
| # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup | ||||
| @@ -8,36 +8,36 @@ _mnt_dmsnapshot() { | ||||
|     local ro_dev ro_dev_size rw_dev | ||||
|  | ||||
|     ro_dev=$(losetup --find --show --read-only "${img}") | ||||
|     echo ${ro_dev} >> /run/artix/used_block_devices | ||||
|     echo ${ro_dev} >> ${live_root}/used_block_devices | ||||
|     ro_dev_size=$(blockdev --getsz ${ro_dev}) | ||||
|  | ||||
|     if [[ "${cow_persistent}" == "P" ]]; then | ||||
|         if [[ -f "/run/artix/cowspace/${cow_directory}/${img_name}.cow" ]]; then | ||||
|             msg ":: Found '/run/artix/cowspace/${cow_directory}/${img_name}.cow', using as persistent." | ||||
|         if [[ -f "${cow}/${cow_directory}/${img_name}.cow" ]]; then | ||||
|             msg ":: Found '${cow}/${cow_directory}/${img_name}.cow', using as persistent." | ||||
|         else | ||||
|             msg ":: Creating '/run/artix/cowspace/${cow_directory}/${img_name}.cow' as persistent." | ||||
|             truncate -s "${cow_spacesize}" "/run/artix/cowspace/${cow_directory}/${img_name}.cow" | ||||
|             msg ":: Creating '${cow}/${cow_directory}/${img_name}.cow' as persistent." | ||||
|             truncate -s "${cow_spacesize}" "${cow}/${cow_directory}/${img_name}.cow" | ||||
|         fi | ||||
|     else | ||||
|         if [[ -f "/run/artix/cowspace/${cow_directory}/${img_name}.cow" ]]; then | ||||
|             msg ":: Found '/run/artix/cowspace/${cow_directory}/${img_name}.cow' but non-persistent requested, removing." | ||||
|             rm -f "/run/artix/cowspace/${cow_directory}/${img_name}.cow" | ||||
|         if [[ -f "${cow}/${cow_directory}/${img_name}.cow" ]]; then | ||||
|             msg ":: Found '${cow}/${cow_directory}/${img_name}.cow' but non-persistent requested, removing." | ||||
|             rm -f "${cow}/${cow_directory}/${img_name}.cow" | ||||
|         fi | ||||
|         msg ":: Creating '/run/artix/cowspace/${cow_directory}/${img_name}.cow' as non-persistent." | ||||
|         truncate -s "${cow_spacesize}" "/run/artix/cowspace/${cow_directory}/${img_name}.cow" | ||||
|         msg ":: Creating '${cow}/${cow_directory}/${img_name}.cow' as non-persistent." | ||||
|         truncate -s "${cow_spacesize}" "${cow}/${cow_directory}/${img_name}.cow" | ||||
|     fi | ||||
|  | ||||
|     rw_dev=$(losetup --find --show "/run/artix/cowspace/${cow_directory}/${img_name}.cow") | ||||
|     echo ${rw_dev} >> /run/artix/used_block_devices | ||||
|     rw_dev=$(losetup --find --show "${cow}/${cow_directory}/${img_name}.cow") | ||||
|     echo ${rw_dev} >> ${live_root}/used_block_devices | ||||
|  | ||||
|     dmsetup create ${dm_snap_name} --table "0 ${ro_dev_size} snapshot ${ro_dev} ${rw_dev} ${cow_persistent} ${cow_chunksize}" | ||||
|  | ||||
|     if [[ "${cow_persistent}" != "P" ]]; then | ||||
|         rm -f "/run/artix/cowspace/${cow_directory}/${img_name}.cow" | ||||
|         rm -f "${cow}/${cow_directory}/${img_name}.cow" | ||||
|     fi | ||||
|  | ||||
|     _mnt_dev "/dev/mapper/${dm_snap_name}" "${mnt}" "-w" "defaults" | ||||
|     echo $(readlink -f /dev/mapper/${dm_snap_name}) >> /run/artix/used_block_devices | ||||
|     echo $(readlink -f /dev/mapper/${dm_snap_name}) >> ${live_root}/used_block_devices | ||||
| } | ||||
|  | ||||
| # args: source, newroot, mountpoint | ||||
| @@ -45,8 +45,8 @@ _mnt_overlayfs() { | ||||
|     local src="${1}" | ||||
|     local newroot="${2}" | ||||
|     local mnt="${3}" | ||||
|     local work_dir="/run/artix/overlay_root/work" | ||||
|     local upper_dir="/run/artix/overlay_root/upper" | ||||
|     local work_dir="${overlay_root}/work" | ||||
|     local upper_dir="${overlay_root}/upper" | ||||
|  | ||||
|     mkdir -p "${upper_dir}" "${work_dir}" | ||||
|  | ||||
| @@ -63,15 +63,15 @@ _mnt_sfs() { | ||||
|  | ||||
|     if [[ "${copytoram}" == "y" ]]; then | ||||
|         msg -n ":: Copying squashfs image to RAM..." | ||||
|         if ! "${oper}" "${img}" "/run/artix/copytoram/${img_fullname}" ; then | ||||
|             echo "ERROR: while copy '${img}' to '/run/artix/copytoram/${img_fullname}'" | ||||
|         if ! "${oper}" "${img}" "${cp2ram}/${img_fullname}" ; then | ||||
|             echo "ERROR: while copy '${img}' to '${cp2ram}/${img_fullname}'" | ||||
|             launch_interactive_shell | ||||
|         fi | ||||
|         img="/run/artix/copytoram/${img_fullname}" | ||||
|         img="${cp2ram}/${img_fullname}" | ||||
|         msg "done." | ||||
|     fi | ||||
|     sfs_dev=$(losetup --find --show --read-only "${img}") | ||||
|     echo ${sfs_dev} >> /run/artix/used_block_devices | ||||
|     echo ${sfs_dev} >> ${live_root}/used_block_devices | ||||
|     _mnt_dev "${sfs_dev}" "${mnt}" "-r" "defaults" | ||||
| } | ||||
|  | ||||
| @@ -105,8 +105,8 @@ _mnt_dev() { | ||||
|  | ||||
| _verify_checksum() { | ||||
|     local _status | ||||
|     cd "/run/artix/bootmnt/${artixbasedir}/${arch}" | ||||
|     sha512sum -c $1.sha512 > /tmp/checksum.log 2>&1 | ||||
|     cd "${bootmnt}/${root}" | ||||
|     sha512sum -c $1.img.sha512 > /tmp/checksum.log 2>&1 | ||||
|     _status=$? | ||||
|     cd "${OLDPWD}" | ||||
|     return ${_status} | ||||
| @@ -114,20 +114,19 @@ _verify_checksum() { | ||||
|  | ||||
| _verify_signature() { | ||||
|     local _status | ||||
|     cd "/run/artix/bootmnt/${artixbasedir}/${arch}" | ||||
|     gpg --homedir /gpg --status-fd 1 --verify $1.sfs.sig 2>/dev/null | grep -qE '^\[GNUPG:\] GOODSIG' | ||||
|     cd "${bootmnt}/${root}" | ||||
|     gpg --homedir /gpg --status-fd 1 --verify $1.img.sig 2>/dev/null | grep -qE '^\[GNUPG:\] GOODSIG' | ||||
|     _status=$? | ||||
|     cd "${OLDPWD}" | ||||
|     return ${_status} | ||||
| } | ||||
|  | ||||
| run_hook() { | ||||
|     [[ -z "${arch}" ]] && arch="$(uname -m)" | ||||
|     [[ -z "${copytoram_size}" ]] && copytoram_size="75%" | ||||
|     [[ -z "${artixbasedir}" ]] && artixbasedir="artix" | ||||
|     [[ -z "${root}" ]] && root="LiveOS" | ||||
|  | ||||
|     [[ -z "${dm_snap_prefix}" ]] && dm_snap_prefix="arch" | ||||
|     [[ -z "${artixdevice}" ]] && artixdevice="/dev/disk/by-label/${artixlabel}" | ||||
|     [[ -z "${dm_snap_prefix}" ]] && dm_snap_prefix="artix" | ||||
|     [[ -z "${artixdevice}" ]] && artixdevice="/dev/disk/by-label/${label}" | ||||
|     [[ -z "${cow_spacesize}" ]] && cow_spacesize="256M" | ||||
|     [[ -z "${overlay_root_size}" ]] && overlay_root_size="75%" | ||||
|  | ||||
| @@ -141,109 +140,135 @@ run_hook() { | ||||
|     fi | ||||
|  | ||||
|     [[ -z "${cow_flags}" ]] && cow_flags="defaults" | ||||
|     [[ -z "${cow_directory}" ]] && cow_directory="persistent_${artixlabel}/${arch}" | ||||
|     [[ -z "${cow_directory}" ]] && cow_directory="persistent_${label}" | ||||
|     [[ -z "${cow_chunksize}" ]] && cow_chunksize="8" | ||||
|     [[ -z "${overlay}" ]] && overlay="" | ||||
|  | ||||
|     lower_dir='' | ||||
|     live_root="/run/artix" | ||||
|     bootmnt="/run/bootmnt" | ||||
|     overlay_root="${live_root}/overlay_root" | ||||
|     cow="${live_root}/cowspace" | ||||
|     cp2ram="${live_root}/copytoram" | ||||
|  | ||||
|     # set mount handler for artix | ||||
|     mount_handler="artix_mount_handler" | ||||
| } | ||||
|  | ||||
| _check_sum() { | ||||
|     local fs="${1}" | ||||
|     if [[ -f "${bootmnt}/${root}/${fs}.img" ]]; then | ||||
|         if [[ -f "${bootmnt}/${root}/${fs}.img.md5" ]]; then | ||||
|             msg -n ":: Self-test requested, please wait..." | ||||
|             if _verify_checksum "${fs}"; then | ||||
|                 msg "done. Checksum is OK, continue booting." | ||||
|             else | ||||
|                 echo "ERROR: one or more files are corrupted" | ||||
|                 echo "see /tmp/checksum.log for details" | ||||
|                 launch_interactive_shell | ||||
|             fi | ||||
|         else | ||||
|             echo "ERROR: checksum=y option specified but ${root}/${fs}.img.md5 not found" | ||||
|             launch_interactive_shell | ||||
|         fi | ||||
|     fi | ||||
| } | ||||
|  | ||||
| _check_sig() { | ||||
|     local fs="${1}" | ||||
|     if [[ -f "${bootmnt}/${root}/${fs}.img" ]]; then | ||||
|         if [[ -f "${bootmnt}/${root}/${fs}.img.sig" ]]; then | ||||
|             msg -n ":: Signature verification requested, please wait..." | ||||
|             if _verify_signature "${fs}"; then | ||||
|                 msg "done. Signature is OK, continue booting." | ||||
|             else | ||||
|                 echo "ERROR: one or more files are corrupted" | ||||
|                 launch_interactive_shell | ||||
|             fi | ||||
|         else | ||||
|             echo "ERROR: verify=y option specified but ${root}/${fs}.img.sig not found" | ||||
|             launch_interactive_shell | ||||
|         fi | ||||
|     fi | ||||
| } | ||||
|  | ||||
| _gen_arg() { | ||||
|     local arg="${1}" | ||||
|     echo "${lower_dir:-}${lower_dir:+:}${arg}" | ||||
| } | ||||
|  | ||||
| _mount_root_overlayfs() { | ||||
|     local sfs="${1}" | ||||
|     local src="${bootmnt}/${root}" | ||||
|     local dest_sfs="${live_root}/sfs" | ||||
|     local dest_img="${live_root}/img" | ||||
|  | ||||
|     if [[ -f "${src}/${sfs}.img" ]]; then | ||||
|         _mnt_sfs "${src}/${sfs}.img" "${dest_sfs}/${sfs}" | ||||
|         local find_img="${dest_sfs}/${sfs}/LiveOS/${sfs}.img" | ||||
|         if [[ -f "${find_img}" ]]; then | ||||
|             mkdir -p ${dest_img} | ||||
|             lower_dir=$(_gen_arg "${dest_img}/${sfs}") | ||||
|             _mnt_dmsnapshot "${find_img}" "${dest_img}/${sfs}" | ||||
|         else | ||||
|             lower_dir=$(_gen_arg "${dest_sfs}/${sfs}") | ||||
|         fi | ||||
|     fi | ||||
| } | ||||
|  | ||||
| # This function is called normally from init script, but it can be called | ||||
| # as chain from other mount handlers. | ||||
| # args: /path/to/newroot | ||||
| artix_mount_handler() { | ||||
|     local newroot="${1}" | ||||
|  | ||||
|     if ! mountpoint -q "/run/artix/bootmnt"; then | ||||
|         _mnt_dev "${artixdevice}" "/run/artix/bootmnt" "-r" "defaults" | ||||
|     if ! mountpoint -q "${bootmnt}"; then | ||||
|         _mnt_dev "${artixdevice}" "${bootmnt}" "-r" "defaults" | ||||
|         if [[ "${copytoram}" != "y" ]]; then | ||||
|             echo $(readlink -f ${artixdevice}) >> /run/artix/used_block_devices | ||||
|             echo $(readlink -f ${artixdevice}) >> ${live_root}/used_block_devices | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     if [[ "${checksum}" == "y" ]]; then | ||||
|         for fs in rootfs livefs;do | ||||
|             if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs" ]]; then | ||||
|                 if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sha512" ]]; then | ||||
|                     msg -n ":: Self-test requested, please wait..." | ||||
|                     if _verify_checksum "${fs}"; then | ||||
|                         msg "done. Checksum is OK, continue booting." | ||||
|                     else | ||||
|                         echo "ERROR: one or more files are corrupted" | ||||
|                         echo "see /tmp/checksum.log for details" | ||||
|                         launch_interactive_shell | ||||
|                     fi | ||||
|                 else | ||||
|                     echo "ERROR: checksum=y option specified but ${artixbasedir}/${arch}/${fs}.sha512 not found" | ||||
|                     launch_interactive_shell | ||||
|                 fi | ||||
|             fi | ||||
|         done | ||||
|         _check_sum "rootfs" | ||||
|         [[ -n "${overlay}" ]] && _check_sum "${overlay}" | ||||
|     fi | ||||
|  | ||||
|     if [[ "${verify}" == "y" ]]; then | ||||
|         for fs in rootfs livefs;do | ||||
|             if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs" ]]; then | ||||
|                 if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs.sig" ]]; then | ||||
|                     msg -n ":: Signature verification requested, please wait..." | ||||
|                     if _verify_signature "${fs}"; then | ||||
|                         msg "done. Signature is OK, continue booting." | ||||
|                     else | ||||
|                         echo "ERROR: one or more files are corrupted" | ||||
|                         launch_interactive_shell | ||||
|                     fi | ||||
|                 else | ||||
|                     echo "ERROR: verify=y option specified but ${artixbasedir}/${arch}/${fs}.sfs.sig not found" | ||||
|                     launch_interactive_shell | ||||
|                 fi | ||||
|             fi | ||||
|         done | ||||
|         _check_sig "rootfs" | ||||
|         [[ -n "${overlay}" ]] && _check_sig "${overlay}" | ||||
|     fi | ||||
|  | ||||
|     if [[ "${copytoram}" == "y" ]]; then | ||||
|         msg ":: Mounting /run/artix/copytoram (tmpfs) filesystem, size=${copytoram_size}" | ||||
|         mkdir -p /run/artix/copytoram | ||||
|         mount -t tmpfs -o "size=${copytoram_size}",mode=0755 copytoram /run/artix/copytoram | ||||
|         msg ":: Mounting ${cp2ram} (tmpfs) filesystem, size=${copytoram_size}" | ||||
|         mkdir -p ${cp2ram} | ||||
|         mount -t tmpfs -o "size=${copytoram_size}",mode=0755 copytoram ${cp2ram} | ||||
|     fi | ||||
|  | ||||
|     if [[ -n "${cow_device}" ]]; then | ||||
|         _mnt_dev "${cow_device}" "/run/artix/cowspace" "-r" "${cow_flags}" | ||||
|         echo $(readlink -f ${cow_device}) >> /run/artix/used_block_devices | ||||
|         mount -o remount,rw "/run/artix/cowspace" | ||||
|         _mnt_dev "${cow_device}" "${cow}" "-r" "${cow_flags}" | ||||
|         echo $(readlink -f ${cow_device}) >> ${live_root}/used_block_devices | ||||
|         mount -o remount,rw "${cow}" | ||||
|     else | ||||
|         msg ":: Mounting /run/artix/cowspace (tmpfs) filesystem, size=${cow_spacesize}..." | ||||
|         mkdir -p /run/artix/cowspace | ||||
|         mount -t tmpfs -o "size=${cow_spacesize}",mode=0755 cowspace /run/artix/cowspace | ||||
|         msg ":: Mounting ${cow} (tmpfs) filesystem, size=${cow_spacesize}..." | ||||
|         mkdir -p ${cow} | ||||
|         mount -t tmpfs -o "size=${cow_spacesize}",mode=0755 cowspace ${cow} | ||||
|     fi | ||||
|     mkdir -p -m 0700 "/run/artix/cowspace/${cow_directory}" | ||||
|     mkdir -p -m 0700 "${cow}/${cow_directory}" | ||||
|  | ||||
|     msg -n ":: Mounting overlay root (tmpfs) filesystem, size=${overlay_root_size}..." | ||||
|     mkdir -p /run/artix/overlay_root | ||||
|     mount -t tmpfs -o "size=${overlay_root_size}",mode=0755 overlay_root /run/artix/overlay_root | ||||
|     mkdir -p ${overlay_root} | ||||
|     mount -t tmpfs -o "size=${overlay_root_size}",mode=0755 overlay_root ${overlay_root} | ||||
|  | ||||
|     local src="/run/artix/bootmnt/${artixbasedir}/${arch}" | ||||
|     local dest_sfs="/run/artix/sfs" dest_img="/run/artix/img" | ||||
|     local lower_dir | ||||
|  | ||||
|     for sfs in livefs rootfs;do | ||||
|         if [[ -f "${src}/${sfs}.sfs" ]]; then | ||||
|             _mnt_sfs "${src}/${sfs}.sfs" "${dest_sfs}/${sfs}" | ||||
|             if [[ -f "${dest_sfs}/${sfs}/${sfs}.img" ]]; then | ||||
|                 mkdir -p ${dest_img} | ||||
|                 lower_dir=${lower_dir:-}${lower_dir:+:}"${dest_img}/${sfs}" | ||||
|                 _mnt_dmsnapshot "${dest_sfs}/${sfs}/${sfs}.img" "${dest_img}/${sfs}" | ||||
|             else | ||||
|                 lower_dir=${lower_dir:-}${lower_dir:+:}"${dest_sfs}/${sfs}" | ||||
|             fi | ||||
|         fi | ||||
|     done | ||||
|     [[ -n "${overlay}" ]] && _mount_root_overlayfs "${overlay}" | ||||
|     _mount_root_overlayfs "rootfs" | ||||
|  | ||||
|     _mnt_overlayfs "${lower_dir}" "${newroot}" "/" | ||||
|  | ||||
|     if [[ "${copytoram}" == "y" ]]; then | ||||
|         umount -d /run/artix/bootmnt | ||||
|         mkdir -p /run/artix/bootmnt/${artixbasedir}/${arch} | ||||
|         mount -o bind /run/artix/copytoram /run/artix/bootmnt/${artixbasedir}/${arch} | ||||
|         umount -d ${bootmnt} | ||||
|         mkdir -p ${bootmnt}/${root} | ||||
|         mount -o bind ${cp2ram} ${bootmnt}/${root} | ||||
|     fi | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -14,15 +14,15 @@ artix_loop_mount_handler () { | ||||
|     local _dev_loop | ||||
|  | ||||
|     msg ":: Setup a loop device from ${img_loop} located at device ${img_dev}" | ||||
|     _mnt_dev "${img_dev}" "/run/artix/img_dev" "-r" "${img_flags}" | ||||
|     _mnt_dev "${img_dev}" "${live_root}/img_dev" "-r" "${img_flags}" | ||||
|     if [[ "${copytoram}" != "y" ]]; then | ||||
|         echo $(readlink -f ${img_dev}) >> /run/artix/used_block_devices | ||||
|         echo $(readlink -f ${img_dev}) >> ${live_root}/used_block_devices | ||||
|     fi | ||||
|  | ||||
|     if _dev_loop=$(losetup --find --show --read-only "/run/artix/img_dev/${img_loop}"); then | ||||
|     if _dev_loop=$(losetup --find --show --read-only "${live_root}/img_dev/${img_loop}"); then | ||||
|         artixdevice="${_dev_loop}" | ||||
|     else | ||||
|         echo "ERROR: Setting loopback device for file '/run/artix/img_dev/${img_loop}'" | ||||
|         echo "ERROR: Setting loopback device for file '${live_root}/img_dev/${img_loop}'" | ||||
|         launch_interactive_shell | ||||
|     fi | ||||
|  | ||||
| @@ -30,6 +30,6 @@ artix_loop_mount_handler () { | ||||
|  | ||||
|     if [[ "${copytoram}" == "y" ]]; then | ||||
|         losetup -d ${_dev_loop} 2>/dev/null | ||||
|         umount /run/artix/img_dev | ||||
|         umount ${live_root}/img_dev | ||||
|     fi | ||||
| } | ||||
|   | ||||
| @@ -17,13 +17,13 @@ run_hook() { | ||||
| # Fetch a file with CURL | ||||
| # | ||||
| # $1 URL | ||||
| # $2 Destination directory inside httpspace/${artixbasedir} | ||||
| # $2 Destination directory inside httpspace/${root} | ||||
| _curl_get() { | ||||
|     local _url="${1}" | ||||
|     local _dst="${2}" | ||||
|  | ||||
|     msg ":: Downloading '${_url}'" | ||||
|     if ! curl -L -f -o "/run/artix/httpspace/${artixbasedir}${_dst}/${_url##*/}" --create-dirs "${_url}"; then | ||||
|     if ! curl -L -f -o "${live_root}/httpspace/${root}${_dst}/${_url##*/}" --create-dirs "${_url}"; then | ||||
|         echo "ERROR: Downloading '${_url}'" | ||||
|         echo "   Falling back to interactive prompt" | ||||
|         echo "   You can try to fix the problem manually, log out when you are finished" | ||||
| @@ -31,29 +31,33 @@ _curl_get() { | ||||
|     fi | ||||
| } | ||||
|  | ||||
| _get_sfs() { | ||||
|     local _sfs="${2}" | ||||
|     local _src=${artix_http_srv}${root} | ||||
|     if [[ ! -z "$( curl -s --head "${_src}/${_sfs}.img" | grep "OK" )" ]]; then | ||||
|         _curl_get "${_src}/${_sfs}.img" "/" | ||||
|  | ||||
|         if [[ "${checksum}" == "y" ]]; then | ||||
|             _curl_get "${_src}/${_sfs}.md5" "/" | ||||
|         fi | ||||
|         if [[ "${verify}" == "y" ]]; then | ||||
|             _curl_get "${_src}/${_sfs}.img.sig" "/" | ||||
|         fi | ||||
|     fi | ||||
| } | ||||
|  | ||||
| artix_pxe_http_mount_handler () { | ||||
|     newroot="${1}" | ||||
|  | ||||
|     msg ":: Mounting /run/artix/httpspace (tmpfs) filesystem, size='${artix_http_spc}'" | ||||
|     mkdir -p "/run/artix/httpspace" | ||||
|     mount -t tmpfs -o size="${artix_http_spc}",mode=0755 httpspace "/run/artix/httpspace" | ||||
|     msg ":: Mounting ${live_root}/httpspace (tmpfs) filesystem, size='${artix_http_spc}'" | ||||
|     mkdir -p "${live_root}/httpspace" | ||||
|     mount -t tmpfs -o size="${artix_http_spc}",mode=0755 httpspace "${live_root}/httpspace" | ||||
|  | ||||
|     local _src=${artix_http_srv}${artixbasedir}/${arch} | ||||
|     _get_sfs "rootfs" | ||||
|     [[ -n "${overlay}" ]] && _mount_root_overlayfs "${overlay}" | ||||
|  | ||||
|     for sfs in livefs rootfs;do | ||||
|         if [[ ! -z "$( curl -s --head "${_src}/${sfs}.sfs" | grep "OK" )" ]]; then | ||||
|             _curl_get "${_src}/${sfs}.sfs" "/${arch}" | ||||
|  | ||||
|             if [[ "${checksum}" == "y" ]]; then | ||||
|                 _curl_get "${_src}/${sfs}.md5" "/${arch}" | ||||
|             fi | ||||
|             if [[ "${verify}" == "y" ]]; then | ||||
|                 _curl_get "${_src}/${sfs}.sfs.sig" "/${arch}" | ||||
|             fi | ||||
|         fi | ||||
|     done | ||||
|     mkdir -p "/run/artix/bootmnt" | ||||
|     mount -o bind /run/artix/httpspace /run/artix/bootmnt | ||||
|     mkdir -p "${bootmnt}" | ||||
|     mount -o bind ${live_root}/httpspace ${bootmnt} | ||||
|  | ||||
|     artix_mount_handler ${newroot} | ||||
| } | ||||
|   | ||||
| @@ -12,10 +12,10 @@ run_hook() { | ||||
|  | ||||
| artix_nfs_mount_handler() { | ||||
|     newroot="${1}" | ||||
|     mkdir -p "/run/artix/bootmnt" | ||||
|     mkdir -p "${bootmnt}" | ||||
|     msg ":: Mounting '${artix_nfs_srv}'" | ||||
|     # Do not put "${artix_nfs_opt}" nfsmount fails! | ||||
|     if ! nfsmount ${artix_nfs_opt} "${artix_nfs_srv}" "/run/artix/bootmnt"; then | ||||
|     if ! nfsmount ${artix_nfs_opt} "${artix_nfs_srv}" "${bootmnt}"; then | ||||
|         echo "ERROR: Mounting '${artix_nfs_srv}'" | ||||
|         echo "   Falling back to interactive prompt" | ||||
|         echo "   You can try to fix the problem manually, log out when you are finished" | ||||
|   | ||||
| @@ -5,8 +5,7 @@ mkdir /oldrun | ||||
| mount -n --move /oldroot/run /oldrun | ||||
|  | ||||
| # Unmount all mounts now. | ||||
| #umount $(mount | awk '$3 ~/^\/oldroot/ {print $3}' | sort -r) | ||||
| umount $(mount | awk '$3 ~/^\/oldroot/ {if($3 != "/run/artix/bootmnt") print $3}' | sort -r) | ||||
| umount $(mount | awk '$3 ~/^\/oldroot/ {print $3}' | sort -r) | ||||
|  | ||||
| # Remove all dm-snapshot devices. | ||||
| dmsetup remove_all | ||||
| @@ -26,7 +25,7 @@ if [[ ! -d /oldrun/artix/copytoram ]]; then | ||||
|     if [[ -d /oldrun/artix/img_dev ]]; then | ||||
|         umount /oldrun/artix/img_dev | ||||
|     else | ||||
|         umount /oldrun/artix/bootmnt | ||||
|         umount /oldrun/bootmnt | ||||
|     fi | ||||
| fi | ||||
|  | ||||
|   | ||||
| @@ -25,18 +25,6 @@ show_elapsed_time(){ | ||||
|     info "Time %s: %s minutes" "$1" "$(elapsed_time $2)" | ||||
| } | ||||
|  | ||||
| load_vars() { | ||||
|     local var | ||||
|  | ||||
|     [[ -f $1 ]] || return 1 | ||||
|  | ||||
|     for var in {SRC,SRCPKG,PKG,LOG}DEST MAKEFLAGS PACKAGER CARCH GPGKEY; do | ||||
|         [[ -z ${!var:-} ]] && eval "$(source "$1"; printf "%s='%s'" "$var" "${!var}")" | ||||
|     done | ||||
|  | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| prepare_dir(){ | ||||
|     [[ ! -d $1 ]] && mkdir -p $1 | ||||
| } | ||||
|   | ||||
| @@ -139,6 +139,21 @@ write_postcfg(){ | ||||
|     printf '%s' "${yaml}" | ||||
| } | ||||
|  | ||||
| write_unpackfs() { | ||||
|     local yaml=$(write_yaml_header) | ||||
|     yaml+=$(write_yaml_map 0 'unpack') | ||||
| #     if ${persist}; then | ||||
| #         yaml+=$(write_yaml_seq_map 2 'source' '"/run/bootmnt/LiveOS/rootfs.img"') | ||||
| #         yaml+=$(write_yaml_map 4 'sourcefs' '"ext4"') | ||||
| #     else | ||||
|     yaml+=$(write_yaml_seq_map 2 'source' '"/run/bootmnt/LiveOS/rootfs.img"') | ||||
|     yaml+=$(write_yaml_map 4 'sourcefs' '"squashfs"') | ||||
| #     fi | ||||
|     yaml+=$(write_yaml_map 4 'destination' '""') | ||||
|     yaml+=$(write_empty_line) | ||||
|     printf '%s' "${yaml}" | ||||
| } | ||||
|  | ||||
| configure_calamares(){ | ||||
|     local mods="$1/etc/calamares/modules" | ||||
|     if [[ -d "$mods" ]];then | ||||
| @@ -146,6 +161,7 @@ configure_calamares(){ | ||||
|         write_users_conf > "$mods"/users.conf | ||||
|         write_services_"${INITSYS}"_conf "$mods" | ||||
|         write_postcfg > "$mods"/postcfg.conf | ||||
|         write_unpackfs > "$mods"/unpackfs.conf | ||||
|         sed -e "s|services-openrc|services-${INITSYS}|" \ | ||||
|             -i "$1"/etc/calamares/settings.conf | ||||
|     fi | ||||
|   | ||||
							
								
								
									
										140
									
								
								lib/iso/grub.sh
									
									
									
									
									
								
							
							
						
						
									
										140
									
								
								lib/iso/grub.sh
									
									
									
									
									
								
							| @@ -12,42 +12,8 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| prepare_initcpio(){ | ||||
|     msg2 "Copying initcpio ..." | ||||
|     local dest="$1" | ||||
|     cp /etc/initcpio/hooks/artix* $dest/etc/initcpio/hooks | ||||
|     cp /etc/initcpio/install/artix* $dest/etc/initcpio/install | ||||
|     cp /etc/initcpio/artix_shutdown $dest/etc/initcpio | ||||
| } | ||||
|  | ||||
| prepare_initramfs(){ | ||||
|     local mnt="$1" | ||||
|     cp ${DATADIR}/mkinitcpio.conf $mnt/etc/mkinitcpio-artix.conf | ||||
|  | ||||
|     if [[ "${PROFILE}" != 'base' ]];then | ||||
|         sed -e 's/artix_pxe_common artix_pxe_http artix_pxe_nbd artix_pxe_nfs //' -i $mnt/etc/mkinitcpio-artix.conf | ||||
|     fi | ||||
|  | ||||
|     if [[ -n ${GPG_KEY} ]]; then | ||||
|         su ${OWNER} -c "gpg --export ${GPG_KEY} >/tmp/GPG_KEY" | ||||
|         exec 17<>/tmp/GPG_KEY | ||||
|     fi | ||||
|     local _kernel=$(<$mnt/usr/src/linux/version) | ||||
|     ARTIX_GNUPG_FD=${GPG_KEY:+17} artools-chroot $mnt \ | ||||
|         /usr/bin/mkinitcpio -k ${_kernel} \ | ||||
|         -c /etc/mkinitcpio-artix.conf \ | ||||
|         -g /boot/initramfs.img | ||||
|  | ||||
|     if [[ -n ${GPG_KEY} ]]; then | ||||
|         exec 17<&- | ||||
|     fi | ||||
|     if [[ -f /tmp/GPG_KEY ]]; then | ||||
|         rm /tmp/GPG_KEY | ||||
|     fi | ||||
| } | ||||
|  | ||||
| prepare_boot_extras(){ | ||||
|     local src="$1" dest="$2" | ||||
|     local src="$1" dest=${iso_root}/boot | ||||
|  | ||||
|     for u in intel amd;do | ||||
|         cp $src/boot/$u-ucode.img $dest/$u-ucode.img | ||||
| @@ -58,8 +24,108 @@ prepare_boot_extras(){ | ||||
|     cp $src/usr/share/licenses/common/GPL2/license.txt $dest/memtest.COPYING | ||||
| } | ||||
|  | ||||
| ##################dracut################## | ||||
|  | ||||
| prepare_initramfs_dracut(){ | ||||
|     local mnt="$1" | ||||
|     local kver=$(<"$mnt"/usr/src/linux/version) | ||||
|  | ||||
|     printf "%s\n" 'add_dracutmodules+=" dmsquash-live"' > "$mnt"/etc/dracut.conf.d/50-live.conf | ||||
|  | ||||
|     msg "Starting build: %s" "${kver}" | ||||
|     artools-chroot "$mnt" dracut -fqM /boot/initramfs.img "$kver" | ||||
|     msg "Image generation successful" | ||||
|  | ||||
|     cp "$mnt"/boot/initramfs.img "${iso_root}"/boot/initramfs-"${ARCH}".img | ||||
|  | ||||
|     prepare_boot_extras "$mnt" | ||||
| } | ||||
|  | ||||
| configure_grub_dracut(){ | ||||
|     msg "Configuring grub kernel options ..." | ||||
|     local kopts=( | ||||
|         "root=live:LABEL=${iso_label}" | ||||
|         'rd.live.squashimg=rootfs.img' | ||||
|         'rd.live.image' | ||||
|         'rootflags=auto' | ||||
|     ) | ||||
|     [[ "${PROFILE}" != 'base' ]] && kopts+=("rd.live.join=livefs.img") | ||||
|  | ||||
|     local ro_opts=() | ||||
|     local rw_opts=() | ||||
| #         'rd.writable.fsimg=1' | ||||
|  | ||||
|     sed -e "s|@kopts@|${kopts[*]}|" \ | ||||
|         -e "s|@ro_opts@|${ro_opts[*]}|" \ | ||||
|         -e "s|@rw_opts@|${rw_opts[*]}|" \ | ||||
|         -i ${iso_root}/boot/grub/kernels.cfg | ||||
| } | ||||
|  | ||||
| ############################################# | ||||
|  | ||||
| write_mkinitcpio_conf() { | ||||
|     msg2 "Writing mkinitcpio.conf ..." | ||||
|     local conf="$1/etc/mkinitcpio-artix.conf" | ||||
|     printf "%s\n" 'MODULES=(loop dm-snapshot)' > $conf | ||||
|     printf "%s\n" 'COMPRESSION="xz"' >> $conf | ||||
|     if [[ "${PROFILE}" == 'base' ]];then | ||||
|         printf "%s\n" 'HOOKS=(base udev artix_shutdown artix artix_loop_mnt | ||||
|                             artix_pxe_common artix_pxe_http artix_pxe_nbd artix_pxe_nfs | ||||
|                             artix_kms modconf block filesystems keyboard keymap)' >> $conf | ||||
|     else | ||||
|         printf "%s\n" 'HOOKS=(base udev artix_shutdown artix artix_loop_mnt | ||||
|                             artix_kms modconf block filesystems keyboard keymap)' >> $conf | ||||
|     fi | ||||
| } | ||||
|  | ||||
| prepare_initcpio(){ | ||||
|     msg2 "Copying initcpio ..." | ||||
|     local dest="$1" | ||||
|     cp /etc/initcpio/hooks/artix* $dest/etc/initcpio/hooks | ||||
|     cp /etc/initcpio/install/artix* $dest/etc/initcpio/install | ||||
|     cp /etc/initcpio/artix_shutdown $dest/etc/initcpio | ||||
| } | ||||
|  | ||||
| prepare_initramfs(){ | ||||
|     local mnt="$1" | ||||
|  | ||||
|     prepare_initcpio "$mnt" | ||||
|  | ||||
|     write_mkinitcpio_conf "$mnt" | ||||
|  | ||||
|     if [[ -n ${GPG_KEY} ]]; then | ||||
|         su ${OWNER} -c "gpg --export ${GPG_KEY} >/tmp/GPG_KEY" | ||||
|         exec 17<>/tmp/GPG_KEY | ||||
|     fi | ||||
|     local _kernel=$(<"$mnt"/usr/src/linux/version) | ||||
|     ARTIX_GNUPG_FD=${GPG_KEY:+17} artools-chroot "$mnt" \ | ||||
|         /usr/bin/mkinitcpio -k ${_kernel} \ | ||||
|         -c /etc/mkinitcpio-artix.conf \ | ||||
|         -g /boot/initramfs.img | ||||
|  | ||||
|     if [[ -n ${GPG_KEY} ]]; then | ||||
|         exec 17<&- | ||||
|     fi | ||||
|     if [[ -f /tmp/GPG_KEY ]]; then | ||||
|         rm /tmp/GPG_KEY | ||||
|     fi | ||||
|  | ||||
|     cp $mnt/boot/initramfs.img ${iso_root}/boot/initramfs-${ARCH}.img | ||||
|     prepare_boot_extras "$mnt" | ||||
| } | ||||
|  | ||||
| configure_grub(){ | ||||
|     sed -e "s|@iso_label@|${iso_label}|" -i ${iso_root}/boot/grub/kernels.cfg | ||||
|     msg "Configuring grub kernel options ..." | ||||
|     local ro_opts=() | ||||
|     local rw_opts=() | ||||
|     local kopts=("label=${iso_label}") | ||||
|  | ||||
|     [[ "${PROFILE}" != 'base' ]] && kopts+=('overlay=livefs') | ||||
|  | ||||
|     sed -e "s|@kopts@|${kopts[*]}|" \ | ||||
|         -e "s|@ro_opts@|${ro_opts[*]}|" \ | ||||
|         -e "s|@rw_opts@|${rw_opts[*]}|" \ | ||||
|         -i ${iso_root}/boot/grub/kernels.cfg | ||||
| } | ||||
|  | ||||
| prepare_grub(){ | ||||
| @@ -103,7 +169,7 @@ prepare_grub(){ | ||||
|         grub-mkfont -o ${grub}/unicode.pf2 /usr/share/fonts/misc/unifont.bdf | ||||
|     fi | ||||
|  | ||||
|     local size=4M mnt="${mnt_dir}/efiboot" efi_img="${iso_root}/efi.img" | ||||
|     local size=4M mnt="${mnt_dir}/efiboot" efi_img="${iso_root}/boot/efi.img" | ||||
|     msg2 "Creating fat image of %s ..." "${size}" | ||||
|     truncate -s ${size} "${efi_img}" | ||||
|     mkfs.fat -n ARTIX_EFI "${efi_img}" &>/dev/null | ||||
|   | ||||
							
								
								
									
										165
									
								
								lib/iso/iso.sh
									
									
									
									
									
								
							
							
						
						
									
										165
									
								
								lib/iso/iso.sh
									
									
									
									
									
								
							| @@ -13,87 +13,101 @@ | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| make_sig () { | ||||
|     local idir="$1" file="$2" | ||||
|     local file="$1" | ||||
|     msg2 "Creating signature file..." | ||||
|     cd "$idir" | ||||
|     chown "${OWNER}:$(id --group ${OWNER})" "$idir" | ||||
|     su ${OWNER} -c "gpg --detach-sign --default-key ${GPG_KEY} $file.sfs" | ||||
|     chown -R root "$idir" | ||||
|     cd ${iso_root}${live_dir} | ||||
|     chown "${OWNER}:$(id --group ${OWNER})" "${iso_root}${live_dir}" | ||||
|     su ${OWNER} -c "gpg --detach-sign --default-key ${GPG_KEY} $file" | ||||
|     chown -R root "${iso_root}${live_dir}" | ||||
|     cd ${OLDPWD} | ||||
| } | ||||
|  | ||||
| make_checksum(){ | ||||
|     local idir="$1" file="$2" | ||||
|     msg2 "Creating sha512sum ..." | ||||
|     cd $idir | ||||
|     sha512sum $file.sfs > $file.sha512 | ||||
|     local file="$1" | ||||
|     msg2 "Creating md5sum ..." | ||||
|     cd ${iso_root}${live_dir} | ||||
|     md5sum $file > $file.md5 | ||||
|     cd ${OLDPWD} | ||||
| } | ||||
|  | ||||
| make_ext_img(){ | ||||
|     local src="$1" | ||||
|     local size=32G | ||||
|     local mnt="${mnt_dir}/${src##*/}" | ||||
|     mkdir -p ${work_dir}/embed${live_dir} | ||||
|     local extimg=${work_dir}/embed${live_dir}/${src##*/}.img | ||||
|  | ||||
|     msg2 "Creating ext4 image of %s ..." "${size}" | ||||
|     truncate -s ${size} "${extimg}" | ||||
|     local ext4_args=() | ||||
|     ext4_args+=(-O ^has_journal,^resize_inode -E lazy_itable_init=0 -m 0) | ||||
|     mkfs.ext4 ${ext4_args[@]} -F "${extimg}" &>/dev/null | ||||
|     tune2fs -c 0 -i 0 "${extimg}" &> /dev/null | ||||
|     mount_img "${extimg}" "${mnt}" | ||||
|     msg2 "Copying %s ..." "${src}/" | ||||
|     cp -aT "${src}/" "${mnt}/" | ||||
|     umount_img "${mnt}" | ||||
| } | ||||
|  | ||||
| has_changed(){ | ||||
|     local src="$1" dest="$2" | ||||
|     if [[ -f "${dest}" ]]; then | ||||
|         local has_changes=$(find ${src} -newer ${dest}) | ||||
|         if [[ -n "${has_changes}" ]]; then | ||||
|             msg2 "Possible changes for %s ..." "${src}" | ||||
|             msg2 "%s" "${has_changes}" | ||||
|             msg2 "SquashFS image %s is not up to date, rebuilding..." "${dest}" | ||||
|             rm "${dest}" | ||||
|         else | ||||
|             msg2 "SquashFS image %s is up to date, skipping." "${dest}" | ||||
|             return 1 | ||||
|         fi | ||||
|     fi | ||||
| } | ||||
|  | ||||
| # $1: image path | ||||
| make_sfs() { | ||||
|     local src="$1" | ||||
|     if [[ ! -e "${src}" ]]; then | ||||
|         error "The path %s does not exist" "${src}" | ||||
|     local sfs_in="$1" | ||||
|     if [[ ! -e "${sfs_in}" ]]; then | ||||
|         error "The path %s does not exist" "${sfs_in}" | ||||
|         retrun 1 | ||||
|     fi | ||||
|     local timer=$(get_timer) dest=${iso_root}/artix/${ARCH} | ||||
|     local name=${1##*/} | ||||
|     local sfs="${dest}/${name}.sfs" | ||||
|     mkdir -p ${dest} | ||||
|     msg "Generating SquashFS image for %s" "${src}" | ||||
|     if [[ -f "${sfs}" ]]; then | ||||
|         local has_changed_dir=$(find ${src} -newer ${sfs}) | ||||
|         msg2 "Possible changes for %s ..." "${src}"  >> /tmp/buildiso.debug | ||||
|         msg2 "%s" "${has_changed_dir}" >> /tmp/buildiso.debug | ||||
|         if [[ -n "${has_changed_dir}" ]]; then | ||||
|             msg2 "SquashFS image %s is not up to date, rebuilding..." "${sfs}" | ||||
|             rm "${sfs}" | ||||
|     local timer=$(get_timer) | ||||
|  | ||||
|     mkdir -p ${iso_root}${live_dir} | ||||
|  | ||||
|     local img_name=${sfs_in##*/}.img | ||||
|     local img_file=${sfs_in}.img | ||||
|  | ||||
|     local sfs_out="${iso_root}${live_dir}/${img_name}" | ||||
|  | ||||
|     if has_changed "${sfs_in}" "${sfs_out}"; then | ||||
|  | ||||
|         msg "Generating SquashFS image for %s" "${sfs_in}" | ||||
|  | ||||
|         local mksfs_args=() | ||||
|  | ||||
|         if ${persist};then | ||||
|             make_ext_img "${sfs_in}" | ||||
|             mksfs_args+=("${work_dir}/embed") | ||||
|         else | ||||
|             msg2 "SquashFS image %s is up to date, skipping." "${sfs}" | ||||
|             return | ||||
|             mksfs_args+=("${sfs_in}") | ||||
|         fi | ||||
|  | ||||
|         mksfs_args+=("${sfs_out}") | ||||
|  | ||||
|         mksfs_args+=(-comp xz -b 256K -Xbcj x86 -noappend) | ||||
|  | ||||
|         mksquashfs "${mksfs_args[@]}" | ||||
|  | ||||
|         if ! ${use_dracut}; then | ||||
|             make_checksum "${img_name}" | ||||
|             if [[ -n ${GPG_KEY} ]];then | ||||
|                 make_sig "${img_name}" | ||||
|             fi | ||||
|         fi | ||||
|         ${persist} && rm -r "${work_dir}/embed" | ||||
|     fi | ||||
|  | ||||
|     if ${persist};then | ||||
|         local size=32G | ||||
|         local mnt="${mnt_dir}/${name}" | ||||
|         msg2 "Creating ext4 image of %s ..." "${size}" | ||||
|         truncate -s ${size} "${src}.img" | ||||
|         local ext4_args=() | ||||
|         ext4_args+=(-O ^has_journal,^resize_inode -E lazy_itable_init=0 -m 0) | ||||
|         mkfs.ext4 ${ext4_args[@]} -F "${src}.img" &>/dev/null | ||||
|         tune2fs -c 0 -i 0 "${src}.img" &> /dev/null | ||||
|         mount_img "${work_dir}/${name}.img" "${mnt}" | ||||
|         msg2 "Copying %s ..." "${src}/" | ||||
|         cp -aT "${src}/" "${mnt}/" | ||||
|         umount_img "${mnt}" | ||||
|  | ||||
|     fi | ||||
|  | ||||
|     msg2 "Creating SquashFS image, this may take some time..." | ||||
|     local mksfs_args=() | ||||
|     if ${persist};then | ||||
|         mksfs_args+=(${work_dir}/${name}.img) | ||||
|     else | ||||
|         mksfs_args+=(${src}) | ||||
|     fi | ||||
|  | ||||
|     mksfs_args+=(${sfs} -noappend) | ||||
|  | ||||
|     local highcomp="-b 256K -Xbcj x86" comp='xz' | ||||
|  | ||||
|     mksfs_args+=(-comp ${comp} ${highcomp}) | ||||
|  | ||||
|     mksquashfs "${mksfs_args[@]}" | ||||
|  | ||||
|     make_checksum "${dest}" "${name}" | ||||
|     ${persist} && rm "${src}.img" | ||||
|  | ||||
|     if [[ -n ${GPG_KEY} ]];then | ||||
|         make_sig "${dest}" "${name}" | ||||
|     fi | ||||
|  | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer_start}" | ||||
| } | ||||
|  | ||||
| @@ -124,10 +138,27 @@ assemble_iso(){ | ||||
|         -c boot.catalog \ | ||||
|         -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \ | ||||
|         -eltorito-alt-boot \ | ||||
|         -append_partition 2 0xef ${iso_root}/efi.img \ | ||||
|         -append_partition 2 0xef ${iso_root}/boot/efi.img \ | ||||
|         -e --interval:appended_partition_2:all:: -iso_mbr_part_type 0x00 \ | ||||
|         -no-emul-boot \ | ||||
|         -iso-level 3 \ | ||||
|         -o ${iso_dir}/${iso_file} \ | ||||
|         ${iso_root}/ | ||||
| } | ||||
|  | ||||
| make_iso() { | ||||
|     msg "Start [Build ISO]" | ||||
|     touch "${iso_root}/.artix" | ||||
|     make_sfs "${work_dir}/rootfs" | ||||
|     [[ -d "${work_dir}/livefs" ]] && make_sfs "${work_dir}/livefs" | ||||
|  | ||||
|     msg "Making bootable image" | ||||
|     # Sanity checks | ||||
|     [[ ! -d "${iso_root}" ]] && return 1 | ||||
|     if [[ -f "${iso_dir}/${iso_file}" ]]; then | ||||
|         msg2 "Removing existing bootable image..." | ||||
|         rm -rf "${iso_dir}/${iso_file}" | ||||
|     fi | ||||
|     assemble_iso | ||||
|     msg "Done [Build ISO]" | ||||
| } | ||||
|   | ||||
| @@ -54,27 +54,6 @@ prepare_traps(){ | ||||
| #     trap 'trap_exit USR1 "$(gettext "An unknown error has occurred. Exiting...")"' ERR | ||||
| } | ||||
|  | ||||
| # Build ISO | ||||
| make_iso() { | ||||
|     msg "Start [Build ISO]" | ||||
|     touch "${iso_root}/.artix" | ||||
|     for sfs_dir in $(find "${work_dir}" -maxdepth 1 -type d); do | ||||
|         if [[ "${sfs_dir}" != "${work_dir}" ]]; then | ||||
|             make_sfs "${sfs_dir}" | ||||
|         fi | ||||
|     done | ||||
|  | ||||
|     msg "Making bootable image" | ||||
|     # Sanity checks | ||||
|     [[ ! -d "${iso_root}" ]] && return 1 | ||||
|     if [[ -f "${iso_dir}/${iso_file}" ]]; then | ||||
|         msg2 "Removing existing bootable image..." | ||||
|         rm -rf "${iso_dir}/${iso_file}" | ||||
|     fi | ||||
|     assemble_iso | ||||
|     msg "Done [Build ISO]" | ||||
| } | ||||
|  | ||||
| copy_overlay(){ | ||||
|     local src="$1" dest="$2" | ||||
|     if [[ -e "$src" ]];then | ||||
| @@ -169,21 +148,20 @@ make_livefs() { | ||||
| make_bootfs() { | ||||
|     if [[ ! -e ${work_dir}/bootfs.lock ]]; then | ||||
|         msg "Prepare [/iso/boot]" | ||||
|         local boot="${iso_root}/boot" | ||||
|  | ||||
|         prepare_dir "${boot}" | ||||
|         prepare_dir "${iso_root}/boot" | ||||
|  | ||||
|         cp ${work_dir}/rootfs/boot/vmlinuz* ${boot}/vmlinuz-${ARCH} | ||||
|         cp ${work_dir}/rootfs/boot/vmlinuz* ${iso_root}/boot/vmlinuz-${ARCH} | ||||
|  | ||||
|         local bootfs="${work_dir}/bootfs" | ||||
|  | ||||
|         mount_overlay "${bootfs}" "${work_dir}" | ||||
|  | ||||
|         prepare_initcpio "${bootfs}" | ||||
|         prepare_initramfs "${bootfs}" | ||||
|  | ||||
|         cp ${bootfs}/boot/initramfs.img ${boot}/initramfs-${ARCH}.img | ||||
|         prepare_boot_extras "${bootfs}" "${boot}" | ||||
|         if ${use_dracut}; then | ||||
|             prepare_initramfs_dracut "${bootfs}" | ||||
|         else | ||||
|             prepare_initramfs "${bootfs}" | ||||
|         fi | ||||
|  | ||||
|         umount_overlay | ||||
|  | ||||
| @@ -202,7 +180,11 @@ make_grub(){ | ||||
|  | ||||
|         prepare_grub "${work_dir}/rootfs" "$layer" | ||||
|  | ||||
|         configure_grub | ||||
|         if ${use_dracut}; then | ||||
|             configure_grub_dracut | ||||
|         else | ||||
|             configure_grub | ||||
|         fi | ||||
|  | ||||
|         : > ${work_dir}/grub.lock | ||||
|         msg "Done [/iso/boot/grub]" | ||||
|   | ||||
| @@ -20,27 +20,21 @@ DATADIR=${DATADIR:-'@datadir@/artools'} | ||||
| LIBDIR=${LIBDIR:-'@libdir@/artools'} | ||||
| SYSCONFDIR=${SYSCONFDIR:-'@sysconfdir@/artools'} | ||||
|  | ||||
| OWNER=${SUDO_USER:-$USER} | ||||
|  | ||||
| if [[ -n $SUDO_USER ]]; then | ||||
|     eval "USER_HOME=~$SUDO_USER" | ||||
| else | ||||
|     USER_HOME=$HOME | ||||
| fi | ||||
|  | ||||
| USER_CONF_DIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}/artools" | ||||
|  | ||||
| for baselib in ${LIBDIR}/base/*.sh; do | ||||
|     . $baselib | ||||
| done | ||||
|  | ||||
| load_user_info(){ | ||||
|     OWNER=${SUDO_USER:-$USER} | ||||
|  | ||||
|     if [[ -n $SUDO_USER ]]; then | ||||
|         eval "USER_HOME=~$SUDO_USER" | ||||
|     else | ||||
|         USER_HOME=$HOME | ||||
|     fi | ||||
|  | ||||
|     XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$USER_HOME/.config}" | ||||
|  | ||||
|     USER_CONF_DIR="${XDG_CONFIG_HOME}/artools" | ||||
|  | ||||
|     prepare_dir "${USER_CONF_DIR}" | ||||
|  | ||||
|     USER_CACHE_DIR="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools" | ||||
| } | ||||
| prepare_dir "${USER_CONF_DIR}" | ||||
|  | ||||
| load_base_config(){ | ||||
|  | ||||
| @@ -50,7 +44,6 @@ load_base_config(){ | ||||
|  | ||||
|     [[ -r "$conf" ]] && . "$conf" | ||||
|  | ||||
|  | ||||
|     ARCH=$(uname -m) | ||||
|  | ||||
|     CHROOTS_DIR=${CHROOTS_DIR:-'/var/lib/artools'} | ||||
| @@ -62,6 +55,4 @@ load_base_config(){ | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_base_config "${USER_CONF_DIR}" || load_base_config "${SYSCONFDIR}" | ||||
|   | ||||
| @@ -43,6 +43,7 @@ load_pkg_config(){ | ||||
|             packages-kernel | ||||
|             packages-openrc | ||||
|             packages-runit | ||||
|             packages-s6 | ||||
|             packages-xorg | ||||
|             packages-python | ||||
|             packages-perl | ||||
|   | ||||
		Reference in New Issue
	
	Block a user