Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
55945b8975 | |||
f83cc2a4a8 | |||
6d5dbc5774 | |||
36ee26e18c | |||
0b9e18ed5b | |||
b26b6da61c | |||
e1f762cd91 |
9
Makefile
9
Makefile
@@ -27,7 +27,7 @@ BASE_LIBS = \
|
|||||||
BASE_UTIL = lib/util-base.sh
|
BASE_UTIL = lib/util-base.sh
|
||||||
|
|
||||||
BASE_DATA = \
|
BASE_DATA = \
|
||||||
$(wildcard data/base/pacman*.conf)
|
$(wildcard data/pacman/pacman*.conf)
|
||||||
|
|
||||||
PKG_CONF = \
|
PKG_CONF = \
|
||||||
data/conf/artools-pkg.conf
|
data/conf/artools-pkg.conf
|
||||||
@@ -95,7 +95,7 @@ PKG_LIBS = \
|
|||||||
PKG_UTIL = lib/util-pkg.sh
|
PKG_UTIL = lib/util-pkg.sh
|
||||||
|
|
||||||
PKG_DATA = \
|
PKG_DATA = \
|
||||||
data/pkg/makepkg.conf
|
data/pacman/makepkg.conf
|
||||||
|
|
||||||
PATCHES = \
|
PATCHES = \
|
||||||
$(wildcard data/patches/*.patch)
|
$(wildcard data/patches/*.patch)
|
||||||
@@ -116,8 +116,6 @@ ISO_LIBS = \
|
|||||||
|
|
||||||
ISO_UTIL = lib/util-iso.sh
|
ISO_UTIL = lib/util-iso.sh
|
||||||
|
|
||||||
ISO_DATA = \
|
|
||||||
data/iso/mkinitcpio.conf
|
|
||||||
|
|
||||||
DIRMODE = -dm0755
|
DIRMODE = -dm0755
|
||||||
FILEMODE = -m0644
|
FILEMODE = -m0644
|
||||||
@@ -211,9 +209,6 @@ install_iso: install_cpio
|
|||||||
install $(FILEMODE) $(ISO_UTIL) $(DESTDIR)$(LIBDIR)/$(TOOLS)
|
install $(FILEMODE) $(ISO_UTIL) $(DESTDIR)$(LIBDIR)/$(TOOLS)
|
||||||
install $(FILEMODE) $(ISO_LIBS) $(DESTDIR)$(LIBDIR)/$(TOOLS)/iso
|
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
|
install: install_base install_pkg install_iso
|
||||||
|
|
||||||
.PHONY: all clean 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=''
|
working_dir=''
|
||||||
files=()
|
files=()
|
||||||
|
|
||||||
|
mount_args=()
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "Usage: ${0##*/} [options] working-dir [run arguments]"
|
echo "Usage: ${0##*/} [options] working-dir [run arguments]"
|
||||||
echo "A wrapper around chroot. Provides support for pacman."
|
echo "A wrapper around chroot. Provides support for pacman."
|
||||||
@@ -33,16 +35,15 @@ usage() {
|
|||||||
echo ' -c <dir> Set pacman cache'
|
echo ' -c <dir> Set pacman cache'
|
||||||
echo ' -f <file> Copy file from the host to the chroot'
|
echo ' -f <file> Copy file from the host to the chroot'
|
||||||
echo ' -s Do not run setarch'
|
echo ' -s Do not run setarch'
|
||||||
echo ' -r <list> Bind mountargs ro'
|
echo ' -b <list> Bind mountargs'
|
||||||
echo ' -w <list> Bind mountargs rw'
|
echo ' List format [mntarg1:src1:dest1 ... mntargN:srcN:destN]'
|
||||||
echo ' List format [src1:target1 ... srcN:targetN]'
|
|
||||||
echo ' -h This message'
|
echo ' -h This message'
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
orig_argv=("$0" "$@")
|
orig_argv=("$0" "$@")
|
||||||
|
|
||||||
opts='hC:M:c:r:w:f:s'
|
opts='hC:M:c:b:f:s'
|
||||||
|
|
||||||
while getopts ${opts} arg; do
|
while getopts ${opts} arg; do
|
||||||
case "${arg}" in
|
case "${arg}" in
|
||||||
@@ -51,8 +52,7 @@ while getopts ${opts} arg; do
|
|||||||
c) cache_dirs+=("$OPTARG") ;;
|
c) cache_dirs+=("$OPTARG") ;;
|
||||||
f) files+=("$OPTARG") ;;
|
f) files+=("$OPTARG") ;;
|
||||||
s) nosetarch=1 ;;
|
s) nosetarch=1 ;;
|
||||||
r) bindmounts_ro=("$OPTARG") ;;
|
b) bindmounts=("$OPTARG"); mount_args+=(${bindmounts[@]}) ;;
|
||||||
w) bindmounts_rw=("$OPTARG") ;;
|
|
||||||
h|?) usage ;;
|
h|?) usage ;;
|
||||||
*) error "invalid argument '$arg'"; usage ;;
|
*) error "invalid argument '$arg'"; usage ;;
|
||||||
esac
|
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#'))
|
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
|
while read -r line; do
|
||||||
mapfile -t lines < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" \
|
mapfile -t lines < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" \
|
||||||
--repo $line Server | sed -r 's#(.*/)[^/]+/os/.+#\1$repo/os/$arch#')
|
--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"
|
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
|
local file
|
||||||
for file in "${files[@]}"; do
|
for file in "${files[@]}"; do
|
||||||
@@ -105,37 +113,30 @@ copy_hostconf () {
|
|||||||
cp -T "$file" "$working_dir$file"
|
cp -T "$file" "$working_dir$file"
|
||||||
done
|
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_extra_mount() {
|
||||||
chroot_add_resolv_conf "$1"
|
chroot_add_resolv_conf "${working_dir}"
|
||||||
chroot_mount "/etc/hosts" "$1/etc/hosts" -B
|
|
||||||
chroot_mount "${cache_dirs[0]}" "$1${cache_dirs[0]}" -B
|
|
||||||
|
|
||||||
for cache_dir in ${cache_dirs[@]:1}; do
|
for arg in ${mount_args[@]}; do
|
||||||
chroot_mount "$cache_dir" "$1${cache_dir}" -Br
|
local flag=${arg%%:*}
|
||||||
done
|
local dest=${arg##*:}
|
||||||
|
local src=${arg%:*}
|
||||||
for m in ${bindmounts_ro[@]}; do
|
src=${src#*:}
|
||||||
chroot_mount "${m%%:*}" "$1${m##*:}" -Br
|
chroot_mount "${src}" "${working_dir}${dest}" "${flag}"
|
||||||
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
|
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
sync_host_localtime(){
|
sync_host_localtime(){
|
||||||
if [[ -e /etc/localtime ]]; then
|
if [[ -e /etc/localtime ]]; then
|
||||||
cp -L /etc/localtime "$1"/etc/localtime
|
cp -L /etc/localtime "${working_dir}"/etc/localtime
|
||||||
fi
|
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}"
|
die "chroot '%s' is not at version %s. Please rebuild." "$working_dir" "${CHROOTVERSION}"
|
||||||
fi
|
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_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")
|
eval $(grep '^CARCH=' "$working_dir/etc/makepkg.conf")
|
||||||
|
|
||||||
|
@@ -14,10 +14,7 @@
|
|||||||
|
|
||||||
. @libdir@/artools/util-base.sh
|
. @libdir@/artools/util-base.sh
|
||||||
|
|
||||||
load_user_info
|
load_makepkg_config
|
||||||
|
|
||||||
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
|
|
||||||
load_vars /etc/makepkg.conf
|
|
||||||
|
|
||||||
file_to_sign="$1"
|
file_to_sign="$1"
|
||||||
|
|
||||||
|
@@ -48,12 +48,15 @@ prepare_build(){
|
|||||||
iso_label="ARTIX_$(date +%Y%m)"
|
iso_label="ARTIX_$(date +%Y%m)"
|
||||||
|
|
||||||
basestrap_args+=(-C ${pacman_conf})
|
basestrap_args+=(-C ${pacman_conf})
|
||||||
work_dir=${CHROOTS_ISO}/${PROFILE}/${ARCH}
|
work_dir=${CHROOTS_ISO}/${PROFILE}/artix
|
||||||
|
|
||||||
iso_dir="${ISO_POOL}/${PROFILE}"
|
iso_dir="${ISO_POOL}/${PROFILE}"
|
||||||
|
|
||||||
iso_root=${CHROOTS_ISO}/${PROFILE}/iso
|
iso_root=${CHROOTS_ISO}/${PROFILE}/iso
|
||||||
|
live_dir=/LiveOS
|
||||||
|
|
||||||
mnt_dir=${CHROOTS_ISO}/${PROFILE}/mnt
|
mnt_dir=${CHROOTS_ISO}/${PROFILE}/mnt
|
||||||
|
|
||||||
prepare_dir "${mnt_dir}"
|
prepare_dir "${mnt_dir}"
|
||||||
prepare_dir "${iso_dir}"
|
prepare_dir "${iso_dir}"
|
||||||
prepare_dir "${iso_root}"
|
prepare_dir "${iso_root}"
|
||||||
@@ -129,7 +132,7 @@ usage() {
|
|||||||
echo " [default: ${ISO_POOL}]"
|
echo " [default: ${ISO_POOL}]"
|
||||||
echo ' -i <name> Init system to use'
|
echo ' -i <name> Init system to use'
|
||||||
echo " [default: ${INITSYS}]"
|
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 " [default: ${GPG_KEY}]"
|
||||||
echo ' -m Set SquashFS image mode to persistence'
|
echo ' -m Set SquashFS image mode to persistence'
|
||||||
echo ' -c Disable clean work dir'
|
echo ' -c Disable clean work dir'
|
||||||
|
@@ -195,8 +195,7 @@ sync_repos(){
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
|
load_makepkg_config
|
||||||
load_vars /etc/makepkg.conf
|
|
||||||
|
|
||||||
sync=false
|
sync=false
|
||||||
sync_arch=true
|
sync_arch=true
|
||||||
|
@@ -16,22 +16,7 @@
|
|||||||
|
|
||||||
shopt -s extglob
|
shopt -s extglob
|
||||||
|
|
||||||
# Source makepkg.conf; fail if it is not found
|
load_makepkg_config
|
||||||
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
|
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
cat <<- _EOF_
|
cat <<- _EOF_
|
||||||
|
@@ -141,8 +141,7 @@ symlink_commit_pkg(){
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
|
load_makepkg_config
|
||||||
load_vars /etc/makepkg.conf
|
|
||||||
|
|
||||||
REPO_SRC='trunk'
|
REPO_SRC='trunk'
|
||||||
PACKAGE=''
|
PACKAGE=''
|
||||||
|
@@ -85,7 +85,7 @@ compare(){
|
|||||||
|
|
||||||
is_db_entry() {
|
is_db_entry() {
|
||||||
local pkgname="$1" repo="$(arch2artix $2)"
|
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
|
return 0
|
||||||
fi
|
fi
|
||||||
return 1
|
return 1
|
||||||
@@ -127,7 +127,7 @@ check_db(){
|
|||||||
update_db_cache(){
|
update_db_cache(){
|
||||||
msg "Updating database cache"
|
msg "Updating database cache"
|
||||||
for repo in "${searchrepos[@]}"; do
|
for repo in "${searchrepos[@]}"; do
|
||||||
local cachedir=${USER_CACHE_DIR}/${LINKSDBEXT}/${ARCH}/${repo}
|
local cachedir=${db_cache_dir}/${LINKSDBEXT}/${ARCH}/${repo}
|
||||||
rm -rf "$cachedir"
|
rm -rf "$cachedir"
|
||||||
mkdir -p "$cachedir"
|
mkdir -p "$cachedir"
|
||||||
msg2 "%s" "$repo"
|
msg2 "%s" "$repo"
|
||||||
@@ -140,7 +140,7 @@ update_db_cache(){
|
|||||||
query_db() {
|
query_db() {
|
||||||
for repo in "${searchrepos[@]}"; do
|
for repo in "${searchrepos[@]}"; do
|
||||||
local prefix=
|
local prefix=
|
||||||
local db=${USER_CACHE_DIR}/${LINKSDBEXT}/${ARCH}/${repo}/
|
local db=${db_cache_dir}/${LINKSDBEXT}/${ARCH}/${repo}/
|
||||||
if [[ -d ${db} ]]; then
|
if [[ -d ${db} ]]; then
|
||||||
while read -rd '' pkg; do
|
while read -rd '' pkg; do
|
||||||
read -r match
|
read -r match
|
||||||
@@ -185,8 +185,9 @@ show_version_table(){
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
|
db_cache_dir="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools"
|
||||||
load_vars /etc/makepkg.conf
|
|
||||||
|
load_makepkg_config
|
||||||
|
|
||||||
unstable=false
|
unstable=false
|
||||||
staging=true
|
staging=true
|
||||||
|
@@ -129,8 +129,7 @@ update_repo(){
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
|
load_makepkg_config
|
||||||
load_vars /etc/makepkg.conf
|
|
||||||
|
|
||||||
add_pkg=false
|
add_pkg=false
|
||||||
del_pkg=false
|
del_pkg=false
|
||||||
|
@@ -33,8 +33,7 @@ run_checkpkg=0
|
|||||||
temp_chroot=0
|
temp_chroot=0
|
||||||
run_nocheck=0
|
run_nocheck=0
|
||||||
|
|
||||||
bindmounts_ro=()
|
bindmounts=()
|
||||||
bindmounts_rw=()
|
|
||||||
|
|
||||||
copy=$USER
|
copy=$USER
|
||||||
[[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER
|
[[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER
|
||||||
@@ -147,8 +146,7 @@ install_packages() {
|
|||||||
|
|
||||||
cp -- "${install_pkgs[@]}" "$copydir/root/"
|
cp -- "${install_pkgs[@]}" "$copydir/root/"
|
||||||
chroot-run \
|
chroot-run \
|
||||||
-r "${bindmounts_ro[@]}" \
|
-b "${bindmounts[@]}" \
|
||||||
-r "${bindmounts_rw[@]}" \
|
|
||||||
"$copydir" \
|
"$copydir" \
|
||||||
bash -c 'yes y | pacman -U -- "$@"' -bash "${pkgnames[@]/#//root/}"
|
bash -c 'yes y | pacman -U -- "$@"' -bash "${pkgnames[@]/#//root/}"
|
||||||
ret=$?
|
ret=$?
|
||||||
@@ -282,13 +280,12 @@ move_products() {
|
|||||||
|
|
||||||
orig_argv=("$0" "$@")
|
orig_argv=("$0" "$@")
|
||||||
|
|
||||||
opts='hcur:I:l:nNCTD:d:U:'
|
opts='hcur:I:l:nNCTb:U:'
|
||||||
|
|
||||||
while getopts "${opts}" arg; do
|
while getopts "${opts}" arg; do
|
||||||
case "$arg" in
|
case "$arg" in
|
||||||
c) clean_first=1 ;;
|
c) clean_first=1 ;;
|
||||||
D) bindmounts_ro+=("$OPTARG") ;;
|
b) bindmounts+=("$OPTARG") ;;
|
||||||
d) bindmounts_rw+=("$OPTARG") ;;
|
|
||||||
u) update_first=1 ;;
|
u) update_first=1 ;;
|
||||||
r) passeddir="$OPTARG" ;;
|
r) passeddir="$OPTARG" ;;
|
||||||
I) install_pkgs+=("$OPTARG") ;;
|
I) install_pkgs+=("$OPTARG") ;;
|
||||||
@@ -332,16 +329,12 @@ for arg in "${@:$OPTIND}"; do
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
if [[ -n $SUDO_USER ]]; then
|
|
||||||
eval "USER_HOME=~$SUDO_USER"
|
|
||||||
else
|
|
||||||
USER_HOME=$HOME
|
|
||||||
fi
|
|
||||||
|
|
||||||
umask 0022
|
umask 0022
|
||||||
|
|
||||||
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
|
ORIG_HOME=$HOME
|
||||||
load_vars /etc/makepkg.conf
|
IFS=: read -r _ _ _ _ _ HOME _ < <(getent passwd "${SUDO_USER:-$USER}")
|
||||||
|
load_makepkg_config
|
||||||
|
HOME=$ORIG_HOME
|
||||||
|
|
||||||
# Use PKGBUILD directory if these don't exist
|
# Use PKGBUILD directory if these don't exist
|
||||||
[[ -d $PKGDEST ]] || PKGDEST=$PWD
|
[[ -d $PKGDEST ]] || PKGDEST=$PWD
|
||||||
@@ -356,11 +349,10 @@ if [[ ! -d $copydir ]] || (( clean_first )); then
|
|||||||
sync_chroot "$chrootdir" "$copydir" "$copy"
|
sync_chroot "$chrootdir" "$copydir" "$copy"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest")
|
bindmounts+=("-B:${PWD}:/startdir" "-B:${SRCDEST}:/srcdest")
|
||||||
|
|
||||||
(( update_first )) && chroot-run \
|
(( update_first )) && chroot-run \
|
||||||
-r "${bindmounts_ro[*]}" \
|
-b "${bindmounts[*]}" \
|
||||||
-w "${bindmounts_rw[*]}" \
|
|
||||||
"$copydir" \
|
"$copydir" \
|
||||||
pacman -Syuu --noconfirm
|
pacman -Syuu --noconfirm
|
||||||
|
|
||||||
@@ -381,8 +373,7 @@ download_sources
|
|||||||
prepare_chroot
|
prepare_chroot
|
||||||
|
|
||||||
if chroot-run \
|
if chroot-run \
|
||||||
-r "${bindmounts_ro[*]}" \
|
-b "${bindmounts[*]}" \
|
||||||
-w "${bindmounts_rw[*]}" \
|
|
||||||
"$copydir" \
|
"$copydir" \
|
||||||
/chrootbuild "${makepkg_args[@]}"
|
/chrootbuild "${makepkg_args[@]}"
|
||||||
then
|
then
|
||||||
|
@@ -144,6 +144,6 @@ PACKAGE="$1"/PKGBUILD; shift
|
|||||||
|
|
||||||
. "$PACKAGE"
|
. "$PACKAGE"
|
||||||
|
|
||||||
. /etc/makepkg.conf
|
load_makepkg_config
|
||||||
|
|
||||||
write_pkg_yaml
|
write_pkg_yaml
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
# possible values: openrc, runit, s6
|
# possible values: openrc, runit, s6
|
||||||
# INITSYS="openrc"
|
# INITSYS="openrc"
|
||||||
|
|
||||||
# gpg key; leave empty or commented to skip sfs signing
|
# gpg key; leave empty or commented to skip img signing
|
||||||
# GPG_KEY=""
|
# GPG_KEY=""
|
||||||
|
|
||||||
# set upload bandwidth limit in kB/s
|
# 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)
|
COMPRESSGZ=(gzip -c -f -n)
|
||||||
COMPRESSBZ2=(bzip2 -c -f)
|
COMPRESSBZ2=(bzip2 -c -f)
|
||||||
COMPRESSXZ=(xz -c -z -)
|
COMPRESSXZ=(xz -c -z -)
|
||||||
|
COMPRESSZST=(zstd -c -z -q -)
|
||||||
COMPRESSLRZ=(lrzip -q)
|
COMPRESSLRZ=(lrzip -q)
|
||||||
COMPRESSLZO=(lzop -q)
|
COMPRESSLZO=(lzop -q)
|
||||||
COMPRESSZ=(compress -c -f)
|
COMPRESSZ=(compress -c -f)
|
||||||
|
COMPRESSLZ4=(lz4 -q)
|
||||||
|
COMPRESSLZ=(lzip -c -f)
|
||||||
|
|
||||||
#########################################################################
|
#########################################################################
|
||||||
# EXTENSION DEFAULTS
|
# EXTENSION DEFAULTS
|
||||||
#########################################################################
|
#########################################################################
|
||||||
#
|
#
|
||||||
# WARNING: Do NOT modify these variables unless you know what you are
|
|
||||||
# doing.
|
|
||||||
#
|
|
||||||
PKGEXT='.pkg.tar.xz'
|
PKGEXT='.pkg.tar.xz'
|
||||||
SRCEXT='.src.tar.gz'
|
SRCEXT='.src.tar.gz'
|
||||||
|
|
@@ -16,10 +16,9 @@
|
|||||||
#GPGDir = /etc/pacman.d/gnupg/
|
#GPGDir = /etc/pacman.d/gnupg/
|
||||||
#HookDir = /etc/pacman.d/hooks/
|
#HookDir = /etc/pacman.d/hooks/
|
||||||
HoldPkg = pacman glibc
|
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
|
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
|
||||||
#CleanMethod = KeepInstalled
|
#CleanMethod = KeepInstalled
|
||||||
#UseDelta = 0.7
|
|
||||||
Architecture = auto
|
Architecture = auto
|
||||||
|
|
||||||
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
@@ -16,10 +16,9 @@
|
|||||||
#GPGDir = /etc/pacman.d/gnupg/
|
#GPGDir = /etc/pacman.d/gnupg/
|
||||||
#HookDir = /etc/pacman.d/hooks/
|
#HookDir = /etc/pacman.d/hooks/
|
||||||
HoldPkg = pacman glibc
|
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
|
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
|
||||||
#CleanMethod = KeepInstalled
|
#CleanMethod = KeepInstalled
|
||||||
#UseDelta = 0.7
|
|
||||||
Architecture = auto
|
Architecture = auto
|
||||||
|
|
||||||
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
@@ -16,10 +16,9 @@
|
|||||||
#GPGDir = /etc/pacman.d/gnupg/
|
#GPGDir = /etc/pacman.d/gnupg/
|
||||||
#HookDir = /etc/pacman.d/hooks/
|
#HookDir = /etc/pacman.d/hooks/
|
||||||
HoldPkg = pacman glibc
|
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
|
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
|
||||||
#CleanMethod = KeepInstalled
|
#CleanMethod = KeepInstalled
|
||||||
#UseDelta = 0.7
|
|
||||||
Architecture = auto
|
Architecture = auto
|
||||||
|
|
||||||
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
@@ -16,10 +16,9 @@
|
|||||||
#GPGDir = /etc/pacman.d/gnupg/
|
#GPGDir = /etc/pacman.d/gnupg/
|
||||||
#HookDir = /etc/pacman.d/hooks/
|
#HookDir = /etc/pacman.d/hooks/
|
||||||
HoldPkg = pacman glibc
|
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
|
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
|
||||||
#CleanMethod = KeepInstalled
|
#CleanMethod = KeepInstalled
|
||||||
#UseDelta = 0.7
|
|
||||||
Architecture = auto
|
Architecture = auto
|
||||||
|
|
||||||
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
@@ -16,10 +16,9 @@
|
|||||||
#GPGDir = /etc/pacman.d/gnupg/
|
#GPGDir = /etc/pacman.d/gnupg/
|
||||||
#HookDir = /etc/pacman.d/hooks/
|
#HookDir = /etc/pacman.d/hooks/
|
||||||
HoldPkg = pacman glibc
|
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
|
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
|
||||||
#CleanMethod = KeepInstalled
|
#CleanMethod = KeepInstalled
|
||||||
#UseDelta = 0.7
|
|
||||||
Architecture = auto
|
Architecture = auto
|
||||||
|
|
||||||
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
@@ -16,10 +16,9 @@
|
|||||||
#GPGDir = /etc/pacman.d/gnupg/
|
#GPGDir = /etc/pacman.d/gnupg/
|
||||||
#HookDir = /etc/pacman.d/hooks/
|
#HookDir = /etc/pacman.d/hooks/
|
||||||
HoldPkg = pacman glibc
|
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
|
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
|
||||||
#CleanMethod = KeepInstalled
|
#CleanMethod = KeepInstalled
|
||||||
#UseDelta = 0.7
|
|
||||||
Architecture = auto
|
Architecture = auto
|
||||||
|
|
||||||
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
@@ -16,10 +16,9 @@
|
|||||||
#GPGDir = /etc/pacman.d/gnupg/
|
#GPGDir = /etc/pacman.d/gnupg/
|
||||||
#HookDir = /etc/pacman.d/hooks/
|
#HookDir = /etc/pacman.d/hooks/
|
||||||
HoldPkg = pacman glibc
|
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
|
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
|
||||||
#CleanMethod = KeepInstalled
|
#CleanMethod = KeepInstalled
|
||||||
#UseDelta = 0.7
|
|
||||||
Architecture = auto
|
Architecture = auto
|
||||||
|
|
||||||
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
@@ -16,10 +16,9 @@
|
|||||||
#GPGDir = /etc/pacman.d/gnupg/
|
#GPGDir = /etc/pacman.d/gnupg/
|
||||||
#HookDir = /etc/pacman.d/hooks/
|
#HookDir = /etc/pacman.d/hooks/
|
||||||
HoldPkg = pacman glibc
|
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
|
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
|
||||||
#CleanMethod = KeepInstalled
|
#CleanMethod = KeepInstalled
|
||||||
#UseDelta = 0.7
|
|
||||||
Architecture = auto
|
Architecture = auto
|
||||||
|
|
||||||
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
# 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
|
local ro_dev ro_dev_size rw_dev
|
||||||
|
|
||||||
ro_dev=$(losetup --find --show --read-only "${img}")
|
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})
|
ro_dev_size=$(blockdev --getsz ${ro_dev})
|
||||||
|
|
||||||
if [[ "${cow_persistent}" == "P" ]]; then
|
if [[ "${cow_persistent}" == "P" ]]; then
|
||||||
if [[ -f "/run/artix/cowspace/${cow_directory}/${img_name}.cow" ]]; then
|
if [[ -f "${cow}/${cow_directory}/${img_name}.cow" ]]; then
|
||||||
msg ":: Found '/run/artix/cowspace/${cow_directory}/${img_name}.cow', using as persistent."
|
msg ":: Found '${cow}/${cow_directory}/${img_name}.cow', using as persistent."
|
||||||
else
|
else
|
||||||
msg ":: Creating '/run/artix/cowspace/${cow_directory}/${img_name}.cow' as persistent."
|
msg ":: Creating '${cow}/${cow_directory}/${img_name}.cow' as persistent."
|
||||||
truncate -s "${cow_spacesize}" "/run/artix/cowspace/${cow_directory}/${img_name}.cow"
|
truncate -s "${cow_spacesize}" "${cow}/${cow_directory}/${img_name}.cow"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if [[ -f "/run/artix/cowspace/${cow_directory}/${img_name}.cow" ]]; then
|
if [[ -f "${cow}/${cow_directory}/${img_name}.cow" ]]; then
|
||||||
msg ":: Found '/run/artix/cowspace/${cow_directory}/${img_name}.cow' but non-persistent requested, removing."
|
msg ":: Found '${cow}/${cow_directory}/${img_name}.cow' but non-persistent requested, removing."
|
||||||
rm -f "/run/artix/cowspace/${cow_directory}/${img_name}.cow"
|
rm -f "${cow}/${cow_directory}/${img_name}.cow"
|
||||||
fi
|
fi
|
||||||
msg ":: Creating '/run/artix/cowspace/${cow_directory}/${img_name}.cow' as non-persistent."
|
msg ":: Creating '${cow}/${cow_directory}/${img_name}.cow' as non-persistent."
|
||||||
truncate -s "${cow_spacesize}" "/run/artix/cowspace/${cow_directory}/${img_name}.cow"
|
truncate -s "${cow_spacesize}" "${cow}/${cow_directory}/${img_name}.cow"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rw_dev=$(losetup --find --show "/run/artix/cowspace/${cow_directory}/${img_name}.cow")
|
rw_dev=$(losetup --find --show "${cow}/${cow_directory}/${img_name}.cow")
|
||||||
echo ${rw_dev} >> /run/artix/used_block_devices
|
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}"
|
dmsetup create ${dm_snap_name} --table "0 ${ro_dev_size} snapshot ${ro_dev} ${rw_dev} ${cow_persistent} ${cow_chunksize}"
|
||||||
|
|
||||||
if [[ "${cow_persistent}" != "P" ]]; then
|
if [[ "${cow_persistent}" != "P" ]]; then
|
||||||
rm -f "/run/artix/cowspace/${cow_directory}/${img_name}.cow"
|
rm -f "${cow}/${cow_directory}/${img_name}.cow"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_mnt_dev "/dev/mapper/${dm_snap_name}" "${mnt}" "-w" "defaults"
|
_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
|
# args: source, newroot, mountpoint
|
||||||
@@ -45,8 +45,8 @@ _mnt_overlayfs() {
|
|||||||
local src="${1}"
|
local src="${1}"
|
||||||
local newroot="${2}"
|
local newroot="${2}"
|
||||||
local mnt="${3}"
|
local mnt="${3}"
|
||||||
local work_dir="/run/artix/overlay_root/work"
|
local work_dir="${overlay_root}/work"
|
||||||
local upper_dir="/run/artix/overlay_root/upper"
|
local upper_dir="${overlay_root}/upper"
|
||||||
|
|
||||||
mkdir -p "${upper_dir}" "${work_dir}"
|
mkdir -p "${upper_dir}" "${work_dir}"
|
||||||
|
|
||||||
@@ -63,15 +63,15 @@ _mnt_sfs() {
|
|||||||
|
|
||||||
if [[ "${copytoram}" == "y" ]]; then
|
if [[ "${copytoram}" == "y" ]]; then
|
||||||
msg -n ":: Copying squashfs image to RAM..."
|
msg -n ":: Copying squashfs image to RAM..."
|
||||||
if ! "${oper}" "${img}" "/run/artix/copytoram/${img_fullname}" ; then
|
if ! "${oper}" "${img}" "${cp2ram}/${img_fullname}" ; then
|
||||||
echo "ERROR: while copy '${img}' to '/run/artix/copytoram/${img_fullname}'"
|
echo "ERROR: while copy '${img}' to '${cp2ram}/${img_fullname}'"
|
||||||
launch_interactive_shell
|
launch_interactive_shell
|
||||||
fi
|
fi
|
||||||
img="/run/artix/copytoram/${img_fullname}"
|
img="${cp2ram}/${img_fullname}"
|
||||||
msg "done."
|
msg "done."
|
||||||
fi
|
fi
|
||||||
sfs_dev=$(losetup --find --show --read-only "${img}")
|
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"
|
_mnt_dev "${sfs_dev}" "${mnt}" "-r" "defaults"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,8 +105,8 @@ _mnt_dev() {
|
|||||||
|
|
||||||
_verify_checksum() {
|
_verify_checksum() {
|
||||||
local _status
|
local _status
|
||||||
cd "/run/artix/bootmnt/${artixbasedir}/${arch}"
|
cd "${bootmnt}/${root}"
|
||||||
sha512sum -c $1.sha512 > /tmp/checksum.log 2>&1
|
sha512sum -c $1.img.sha512 > /tmp/checksum.log 2>&1
|
||||||
_status=$?
|
_status=$?
|
||||||
cd "${OLDPWD}"
|
cd "${OLDPWD}"
|
||||||
return ${_status}
|
return ${_status}
|
||||||
@@ -114,20 +114,19 @@ _verify_checksum() {
|
|||||||
|
|
||||||
_verify_signature() {
|
_verify_signature() {
|
||||||
local _status
|
local _status
|
||||||
cd "/run/artix/bootmnt/${artixbasedir}/${arch}"
|
cd "${bootmnt}/${root}"
|
||||||
gpg --homedir /gpg --status-fd 1 --verify $1.sfs.sig 2>/dev/null | grep -qE '^\[GNUPG:\] GOODSIG'
|
gpg --homedir /gpg --status-fd 1 --verify $1.img.sig 2>/dev/null | grep -qE '^\[GNUPG:\] GOODSIG'
|
||||||
_status=$?
|
_status=$?
|
||||||
cd "${OLDPWD}"
|
cd "${OLDPWD}"
|
||||||
return ${_status}
|
return ${_status}
|
||||||
}
|
}
|
||||||
|
|
||||||
run_hook() {
|
run_hook() {
|
||||||
[[ -z "${arch}" ]] && arch="$(uname -m)"
|
|
||||||
[[ -z "${copytoram_size}" ]] && copytoram_size="75%"
|
[[ -z "${copytoram_size}" ]] && copytoram_size="75%"
|
||||||
[[ -z "${artixbasedir}" ]] && artixbasedir="artix"
|
[[ -z "${root}" ]] && root="LiveOS"
|
||||||
|
|
||||||
[[ -z "${dm_snap_prefix}" ]] && dm_snap_prefix="arch"
|
[[ -z "${dm_snap_prefix}" ]] && dm_snap_prefix="artix"
|
||||||
[[ -z "${artixdevice}" ]] && artixdevice="/dev/disk/by-label/${artixlabel}"
|
[[ -z "${artixdevice}" ]] && artixdevice="/dev/disk/by-label/${label}"
|
||||||
[[ -z "${cow_spacesize}" ]] && cow_spacesize="256M"
|
[[ -z "${cow_spacesize}" ]] && cow_spacesize="256M"
|
||||||
[[ -z "${overlay_root_size}" ]] && overlay_root_size="75%"
|
[[ -z "${overlay_root_size}" ]] && overlay_root_size="75%"
|
||||||
|
|
||||||
@@ -141,30 +140,23 @@ run_hook() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
[[ -z "${cow_flags}" ]] && cow_flags="defaults"
|
[[ -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 "${cow_chunksize}" ]] && cow_chunksize="8"
|
||||||
|
|
||||||
# set mount handler for artix
|
# set mount handler for artix
|
||||||
mount_handler="artix_mount_handler"
|
mount_handler="artix_mount_handler"
|
||||||
|
|
||||||
|
lower_dir=''
|
||||||
|
live_root="/run/artix"
|
||||||
|
overlay_root="${live_root}/overlay_root"
|
||||||
|
cow="${live_root}/cowspace"
|
||||||
|
bootmnt="${live_root}/bootmnt"
|
||||||
|
cp2ram="${live_root}/copytoram"
|
||||||
}
|
}
|
||||||
|
|
||||||
# This function is called normally from init script, but it can be called
|
_check_sum() {
|
||||||
# as chain from other mount handlers.
|
local fs="$1"
|
||||||
# args: /path/to/newroot
|
if [[ -f "${bootmnt}/${root}/${fs}.img" ]]; then
|
||||||
artix_mount_handler() {
|
if [[ -f "${bootmnt}/${root}/${fs}.img.sha512" ]]; then
|
||||||
local newroot="${1}"
|
|
||||||
|
|
||||||
if ! mountpoint -q "/run/artix/bootmnt"; then
|
|
||||||
_mnt_dev "${artixdevice}" "/run/artix/bootmnt" "-r" "defaults"
|
|
||||||
if [[ "${copytoram}" != "y" ]]; then
|
|
||||||
echo $(readlink -f ${artixdevice}) >> /run/artix/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..."
|
msg -n ":: Self-test requested, please wait..."
|
||||||
if _verify_checksum "${fs}"; then
|
if _verify_checksum "${fs}"; then
|
||||||
msg "done. Checksum is OK, continue booting."
|
msg "done. Checksum is OK, continue booting."
|
||||||
@@ -174,17 +166,16 @@ artix_mount_handler() {
|
|||||||
launch_interactive_shell
|
launch_interactive_shell
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "ERROR: checksum=y option specified but ${artixbasedir}/${arch}/${fs}.sha512 not found"
|
echo "ERROR: checksum=y option specified but ${root}/${fs}.img.sha512 not found"
|
||||||
launch_interactive_shell
|
launch_interactive_shell
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
}
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${verify}" == "y" ]]; then
|
_check_sig() {
|
||||||
for fs in rootfs livefs;do
|
|
||||||
if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs" ]]; then
|
if [[ -f "${bootmnt}/${root}/${fs}.img" ]]; then
|
||||||
if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs.sig" ]]; then
|
if [[ -f "${bootmnt}/${root}/${fs}.img.sig" ]]; then
|
||||||
msg -n ":: Signature verification requested, please wait..."
|
msg -n ":: Signature verification requested, please wait..."
|
||||||
if _verify_signature "${fs}"; then
|
if _verify_signature "${fs}"; then
|
||||||
msg "done. Signature is OK, continue booting."
|
msg "done. Signature is OK, continue booting."
|
||||||
@@ -193,57 +184,90 @@ artix_mount_handler() {
|
|||||||
launch_interactive_shell
|
launch_interactive_shell
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "ERROR: verify=y option specified but ${artixbasedir}/${arch}/${fs}.sfs.sig not found"
|
echo "ERROR: verify=y option specified but ${root}/${fs}.img.sig not found"
|
||||||
launch_interactive_shell
|
launch_interactive_shell
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
}
|
||||||
|
|
||||||
|
_gen_arg() {
|
||||||
|
local arg="$1"
|
||||||
|
echo "${lower_dir:-}${lower_dir:+:}${arg}"
|
||||||
|
}
|
||||||
|
|
||||||
|
_mount_root_overlay() {
|
||||||
|
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 "${bootmnt}"; then
|
||||||
|
_mnt_dev "${artixdevice}" "${bootmnt}" "-r" "defaults"
|
||||||
|
if [[ "${copytoram}" != "y" ]]; then
|
||||||
|
echo $(readlink -f ${artixdevice}) >> ${live_root}/used_block_devices
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
for fs in rootfs livefs; do
|
||||||
|
if [[ "${checksum}" == "y" ]]; then
|
||||||
|
_check_sum "${fs}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${verify}" == "y" ]]; then
|
||||||
|
_check_sig "${fs}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
if [[ "${copytoram}" == "y" ]]; then
|
if [[ "${copytoram}" == "y" ]]; then
|
||||||
msg ":: Mounting /run/artix/copytoram (tmpfs) filesystem, size=${copytoram_size}"
|
msg ":: Mounting ${cp2ram} (tmpfs) filesystem, size=${copytoram_size}"
|
||||||
mkdir -p /run/artix/copytoram
|
mkdir -p ${cp2ram}
|
||||||
mount -t tmpfs -o "size=${copytoram_size}",mode=0755 copytoram /run/artix/copytoram
|
mount -t tmpfs -o "size=${copytoram_size}",mode=0755 copytoram ${cp2ram}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n "${cow_device}" ]]; then
|
if [[ -n "${cow_device}" ]]; then
|
||||||
_mnt_dev "${cow_device}" "/run/artix/cowspace" "-r" "${cow_flags}"
|
_mnt_dev "${cow_device}" "${cow}" "-r" "${cow_flags}"
|
||||||
echo $(readlink -f ${cow_device}) >> /run/artix/used_block_devices
|
echo $(readlink -f ${cow_device}) >> ${live_root}/used_block_devices
|
||||||
mount -o remount,rw "/run/artix/cowspace"
|
mount -o remount,rw "${cow}"
|
||||||
else
|
else
|
||||||
msg ":: Mounting /run/artix/cowspace (tmpfs) filesystem, size=${cow_spacesize}..."
|
msg ":: Mounting ${cow} (tmpfs) filesystem, size=${cow_spacesize}..."
|
||||||
mkdir -p /run/artix/cowspace
|
mkdir -p ${cow}
|
||||||
mount -t tmpfs -o "size=${cow_spacesize}",mode=0755 cowspace /run/artix/cowspace
|
mount -t tmpfs -o "size=${cow_spacesize}",mode=0755 cowspace ${cow}
|
||||||
fi
|
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}..."
|
msg -n ":: Mounting overlay root (tmpfs) filesystem, size=${overlay_root_size}..."
|
||||||
mkdir -p /run/artix/overlay_root
|
mkdir -p ${overlay_root}
|
||||||
mount -t tmpfs -o "size=${overlay_root_size}",mode=0755 overlay_root /run/artix/overlay_root
|
mount -t tmpfs -o "size=${overlay_root_size}",mode=0755 overlay_root ${overlay_root}
|
||||||
|
|
||||||
local src="/run/artix/bootmnt/${artixbasedir}/${arch}"
|
for fs in livefs rootfs; do
|
||||||
local dest_sfs="/run/artix/sfs" dest_img="/run/artix/img"
|
_mount_root_overlay "${fs}"
|
||||||
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
|
done
|
||||||
|
|
||||||
_mnt_overlayfs "${lower_dir}" "${newroot}" "/"
|
_mnt_overlayfs "${lower_dir}" "${newroot}" "/"
|
||||||
|
|
||||||
if [[ "${copytoram}" == "y" ]]; then
|
if [[ "${copytoram}" == "y" ]]; then
|
||||||
umount -d /run/artix/bootmnt
|
umount -d ${bootmnt}
|
||||||
mkdir -p /run/artix/bootmnt/${artixbasedir}/${arch}
|
mkdir -p ${bootmnt}/${root}
|
||||||
mount -o bind /run/artix/copytoram /run/artix/bootmnt/${artixbasedir}/${arch}
|
mount -o bind ${cp2ram} ${bootmnt}/${root}
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -6,6 +6,7 @@ run_hook () {
|
|||||||
if [[ -n "${img_dev}" && -n "${img_loop}" ]]; then
|
if [[ -n "${img_dev}" && -n "${img_loop}" ]]; then
|
||||||
mount_handler="artix_loop_mount_handler"
|
mount_handler="artix_loop_mount_handler"
|
||||||
fi
|
fi
|
||||||
|
live_root="/run/artix"
|
||||||
}
|
}
|
||||||
|
|
||||||
artix_loop_mount_handler () {
|
artix_loop_mount_handler () {
|
||||||
@@ -14,15 +15,15 @@ artix_loop_mount_handler () {
|
|||||||
local _dev_loop
|
local _dev_loop
|
||||||
|
|
||||||
msg ":: Setup a loop device from ${img_loop} located at device ${img_dev}"
|
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
|
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
|
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}"
|
artixdevice="${_dev_loop}"
|
||||||
else
|
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
|
launch_interactive_shell
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -30,6 +31,6 @@ artix_loop_mount_handler () {
|
|||||||
|
|
||||||
if [[ "${copytoram}" == "y" ]]; then
|
if [[ "${copytoram}" == "y" ]]; then
|
||||||
losetup -d ${_dev_loop} 2>/dev/null
|
losetup -d ${_dev_loop} 2>/dev/null
|
||||||
umount /run/artix/img_dev
|
umount ${live_root}/img_dev
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@@ -17,13 +17,13 @@ run_hook() {
|
|||||||
# Fetch a file with CURL
|
# Fetch a file with CURL
|
||||||
#
|
#
|
||||||
# $1 URL
|
# $1 URL
|
||||||
# $2 Destination directory inside httpspace/${artixbasedir}
|
# $2 Destination directory inside httpspace/${root}
|
||||||
_curl_get() {
|
_curl_get() {
|
||||||
local _url="${1}"
|
local _url="${1}"
|
||||||
local _dst="${2}"
|
local _dst="${2}"
|
||||||
|
|
||||||
msg ":: Downloading '${_url}'"
|
msg ":: Downloading '${_url}'"
|
||||||
if ! curl -L -f -o "/run/artix/httpspace/${artixbasedir}${_dst}/${_url##*/}" --create-dirs "${_url}"; then
|
if ! curl -L -f -o "/run/artix/httpspace/${root}${_dst}/${_url##*/}" --create-dirs "${_url}"; then
|
||||||
echo "ERROR: Downloading '${_url}'"
|
echo "ERROR: Downloading '${_url}'"
|
||||||
echo " Falling back to interactive prompt"
|
echo " Falling back to interactive prompt"
|
||||||
echo " You can try to fix the problem manually, log out when you are finished"
|
echo " You can try to fix the problem manually, log out when you are finished"
|
||||||
@@ -38,7 +38,7 @@ artix_pxe_http_mount_handler () {
|
|||||||
mkdir -p "/run/artix/httpspace"
|
mkdir -p "/run/artix/httpspace"
|
||||||
mount -t tmpfs -o size="${artix_http_spc}",mode=0755 httpspace "/run/artix/httpspace"
|
mount -t tmpfs -o size="${artix_http_spc}",mode=0755 httpspace "/run/artix/httpspace"
|
||||||
|
|
||||||
local _src=${artix_http_srv}${artixbasedir}/${arch}
|
local _src=${artix_http_srv}${root}/${arch}
|
||||||
|
|
||||||
for sfs in livefs rootfs;do
|
for sfs in livefs rootfs;do
|
||||||
if [[ ! -z "$( curl -s --head "${_src}/${sfs}.sfs" | grep "OK" )" ]]; then
|
if [[ ! -z "$( curl -s --head "${_src}/${sfs}.sfs" | grep "OK" )" ]]; then
|
||||||
|
@@ -5,8 +5,7 @@ mkdir /oldrun
|
|||||||
mount -n --move /oldroot/run /oldrun
|
mount -n --move /oldroot/run /oldrun
|
||||||
|
|
||||||
# Unmount all mounts now.
|
# Unmount all mounts now.
|
||||||
#umount $(mount | awk '$3 ~/^\/oldroot/ {print $3}' | sort -r)
|
umount $(mount | awk '$3 ~/^\/oldroot/ {print $3}' | sort -r)
|
||||||
umount $(mount | awk '$3 ~/^\/oldroot/ {if($3 != "/run/artix/bootmnt") print $3}' | sort -r)
|
|
||||||
|
|
||||||
# Remove all dm-snapshot devices.
|
# Remove all dm-snapshot devices.
|
||||||
dmsetup remove_all
|
dmsetup remove_all
|
||||||
|
@@ -25,18 +25,6 @@ show_elapsed_time(){
|
|||||||
info "Time %s: %s minutes" "$1" "$(elapsed_time $2)"
|
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(){
|
prepare_dir(){
|
||||||
[[ ! -d $1 ]] && mkdir -p $1
|
[[ ! -d $1 ]] && mkdir -p $1
|
||||||
}
|
}
|
||||||
|
@@ -139,6 +139,21 @@ write_postcfg(){
|
|||||||
printf '%s' "${yaml}"
|
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/artix/bootmnt/LiveOS/rootfs.img"')
|
||||||
|
# yaml+=$(write_yaml_map 4 'sourcefs' '"ext4"')
|
||||||
|
# else
|
||||||
|
yaml+=$(write_yaml_seq_map 2 'source' '"/run/artix/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(){
|
configure_calamares(){
|
||||||
local mods="$1/etc/calamares/modules"
|
local mods="$1/etc/calamares/modules"
|
||||||
if [[ -d "$mods" ]];then
|
if [[ -d "$mods" ]];then
|
||||||
@@ -146,6 +161,7 @@ configure_calamares(){
|
|||||||
write_users_conf > "$mods"/users.conf
|
write_users_conf > "$mods"/users.conf
|
||||||
write_services_"${INITSYS}"_conf "$mods"
|
write_services_"${INITSYS}"_conf "$mods"
|
||||||
write_postcfg > "$mods"/postcfg.conf
|
write_postcfg > "$mods"/postcfg.conf
|
||||||
|
write_unpackfs > "$mods"/unpackfs.conf
|
||||||
sed -e "s|services-openrc|services-${INITSYS}|" \
|
sed -e "s|services-openrc|services-${INITSYS}|" \
|
||||||
-i "$1"/etc/calamares/settings.conf
|
-i "$1"/etc/calamares/settings.conf
|
||||||
fi
|
fi
|
||||||
|
@@ -12,21 +12,30 @@
|
|||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
|
write_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(){
|
prepare_initcpio(){
|
||||||
msg2 "Copying initcpio ..."
|
msg2 "Copying initcpio ..."
|
||||||
local dest="$1"
|
local dest="$1"
|
||||||
cp /etc/initcpio/hooks/artix* $dest/etc/initcpio/hooks
|
cp /etc/initcpio/hooks/artix* $dest/etc/initcpio/hooks
|
||||||
cp /etc/initcpio/install/artix* $dest/etc/initcpio/install
|
cp /etc/initcpio/install/artix* $dest/etc/initcpio/install
|
||||||
cp /etc/initcpio/artix_shutdown $dest/etc/initcpio
|
cp /etc/initcpio/artix_shutdown $dest/etc/initcpio
|
||||||
|
|
||||||
|
msg2 "Writing mkinitcpio.conf ..."
|
||||||
|
write_mkinitcpio_conf "$dest"
|
||||||
}
|
}
|
||||||
|
|
||||||
prepare_initramfs(){
|
prepare_initramfs(){
|
||||||
local mnt="$1"
|
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
|
if [[ -n ${GPG_KEY} ]]; then
|
||||||
su ${OWNER} -c "gpg --export ${GPG_KEY} >/tmp/GPG_KEY"
|
su ${OWNER} -c "gpg --export ${GPG_KEY} >/tmp/GPG_KEY"
|
||||||
@@ -59,7 +68,9 @@ prepare_boot_extras(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
configure_grub(){
|
configure_grub(){
|
||||||
sed -e "s|@iso_label@|${iso_label}|" -i ${iso_root}/boot/grub/kernels.cfg
|
local kopts="root=LiveOS label=${iso_label}"
|
||||||
|
local popts=''
|
||||||
|
sed -e "s|@kopts@|${kopts}|" -e "s|@popts@|${popts}|" -i ${iso_root}/boot/grub/kernels.cfg
|
||||||
}
|
}
|
||||||
|
|
||||||
prepare_grub(){
|
prepare_grub(){
|
||||||
@@ -103,7 +114,7 @@ prepare_grub(){
|
|||||||
grub-mkfont -o ${grub}/unicode.pf2 /usr/share/fonts/misc/unifont.bdf
|
grub-mkfont -o ${grub}/unicode.pf2 /usr/share/fonts/misc/unifont.bdf
|
||||||
fi
|
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}"
|
msg2 "Creating fat image of %s ..." "${size}"
|
||||||
truncate -s ${size} "${efi_img}"
|
truncate -s ${size} "${efi_img}"
|
||||||
mkfs.fat -n ARTIX_EFI "${efi_img}" &>/dev/null
|
mkfs.fat -n ARTIX_EFI "${efi_img}" &>/dev/null
|
||||||
|
137
lib/iso/iso.sh
137
lib/iso/iso.sh
@@ -13,87 +13,101 @@
|
|||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
make_sig () {
|
make_sig () {
|
||||||
local idir="$1" file="$2"
|
local file="$1"
|
||||||
msg2 "Creating signature file..."
|
msg2 "Creating signature file..."
|
||||||
cd "$idir"
|
cd ${iso_root}${live_dir}
|
||||||
chown "${OWNER}:$(id --group ${OWNER})" "$idir"
|
chown "${OWNER}:$(id --group ${OWNER})" "${iso_root}${live_dir}"
|
||||||
su ${OWNER} -c "gpg --detach-sign --default-key ${GPG_KEY} $file.sfs"
|
su ${OWNER} -c "gpg --detach-sign --default-key ${GPG_KEY} $file"
|
||||||
chown -R root "$idir"
|
chown -R root "${iso_root}${live_dir}"
|
||||||
cd ${OLDPWD}
|
cd ${OLDPWD}
|
||||||
}
|
}
|
||||||
|
|
||||||
make_checksum(){
|
make_checksum(){
|
||||||
local idir="$1" file="$2"
|
local file="$1"
|
||||||
msg2 "Creating sha512sum ..."
|
msg2 "Creating sha512sum ..."
|
||||||
cd $idir
|
cd ${iso_root}${live_dir}
|
||||||
sha512sum $file.sfs > $file.sha512
|
sha512sum $file > $file.sha512
|
||||||
cd ${OLDPWD}
|
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
|
# $1: image path
|
||||||
make_sfs() {
|
make_sfs() {
|
||||||
local src="$1"
|
local sfs_in="$1"
|
||||||
if [[ ! -e "${src}" ]]; then
|
if [[ ! -e "${sfs_in}" ]]; then
|
||||||
error "The path %s does not exist" "${src}"
|
error "The path %s does not exist" "${sfs_in}"
|
||||||
retrun 1
|
retrun 1
|
||||||
fi
|
fi
|
||||||
local timer=$(get_timer) dest=${iso_root}/artix/${ARCH}
|
local timer=$(get_timer)
|
||||||
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}"
|
|
||||||
else
|
|
||||||
msg2 "SquashFS image %s is up to date, skipping." "${sfs}"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ${persist};then
|
mkdir -p ${iso_root}${live_dir}
|
||||||
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
|
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}"
|
||||||
|
|
||||||
msg2 "Creating SquashFS image, this may take some time..."
|
|
||||||
local mksfs_args=()
|
local mksfs_args=()
|
||||||
|
|
||||||
if ${persist};then
|
if ${persist};then
|
||||||
mksfs_args+=(${work_dir}/${name}.img)
|
make_ext_img "${sfs_in}"
|
||||||
|
mksfs_args+=("${work_dir}/embed")
|
||||||
else
|
else
|
||||||
mksfs_args+=(${src})
|
mksfs_args+=("${sfs_in}")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mksfs_args+=(${sfs} -noappend)
|
mksfs_args+=("${sfs_out}")
|
||||||
|
|
||||||
local highcomp="-b 256K -Xbcj x86" comp='xz'
|
mksfs_args+=(-comp xz -b 256K -Xbcj x86 -noappend)
|
||||||
|
|
||||||
mksfs_args+=(-comp ${comp} ${highcomp})
|
|
||||||
|
|
||||||
mksquashfs "${mksfs_args[@]}"
|
mksquashfs "${mksfs_args[@]}"
|
||||||
|
|
||||||
make_checksum "${dest}" "${name}"
|
make_checksum "${img_name}"
|
||||||
${persist} && rm "${src}.img"
|
${persist} && rm -r "${work_dir}/embed"
|
||||||
|
|
||||||
if [[ -n ${GPG_KEY} ]];then
|
if [[ -n ${GPG_KEY} ]];then
|
||||||
make_sig "${dest}" "${name}"
|
make_sig "${img_name}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
show_elapsed_time "${FUNCNAME}" "${timer_start}"
|
show_elapsed_time "${FUNCNAME}" "${timer_start}"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,10 +138,27 @@ assemble_iso(){
|
|||||||
-c boot.catalog \
|
-c boot.catalog \
|
||||||
-no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \
|
-no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \
|
||||||
-eltorito-alt-boot \
|
-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 \
|
-e --interval:appended_partition_2:all:: -iso_mbr_part_type 0x00 \
|
||||||
-no-emul-boot \
|
-no-emul-boot \
|
||||||
-iso-level 3 \
|
-iso-level 3 \
|
||||||
-o ${iso_dir}/${iso_file} \
|
-o ${iso_dir}/${iso_file} \
|
||||||
${iso_root}/
|
${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
|
# 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(){
|
copy_overlay(){
|
||||||
local src="$1" dest="$2"
|
local src="$1" dest="$2"
|
||||||
if [[ -e "$src" ]];then
|
if [[ -e "$src" ]];then
|
||||||
|
@@ -20,27 +20,21 @@ DATADIR=${DATADIR:-'@datadir@/artools'}
|
|||||||
LIBDIR=${LIBDIR:-'@libdir@/artools'}
|
LIBDIR=${LIBDIR:-'@libdir@/artools'}
|
||||||
SYSCONFDIR=${SYSCONFDIR:-'@sysconfdir@/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
|
for baselib in ${LIBDIR}/base/*.sh; do
|
||||||
. $baselib
|
. $baselib
|
||||||
done
|
done
|
||||||
|
|
||||||
load_user_info(){
|
prepare_dir "${USER_CONF_DIR}"
|
||||||
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"
|
|
||||||
}
|
|
||||||
|
|
||||||
load_base_config(){
|
load_base_config(){
|
||||||
|
|
||||||
@@ -50,7 +44,6 @@ load_base_config(){
|
|||||||
|
|
||||||
[[ -r "$conf" ]] && . "$conf"
|
[[ -r "$conf" ]] && . "$conf"
|
||||||
|
|
||||||
|
|
||||||
ARCH=$(uname -m)
|
ARCH=$(uname -m)
|
||||||
|
|
||||||
CHROOTS_DIR=${CHROOTS_DIR:-'/var/lib/artools'}
|
CHROOTS_DIR=${CHROOTS_DIR:-'/var/lib/artools'}
|
||||||
@@ -62,6 +55,4 @@ load_base_config(){
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
load_user_info
|
|
||||||
|
|
||||||
load_base_config "${USER_CONF_DIR}" || load_base_config "${SYSCONFDIR}"
|
load_base_config "${USER_CONF_DIR}" || load_base_config "${SYSCONFDIR}"
|
||||||
|
@@ -43,6 +43,7 @@ load_pkg_config(){
|
|||||||
packages-kernel
|
packages-kernel
|
||||||
packages-openrc
|
packages-openrc
|
||||||
packages-runit
|
packages-runit
|
||||||
|
packages-s6
|
||||||
packages-xorg
|
packages-xorg
|
||||||
packages-python
|
packages-python
|
||||||
packages-perl
|
packages-perl
|
||||||
|
Reference in New Issue
Block a user