forked from artix/artools
Compare commits
22 Commits
Author | SHA1 | Date | |
---|---|---|---|
5902f987cc | |||
bfa888251e | |||
0ecfa1a0f6 | |||
e60180ebdb | |||
20b65d06c8 | |||
c7728c2e5b | |||
a0ca1ab3a4 | |||
911a0fff36 | |||
f80c51e8d3 | |||
1e948b3ef5 | |||
bf0a9bc7fc | |||
a4a690951c | |||
e05765269e | |||
3df364189b | |||
974df38738 | |||
7b831d8867 | |||
7bf4dff1a1 | |||
529e73e2ab | |||
7be420a24f | |||
cd76f7d3cf | |||
918b95db58 | |||
77c464d603 |
2
Makefile
2
Makefile
@@ -1,4 +1,4 @@
|
|||||||
VERSION=0.16
|
VERSION=0.17
|
||||||
|
|
||||||
CHROOT_VERSION=0.10
|
CHROOT_VERSION=0.10
|
||||||
|
|
||||||
|
@@ -46,6 +46,7 @@ newroot=/mnt
|
|||||||
hostcache=0
|
hostcache=0
|
||||||
copykeyring=1
|
copykeyring=1
|
||||||
copymirrorlist=1
|
copymirrorlist=1
|
||||||
|
pacmode=-Sy
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "usage: ${0##*/} [options] root [packages...]"
|
echo "usage: ${0##*/} [options] root [packages...]"
|
||||||
@@ -54,6 +55,7 @@ usage() {
|
|||||||
echo " -G Avoid copying the host's pacman keyring to the target"
|
echo " -G Avoid copying the host's pacman keyring to the target"
|
||||||
echo " -i Avoid auto-confirmation of package selections"
|
echo " -i Avoid auto-confirmation of package selections"
|
||||||
echo " -M Avoid copying the host's mirrorlist to the target"
|
echo " -M Avoid copying the host's mirrorlist to the target"
|
||||||
|
echo ' -U Use pacman -U to install packages'
|
||||||
echo " -h Print this help message"
|
echo " -h Print this help message"
|
||||||
echo ''
|
echo ''
|
||||||
echo ' basestrap installs packages to the specified new root directory.'
|
echo ' basestrap installs packages to the specified new root directory.'
|
||||||
@@ -65,7 +67,7 @@ usage() {
|
|||||||
|
|
||||||
orig_argv=("$0" "$@")
|
orig_argv=("$0" "$@")
|
||||||
|
|
||||||
opts=':C:cGiM'
|
opts=':C:cGiMU'
|
||||||
|
|
||||||
while getopts ${opts} arg; do
|
while getopts ${opts} arg; do
|
||||||
case "${arg}" in
|
case "${arg}" in
|
||||||
@@ -74,6 +76,7 @@ while getopts ${opts} arg; do
|
|||||||
i) interactive=1 ;;
|
i) interactive=1 ;;
|
||||||
G) copykeyring=0 ;;
|
G) copykeyring=0 ;;
|
||||||
M) copymirrorlist=0 ;;
|
M) copymirrorlist=0 ;;
|
||||||
|
U) pacmode=-U ;;
|
||||||
:) echo "invalid argument ${arg}:$OPTARG"; usage 1;;
|
:) echo "invalid argument ${arg}:$OPTARG"; usage 1;;
|
||||||
?) usage 0 ;;
|
?) usage 0 ;;
|
||||||
esac
|
esac
|
||||||
@@ -109,7 +112,7 @@ if (( copykeyring ));then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
msg2 'Installing packages to %s' "$newroot"
|
msg2 'Installing packages to %s' "$newroot"
|
||||||
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then
|
if ! unshare --fork --pid pacman -r "$newroot" $pacmode "${pacman_args[@]}"; then
|
||||||
die 'Failed to install packages to new root'
|
die 'Failed to install packages to new root'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@@ -86,15 +86,13 @@ 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#')
|
||||||
if [[ ${lines[0]} != ${host_mirrors[0]} ]]; then
|
for line in "${lines[@]}"; do
|
||||||
for line in "${lines[@]}"; do
|
if [[ $line = file://* ]]; then
|
||||||
if [[ $line = file://* ]]; then
|
line=${line#file://}
|
||||||
line=${line#file://}
|
in_array "$line" "${cache_dirs[@]}" || cache_dirs+=("$line")
|
||||||
in_array "$line" "${cache_dirs[@]}" || cache_dirs+=("$line")
|
fi
|
||||||
fi
|
done
|
||||||
done
|
|
||||||
fi
|
|
||||||
done < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" --repo-list)
|
done < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" --repo-list)
|
||||||
|
|
||||||
copy_hostconf () {
|
copy_hostconf () {
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
. @libdir@/artools/util-base.sh
|
. @libdir@/artools/util-base.sh
|
||||||
|
|
||||||
working_dir=''
|
working_dir=''
|
||||||
|
umode=''
|
||||||
|
|
||||||
files=()
|
files=()
|
||||||
chroot_args=()
|
chroot_args=()
|
||||||
@@ -22,6 +23,7 @@ chroot_args=()
|
|||||||
usage() {
|
usage() {
|
||||||
echo "Usage: ${0##*/} [options] working-dir package-list..."
|
echo "Usage: ${0##*/} [options] working-dir package-list..."
|
||||||
echo ' options:'
|
echo ' options:'
|
||||||
|
echo ' -U Use pacman -U to install packages'
|
||||||
echo ' -C <file> Location of a pacman config file'
|
echo ' -C <file> Location of a pacman config file'
|
||||||
echo ' -M <file> Location of a makepkg config file'
|
echo ' -M <file> Location of a makepkg config file'
|
||||||
echo ' -c <dir> Set pacman cache'
|
echo ' -c <dir> Set pacman cache'
|
||||||
@@ -33,10 +35,11 @@ usage() {
|
|||||||
|
|
||||||
orig_argv=("$0" "$@")
|
orig_argv=("$0" "$@")
|
||||||
|
|
||||||
opts='hC:M:c:f:s'
|
opts='hUC:M:c:f:s'
|
||||||
|
|
||||||
while getopts ${opts} arg; do
|
while getopts ${opts} arg; do
|
||||||
case "${arg}" in
|
case "${arg}" in
|
||||||
|
U) umode=U ;;
|
||||||
C) pacman_conf="$OPTARG" ;;
|
C) pacman_conf="$OPTARG" ;;
|
||||||
M) makepkg_conf="$OPTARG" ;;
|
M) makepkg_conf="$OPTARG" ;;
|
||||||
c) cache_dir="$OPTARG" ;;
|
c) cache_dir="$OPTARG" ;;
|
||||||
@@ -45,8 +48,10 @@ while getopts ${opts} arg; do
|
|||||||
h|?) usage ;;
|
h|?) usage ;;
|
||||||
*) error "invalid argument '%s'" "$arg"; usage ;;
|
*) error "invalid argument '%s'" "$arg"; usage ;;
|
||||||
esac
|
esac
|
||||||
chroot_args+=("-$arg")
|
if [[ $arg != U ]]; then
|
||||||
[[ -v OPTARG ]] && chroot_args+=("$OPTARG")
|
chroot_args+=("-$arg")
|
||||||
|
[[ -v OPTARG ]] && chroot_args+=("$OPTARG")
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
shift $(($OPTIND - 1))
|
shift $(($OPTIND - 1))
|
||||||
|
|
||||||
@@ -88,7 +93,7 @@ for f in "${files[@]}"; do
|
|||||||
cp "$f" "$working_dir$f"
|
cp "$f" "$working_dir$f"
|
||||||
done
|
done
|
||||||
|
|
||||||
basestrap -Mc ${pacman_conf:+-C "$pacman_conf"} "$working_dir" \
|
basestrap -${umode}Mc ${pacman_conf:+-C "$pacman_conf"} "$working_dir" \
|
||||||
${cache_dirs[@]/#/--cachedir=} "$@" || die 'Failed to install all packages'
|
${cache_dirs[@]/#/--cachedir=} "$@" || die 'Failed to install all packages'
|
||||||
|
|
||||||
printf '%s.UTF-8 UTF-8\n' en_US de_DE > "$working_dir/etc/locale.gen"
|
printf '%s.UTF-8 UTF-8\n' en_US de_DE > "$working_dir/etc/locale.gen"
|
||||||
|
@@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
. @libdir@/artools/util-iso.sh
|
. @libdir@/artools/util-iso.sh
|
||||||
|
|
||||||
|
prepare_artools
|
||||||
|
|
||||||
gen_iso_fn(){
|
gen_iso_fn(){
|
||||||
local vars=("artix") name
|
local vars=("artix") name
|
||||||
vars+=("${PROFILE}")
|
vars+=("${PROFILE}")
|
||||||
@@ -50,6 +52,8 @@ prepare_build(){
|
|||||||
basestrap_args+=(-C ${pacman_conf})
|
basestrap_args+=(-C ${pacman_conf})
|
||||||
work_dir=${CHROOTS_ISO}/${PROFILE}/artix
|
work_dir=${CHROOTS_ISO}/${PROFILE}/artix
|
||||||
|
|
||||||
|
prepare_dir "${ISO_POOL}"
|
||||||
|
|
||||||
iso_dir="${ISO_POOL}/${PROFILE}"
|
iso_dir="${ISO_POOL}/${PROFILE}"
|
||||||
|
|
||||||
iso_root=${CHROOTS_ISO}/${PROFILE}/iso
|
iso_root=${CHROOTS_ISO}/${PROFILE}/iso
|
||||||
@@ -75,6 +79,44 @@ display_settings(){
|
|||||||
show_profile
|
show_profile
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mk_squash(){
|
||||||
|
local timer=$(get_timer)
|
||||||
|
make_sfs "${work_dir}/rootfs"
|
||||||
|
[[ -d "${work_dir}/livefs" ]] && make_sfs "${work_dir}/livefs"
|
||||||
|
show_elapsed_time "${FUNCNAME}" "${timer}"
|
||||||
|
}
|
||||||
|
|
||||||
|
mk_iso(){
|
||||||
|
touch "${iso_root}/.artix"
|
||||||
|
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
|
||||||
|
chown -R "${OWNER}:$(id --group ${OWNER})" "${iso_dir}"
|
||||||
|
}
|
||||||
|
|
||||||
|
mk_boot(){
|
||||||
|
local timer=$(get_timer)
|
||||||
|
run_safe "make_bootfs"
|
||||||
|
run_safe "make_grub"
|
||||||
|
show_elapsed_time "${FUNCNAME}" "${timer}"
|
||||||
|
}
|
||||||
|
|
||||||
|
mk_chroots(){
|
||||||
|
local timer=$(get_timer)
|
||||||
|
load_pkgs "${ROOT_LIST}" "${INITSYS}"
|
||||||
|
run_safe "make_rootfs"
|
||||||
|
if [[ -n ${LIVE_LIST} ]]; then
|
||||||
|
load_pkgs "${LIVE_LIST}" "${INITSYS}"
|
||||||
|
run_safe "make_livefs"
|
||||||
|
fi
|
||||||
|
show_elapsed_time "${FUNCNAME}" "${timer}"
|
||||||
|
}
|
||||||
|
|
||||||
build(){
|
build(){
|
||||||
msg "Start building [%s]" "${PROFILE}"
|
msg "Start building [%s]" "${PROFILE}"
|
||||||
if ${clean_first};then
|
if ${clean_first};then
|
||||||
@@ -95,28 +137,45 @@ build(){
|
|||||||
rm -rf --one-file-system "${iso_root}"
|
rm -rf --one-file-system "${iso_root}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ${iso_only}; then
|
case true in
|
||||||
[[ ! -d ${work_dir} ]] && die "Create images: %s -p %s -x" "${cmd}" "${PROFILE}"
|
${chroot_only})
|
||||||
compress_images
|
mk_chroots
|
||||||
exit 1
|
warning "Continue squash: %s -p %s -sc ..." "${cmd}" "${PROFILE}"
|
||||||
fi
|
exit 1
|
||||||
if ${images_only}; then
|
;;
|
||||||
prepare_images
|
${boot_only})
|
||||||
warning "Continue compress: %s -p %s -zc ..." "${cmd}" "${PROFILE}"
|
mk_boot
|
||||||
exit 1
|
warning "Continue iso: %s -p %s -zc ..." "${cmd}" "${PROFILE}"
|
||||||
else
|
exit 1
|
||||||
prepare_images
|
;;
|
||||||
compress_images
|
${squash_only})
|
||||||
fi
|
mk_squash
|
||||||
|
warning "Continue boot: %s -p %s -bc ..." "${cmd}" "${PROFILE}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
${iso_only})
|
||||||
|
[[ ! -d ${work_dir} ]] && die "Create chroot: %s -p %s -x" "${cmd}" "${PROFILE}"
|
||||||
|
mk_iso
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
mk_chroots
|
||||||
|
mk_boot
|
||||||
|
mk_squash
|
||||||
|
mk_iso
|
||||||
|
;;
|
||||||
|
esac
|
||||||
msg "Finished building [%s]" "${PROFILE}"
|
msg "Finished building [%s]" "${PROFILE}"
|
||||||
show_elapsed_time "${FUNCNAME}" "${timer_start}"
|
show_elapsed_time "${FUNCNAME}" "${timer_start}"
|
||||||
}
|
}
|
||||||
|
|
||||||
clean_first=true
|
clean_first=true
|
||||||
pretend=false
|
pretend=false
|
||||||
images_only=false
|
chroot_only=false
|
||||||
iso_only=false
|
iso_only=false
|
||||||
persist=false
|
persist=false
|
||||||
|
use_dracut=false
|
||||||
|
squash_only=false
|
||||||
|
boot_only=false
|
||||||
|
|
||||||
basestrap_args=(-GMc)
|
basestrap_args=(-GMc)
|
||||||
cmd=${0##*/}
|
cmd=${0##*/}
|
||||||
@@ -136,9 +195,12 @@ usage() {
|
|||||||
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'
|
||||||
echo ' -x Build images only'
|
echo ' -x Build chroot only'
|
||||||
|
echo ' -s Squash chroot only'
|
||||||
|
echo ' -b Generate iso boot only'
|
||||||
echo ' -z Generate iso only'
|
echo ' -z Generate iso only'
|
||||||
echo ' Requires pre built images (-x)'
|
echo ' Requires pre built images (-x)'
|
||||||
|
echo ' -d Use dracut instead of mkinitcpio for iso initramfs'
|
||||||
echo ' -q Query settings and pretend build'
|
echo ' -q Query settings and pretend build'
|
||||||
echo ' -h This help'
|
echo ' -h This help'
|
||||||
echo ''
|
echo ''
|
||||||
@@ -148,7 +210,7 @@ usage() {
|
|||||||
|
|
||||||
orig_argv=("$0" "$@")
|
orig_argv=("$0" "$@")
|
||||||
|
|
||||||
opts='p:r:t:i:g:czxmqh'
|
opts='p:r:t:i:g:czsbxmdqh'
|
||||||
|
|
||||||
while getopts "${opts}" arg; do
|
while getopts "${opts}" arg; do
|
||||||
case "${arg}" in
|
case "${arg}" in
|
||||||
@@ -158,9 +220,12 @@ while getopts "${opts}" arg; do
|
|||||||
i) INITSYS="$OPTARG" ;;
|
i) INITSYS="$OPTARG" ;;
|
||||||
g) GPG_KEY="$OPTARG" ;;
|
g) GPG_KEY="$OPTARG" ;;
|
||||||
c) clean_first=false ;;
|
c) clean_first=false ;;
|
||||||
x) images_only=true ;;
|
x) chroot_only=true ;;
|
||||||
z) iso_only=true ;;
|
z) iso_only=true ;;
|
||||||
|
s) squash_only=true ;;
|
||||||
|
b) boot_only=true ;;
|
||||||
m) persist=true ;;
|
m) persist=true ;;
|
||||||
|
d) use_dracut=true ;;
|
||||||
q) pretend=true ;;
|
q) pretend=true ;;
|
||||||
h|?) usage 0 ;;
|
h|?) usage 0 ;;
|
||||||
*) echo "invalid argument '${arg}'"; usage 1 ;;
|
*) echo "invalid argument '${arg}'"; usage 1 ;;
|
||||||
|
@@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
. @libdir@/artools/util-iso.sh
|
. @libdir@/artools/util-iso.sh
|
||||||
|
|
||||||
|
prepare_artools
|
||||||
|
|
||||||
connect(){
|
connect(){
|
||||||
echo "${ACCOUNT}@${FILE_HOST}:${FILE_HOME}"
|
echo "${ACCOUNT}@${FILE_HOST}:${FILE_HOME}"
|
||||||
}
|
}
|
||||||
|
@@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
. /usr/lib/artools/util-pkg.sh
|
. /usr/lib/artools/util-pkg.sh
|
||||||
|
|
||||||
|
prepare_artools
|
||||||
|
|
||||||
batch_move() {
|
batch_move() {
|
||||||
local name="${1:-pkg_moves}"
|
local name="${1:-pkg_moves}"
|
||||||
local pkglist=${TREE_DIR_ARTIX}/$name.list
|
local pkglist=${TREE_DIR_ARTIX}/$name.list
|
||||||
|
@@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
. @libdir@/artools/util-pkg.sh
|
. @libdir@/artools/util-pkg.sh
|
||||||
|
|
||||||
|
prepare_artools
|
||||||
|
|
||||||
create_first=false
|
create_first=false
|
||||||
rebuild=false
|
rebuild=false
|
||||||
no_check=false
|
no_check=false
|
||||||
@@ -90,7 +92,7 @@ if ${create_first} || [[ ! -d "${CHROOTS_PKG}/${repo}-${ARCH}" ]];then
|
|||||||
lock_close 9
|
lock_close 9
|
||||||
|
|
||||||
rm -rf --one-file-system "${CHROOTS_PKG}/${repo}-${ARCH}"
|
rm -rf --one-file-system "${CHROOTS_PKG}/${repo}-${ARCH}"
|
||||||
mkdir -p "${CHROOTS_PKG}/${repo}-${ARCH}"
|
(umask 0022; mkdir -p "${CHROOTS_PKG}/${repo}-${ARCH}")
|
||||||
setarch "${ARCH}" mkchroot \
|
setarch "${ARCH}" mkchroot \
|
||||||
-C "${pacman_conf}" \
|
-C "${pacman_conf}" \
|
||||||
-M "${makepkg_conf}" \
|
-M "${makepkg_conf}" \
|
||||||
|
@@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
. @libdir@/artools/util-pkg.sh
|
. @libdir@/artools/util-pkg.sh
|
||||||
|
|
||||||
|
prepare_artools
|
||||||
|
|
||||||
patch_pkg(){
|
patch_pkg(){
|
||||||
local pkg="$1"
|
local pkg="$1"
|
||||||
case $pkg in
|
case $pkg in
|
||||||
|
@@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
. @libdir@/artools/util-pkg.sh
|
. @libdir@/artools/util-pkg.sh
|
||||||
|
|
||||||
|
prepare_artools
|
||||||
|
|
||||||
get_path(){
|
get_path(){
|
||||||
local repo="$1" pkg=trunk/PKGBUILD
|
local repo="$1" pkg=trunk/PKGBUILD
|
||||||
if [[ $repo != trunk ]]; then
|
if [[ $repo != trunk ]]; then
|
||||||
|
@@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
. @libdir@/artools/util-pkg.sh
|
. @libdir@/artools/util-pkg.sh
|
||||||
|
|
||||||
|
prepare_artools
|
||||||
|
|
||||||
compare(){
|
compare(){
|
||||||
local pkgpath="$1" group="$2"
|
local pkgpath="$1" group="$2"
|
||||||
local pkg=${pkgpath##*/}
|
local pkg=${pkgpath##*/}
|
||||||
|
@@ -14,12 +14,15 @@
|
|||||||
|
|
||||||
. @libdir@/artools/util-pkg.sh
|
. @libdir@/artools/util-pkg.sh
|
||||||
|
|
||||||
|
prepare_artools
|
||||||
|
|
||||||
find_cached_pkgfile() {
|
find_cached_pkgfile() {
|
||||||
local searchdirs=("$PKGDEST" "$PWD") results=()
|
local searchdirs=("$PKGDEST" "$PWD") results=()
|
||||||
local pkg="$1"
|
local pkg="$1"
|
||||||
|
local search=${pkg%.*}
|
||||||
for dir in "${searchdirs[@]}"; do
|
for dir in "${searchdirs[@]}"; do
|
||||||
[[ -d $dir ]] || continue
|
[[ -d $dir ]] || continue
|
||||||
results+=$(find "$dir" -type f -name "$pkg")
|
results+=$(find "$dir" -type f -name "$search.*" ! -path '*.sig')
|
||||||
done
|
done
|
||||||
case ${#results[*]} in
|
case ${#results[*]} in
|
||||||
0)
|
0)
|
||||||
|
@@ -12,7 +12,6 @@
|
|||||||
# 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.
|
||||||
|
|
||||||
. @libdir@/artools/util-base.sh
|
|
||||||
. @libdir@/artools/util-pkg.sh
|
. @libdir@/artools/util-pkg.sh
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
@@ -398,13 +398,27 @@ if (( ret != 0 )); then
|
|||||||
else
|
else
|
||||||
if (( run_checkpkg )); then
|
if (( run_checkpkg )); then
|
||||||
msg "Running checkpkg"
|
msg "Running checkpkg"
|
||||||
msg2 "Downloading current versions"
|
# sync off-site databases for up-to-date queries
|
||||||
if pacman --noconfirm -Swdd --logfile /dev/null "${pkgnames[@]}"; then
|
trap 'rm -rf $dbpath; cleanup' EXIT INT TERM QUIT
|
||||||
msg2 "Checking packages"
|
dbpath=$(mktemp -d --tmpdir makechrootpkg-database.XXXXXXXXXX)
|
||||||
sudo -u "$makepkg_user" checkpkg --rmdir --warn
|
mkdir -p "$dbpath"
|
||||||
else
|
pacman -Sy --dbpath "$dbpath" --logfile /dev/null
|
||||||
warning "Skipped checkpkg due to missing packages"
|
|
||||||
|
# query current package locations
|
||||||
|
remotepkgs=($(pacman -Sddp --dbpath "$dbpath" --logfile /dev/null "${pkgnames[@]}"))
|
||||||
|
if (( $? )); then
|
||||||
|
warning "Skipped checkpkg due to missing repo packages"
|
||||||
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
# download package files if any non-local location exists
|
||||||
|
for remotepkg in "${remotepkgs[@]}"; do
|
||||||
|
[[ $remotepkg == file://* ]] && continue
|
||||||
|
msg2 "Downloading current versions"
|
||||||
|
pacman --noconfirm -Swdd --dbpath "$dbpath" --logfile /dev/null "${pkgnames[@]}"
|
||||||
|
break
|
||||||
|
done
|
||||||
|
msg2 "Checking packages"
|
||||||
|
sudo -u "$makepkg_user" checkpkg --rmdir --warn
|
||||||
fi
|
fi
|
||||||
true
|
true
|
||||||
fi
|
fi
|
||||||
|
@@ -132,7 +132,7 @@ 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 -)
|
COMPRESSZST=(zstd -c -T0 --ultra -20 -)
|
||||||
COMPRESSLRZ=(lrzip -q)
|
COMPRESSLRZ=(lrzip -q)
|
||||||
COMPRESSLZO=(lzop -q)
|
COMPRESSLZO=(lzop -q)
|
||||||
COMPRESSZ=(compress -c -f)
|
COMPRESSZ=(compress -c -f)
|
||||||
@@ -143,7 +143,7 @@ COMPRESSLZ=(lzip -c -f)
|
|||||||
# EXTENSION DEFAULTS
|
# EXTENSION DEFAULTS
|
||||||
#########################################################################
|
#########################################################################
|
||||||
#
|
#
|
||||||
PKGEXT='.pkg.tar.xz'
|
PKGEXT='.pkg.tar.zst'
|
||||||
SRCEXT='.src.tar.gz'
|
SRCEXT='.src.tar.gz'
|
||||||
|
|
||||||
# vim: set ft=sh ts=2 sw=2 et:
|
# vim: set ft=sh ts=2 sw=2 et:
|
||||||
|
@@ -142,21 +142,23 @@ run_hook() {
|
|||||||
[[ -z "${cow_flags}" ]] && cow_flags="defaults"
|
[[ -z "${cow_flags}" ]] && cow_flags="defaults"
|
||||||
[[ -z "${cow_directory}" ]] && cow_directory="persistent_${label}"
|
[[ -z "${cow_directory}" ]] && cow_directory="persistent_${label}"
|
||||||
[[ -z "${cow_chunksize}" ]] && cow_chunksize="8"
|
[[ -z "${cow_chunksize}" ]] && cow_chunksize="8"
|
||||||
# set mount handler for artix
|
[[ -z "${overlay}" ]] && overlay=""
|
||||||
mount_handler="artix_mount_handler"
|
|
||||||
|
|
||||||
lower_dir=''
|
lower_dir=''
|
||||||
live_root="/run/artix"
|
live_root="/run/artix"
|
||||||
|
bootmnt="${live_root}/bootmnt"
|
||||||
overlay_root="${live_root}/overlay_root"
|
overlay_root="${live_root}/overlay_root"
|
||||||
cow="${live_root}/cowspace"
|
cow="${live_root}/cowspace"
|
||||||
bootmnt="${live_root}/bootmnt"
|
|
||||||
cp2ram="${live_root}/copytoram"
|
cp2ram="${live_root}/copytoram"
|
||||||
|
|
||||||
|
# set mount handler for artix
|
||||||
|
mount_handler="artix_mount_handler"
|
||||||
}
|
}
|
||||||
|
|
||||||
_check_sum() {
|
_check_sum() {
|
||||||
local fs="$1"
|
local fs="${1}"
|
||||||
if [[ -f "${bootmnt}/${root}/${fs}.img" ]]; then
|
if [[ -f "${bootmnt}/${root}/${fs}.img" ]]; then
|
||||||
if [[ -f "${bootmnt}/${root}/${fs}.img.sha512" ]]; then
|
if [[ -f "${bootmnt}/${root}/${fs}.img.md5" ]]; 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."
|
||||||
@@ -166,14 +168,14 @@ _check_sum() {
|
|||||||
launch_interactive_shell
|
launch_interactive_shell
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "ERROR: checksum=y option specified but ${root}/${fs}.img.sha512 not found"
|
echo "ERROR: checksum=y option specified but ${root}/${fs}.img.md5 not found"
|
||||||
launch_interactive_shell
|
launch_interactive_shell
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
_check_sig() {
|
_check_sig() {
|
||||||
|
local fs="${1}"
|
||||||
if [[ -f "${bootmnt}/${root}/${fs}.img" ]]; then
|
if [[ -f "${bootmnt}/${root}/${fs}.img" ]]; then
|
||||||
if [[ -f "${bootmnt}/${root}/${fs}.img.sig" ]]; then
|
if [[ -f "${bootmnt}/${root}/${fs}.img.sig" ]]; then
|
||||||
msg -n ":: Signature verification requested, please wait..."
|
msg -n ":: Signature verification requested, please wait..."
|
||||||
@@ -191,12 +193,12 @@ _check_sig() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_gen_arg() {
|
_gen_arg() {
|
||||||
local arg="$1"
|
local arg="${1}"
|
||||||
echo "${lower_dir:-}${lower_dir:+:}${arg}"
|
echo "${lower_dir:-}${lower_dir:+:}${arg}"
|
||||||
}
|
}
|
||||||
|
|
||||||
_mount_root_overlay() {
|
_mount_root_overlayfs() {
|
||||||
local sfs="$1"
|
local sfs="${1}"
|
||||||
local src="${bootmnt}/${root}"
|
local src="${bootmnt}/${root}"
|
||||||
local dest_sfs="${live_root}/sfs"
|
local dest_sfs="${live_root}/sfs"
|
||||||
local dest_img="${live_root}/img"
|
local dest_img="${live_root}/img"
|
||||||
@@ -227,15 +229,15 @@ artix_mount_handler() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for fs in rootfs livefs; do
|
if [[ "${checksum}" == "y" ]]; then
|
||||||
if [[ "${checksum}" == "y" ]]; then
|
_check_sum "rootfs"
|
||||||
_check_sum "${fs}"
|
[[ -n "${overlay}" ]] && _check_sum "${overlay}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${verify}" == "y" ]]; then
|
if [[ "${verify}" == "y" ]]; then
|
||||||
_check_sig "${fs}"
|
_check_sig "rootfs"
|
||||||
fi
|
[[ -n "${overlay}" ]] && _check_sig "${overlay}"
|
||||||
done
|
fi
|
||||||
|
|
||||||
if [[ "${copytoram}" == "y" ]]; then
|
if [[ "${copytoram}" == "y" ]]; then
|
||||||
msg ":: Mounting ${cp2ram} (tmpfs) filesystem, size=${copytoram_size}"
|
msg ":: Mounting ${cp2ram} (tmpfs) filesystem, size=${copytoram_size}"
|
||||||
@@ -258,9 +260,8 @@ artix_mount_handler() {
|
|||||||
mkdir -p ${overlay_root}
|
mkdir -p ${overlay_root}
|
||||||
mount -t tmpfs -o "size=${overlay_root_size}",mode=0755 overlay_root ${overlay_root}
|
mount -t tmpfs -o "size=${overlay_root_size}",mode=0755 overlay_root ${overlay_root}
|
||||||
|
|
||||||
for fs in livefs rootfs; do
|
[[ -n "${overlay}" ]] && _mount_root_overlayfs "${overlay}"
|
||||||
_mount_root_overlay "${fs}"
|
_mount_root_overlayfs "rootfs"
|
||||||
done
|
|
||||||
|
|
||||||
_mnt_overlayfs "${lower_dir}" "${newroot}" "/"
|
_mnt_overlayfs "${lower_dir}" "${newroot}" "/"
|
||||||
|
|
||||||
|
@@ -6,7 +6,6 @@ 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 () {
|
||||||
|
@@ -23,7 +23,7 @@ _curl_get() {
|
|||||||
local _dst="${2}"
|
local _dst="${2}"
|
||||||
|
|
||||||
msg ":: Downloading '${_url}'"
|
msg ":: Downloading '${_url}'"
|
||||||
if ! curl -L -f -o "/run/artix/httpspace/${root}${_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 "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"
|
||||||
@@ -31,29 +31,33 @@ _curl_get() {
|
|||||||
fi
|
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 () {
|
artix_pxe_http_mount_handler () {
|
||||||
newroot="${1}"
|
newroot="${1}"
|
||||||
|
|
||||||
msg ":: Mounting /run/artix/httpspace (tmpfs) filesystem, size='${artix_http_spc}'"
|
msg ":: Mounting ${live_root}/httpspace (tmpfs) filesystem, size='${artix_http_spc}'"
|
||||||
mkdir -p "/run/artix/httpspace"
|
mkdir -p "${live_root}/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 "${live_root}/httpspace"
|
||||||
|
|
||||||
local _src=${artix_http_srv}${root}/${arch}
|
_get_sfs "rootfs"
|
||||||
|
[[ -n "${overlay}" ]] && _mount_root_overlayfs "${overlay}"
|
||||||
|
|
||||||
for sfs in livefs rootfs;do
|
mkdir -p "${bootmnt}"
|
||||||
if [[ ! -z "$( curl -s --head "${_src}/${sfs}.sfs" | grep "OK" )" ]]; then
|
mount -o bind ${live_root}/httpspace ${bootmnt}
|
||||||
_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
|
|
||||||
|
|
||||||
artix_mount_handler ${newroot}
|
artix_mount_handler ${newroot}
|
||||||
}
|
}
|
||||||
|
@@ -12,10 +12,10 @@ run_hook() {
|
|||||||
|
|
||||||
artix_nfs_mount_handler() {
|
artix_nfs_mount_handler() {
|
||||||
newroot="${1}"
|
newroot="${1}"
|
||||||
mkdir -p "/run/artix/bootmnt"
|
mkdir -p "${bootmnt}"
|
||||||
msg ":: Mounting '${artix_nfs_srv}'"
|
msg ":: Mounting '${artix_nfs_srv}'"
|
||||||
# Do not put "${artix_nfs_opt}" nfsmount fails!
|
# 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 "ERROR: Mounting '${artix_nfs_srv}'"
|
||||||
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"
|
||||||
|
@@ -25,7 +25,7 @@ if [[ ! -d /oldrun/artix/copytoram ]]; then
|
|||||||
if [[ -d /oldrun/artix/img_dev ]]; then
|
if [[ -d /oldrun/artix/img_dev ]]; then
|
||||||
umount /oldrun/artix/img_dev
|
umount /oldrun/artix/img_dev
|
||||||
else
|
else
|
||||||
umount /oldrun/artix/bootmnt
|
umount /oldrun/bootmnt
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
# export LC_MESSAGES=C
|
# export LC_MESSAGES=C
|
||||||
export LANG=C
|
export LANG=C
|
||||||
|
|
||||||
if [[ -t 2 ]]; then
|
if [[ -t 2 && "$TERM" != dumb ]]; then
|
||||||
colorize
|
colorize
|
||||||
else
|
else
|
||||||
declare -gr ALL_OFF='' BOLD='' BLUE='' GREEN='' RED='' YELLOW=''
|
declare -gr ALL_OFF='' BOLD='' BLUE='' GREEN='' RED='' YELLOW=''
|
||||||
|
@@ -42,6 +42,12 @@ add_svc_s6(){
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
chroot $mnt s6-rc-bundle -c /etc/s6/rc/compiled add $rlvl $valid
|
chroot $mnt s6-rc-bundle -c /etc/s6/rc/compiled add $rlvl $valid
|
||||||
|
|
||||||
|
# rebuild s6-linux-init binaries
|
||||||
|
chroot $mnt rm -r /etc/s6/current
|
||||||
|
chroot $mnt s6-linux-init-maker -1 -N -f /etc/s6/skel -G "/usr/bin/agetty -L -8 tty1 115200" -c /etc/s6/current /etc/s6/current
|
||||||
|
chroot $mnt mv /etc/s6/current/bin/init /etc/s6/current/bin/s6-init
|
||||||
|
chroot $mnt cp -a /etc/s6/current/bin /usr
|
||||||
}
|
}
|
||||||
|
|
||||||
set_xdm(){
|
set_xdm(){
|
||||||
@@ -167,7 +173,7 @@ configure_calamares(){
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
configure_image(){
|
configure_chroot(){
|
||||||
local fs="$1"
|
local fs="$1"
|
||||||
msg "Configuring [%s]" "${fs##*/}"
|
msg "Configuring [%s]" "${fs##*/}"
|
||||||
configure_hosts "$fs"
|
configure_hosts "$fs"
|
||||||
@@ -179,3 +185,40 @@ configure_image(){
|
|||||||
write_live_session_conf > "$fs/etc/artools/live.conf"
|
write_live_session_conf > "$fs/etc/artools/live.conf"
|
||||||
msg "Done configuring [%s]" "${fs##*/}"
|
msg "Done configuring [%s]" "${fs##*/}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clean_up_chroot(){
|
||||||
|
local path mnt="$1"
|
||||||
|
msg2 "Cleaning [%s]" "${mnt##*/}"
|
||||||
|
|
||||||
|
path=$mnt/boot
|
||||||
|
if [[ -d "$path" ]]; then
|
||||||
|
find "$path" -name 'initramfs*.img' -delete &> /dev/null
|
||||||
|
fi
|
||||||
|
path=$mnt/var/lib/pacman/sync
|
||||||
|
if [[ -d $path ]];then
|
||||||
|
find "$path" -type f -delete &> /dev/null
|
||||||
|
fi
|
||||||
|
path=$mnt/var/cache/pacman/pkg
|
||||||
|
if [[ -d $path ]]; then
|
||||||
|
find "$path" -type f -delete &> /dev/null
|
||||||
|
fi
|
||||||
|
path=$mnt/var/log
|
||||||
|
if [[ -d $path ]]; then
|
||||||
|
find "$path" -type f -delete &> /dev/null
|
||||||
|
fi
|
||||||
|
path=$mnt/var/tmp
|
||||||
|
if [[ -d $path ]];then
|
||||||
|
find "$path" -mindepth 1 -delete &> /dev/null
|
||||||
|
fi
|
||||||
|
path=$mnt/tmp
|
||||||
|
if [[ -d $path ]];then
|
||||||
|
find "$path" -mindepth 1 -delete &> /dev/null
|
||||||
|
fi
|
||||||
|
find "$mnt" -name *.pacnew -name *.pacsave -name *.pacorig -delete
|
||||||
|
if [[ -f "$mnt/boot/grub/grub.cfg" ]]; then
|
||||||
|
rm $mnt/boot/grub/grub.cfg
|
||||||
|
fi
|
||||||
|
if [[ -f "$mnt/etc/machine-id" ]]; then
|
||||||
|
rm $mnt/etc/machine-id
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
161
lib/iso/grub.sh
161
lib/iso/grub.sh
@@ -12,51 +12,8 @@
|
|||||||
# 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(){
|
|
||||||
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
|
|
||||||
|
|
||||||
msg2 "Writing mkinitcpio.conf ..."
|
|
||||||
write_mkinitcpio_conf "$dest"
|
|
||||||
}
|
|
||||||
|
|
||||||
prepare_initramfs(){
|
|
||||||
local mnt="$1"
|
|
||||||
|
|
||||||
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(){
|
prepare_boot_extras(){
|
||||||
local src="$1" dest="$2"
|
local src="$1" dest=${iso_root}/boot
|
||||||
|
|
||||||
for u in intel amd;do
|
for u in intel amd;do
|
||||||
cp $src/boot/$u-ucode.img $dest/$u-ucode.img
|
cp $src/boot/$u-ucode.img $dest/$u-ucode.img
|
||||||
@@ -67,20 +24,121 @@ prepare_boot_extras(){
|
|||||||
cp $src/usr/share/licenses/common/GPL2/license.txt $dest/memtest.COPYING
|
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(){
|
configure_grub(){
|
||||||
local kopts="root=LiveOS label=${iso_label}"
|
msg "Configuring grub kernel options ..."
|
||||||
local popts=''
|
local ro_opts=()
|
||||||
sed -e "s|@kopts@|${kopts}|" -e "s|@popts@|${popts}|" -i ${iso_root}/boot/grub/kernels.cfg
|
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(){
|
prepare_grub(){
|
||||||
local platform=i386-pc img='core.img' prefix=/boot/grub
|
local platform=i386-pc img='core.img' prefix=/boot/grub
|
||||||
local lib=$1/usr/lib/grub theme=$2/usr/share/grub
|
local lib="$1"/usr/lib/grub
|
||||||
|
local theme="$1"/usr/share/grub
|
||||||
|
local livecfg="$2"/usr/share/grub
|
||||||
local grub=${iso_root}/boot/grub efi=${iso_root}/efi/boot
|
local grub=${iso_root}/boot/grub efi=${iso_root}/efi/boot
|
||||||
|
|
||||||
|
|
||||||
prepare_dir ${grub}/${platform}
|
prepare_dir ${grub}/${platform}
|
||||||
|
|
||||||
cp ${theme}/cfg/*.cfg ${grub}
|
cp ${livecfg}/cfg/*.cfg ${grub}
|
||||||
|
|
||||||
cp ${lib}/${platform}/* ${grub}/${platform}
|
cp ${lib}/${platform}/* ${grub}/${platform}
|
||||||
|
|
||||||
@@ -103,8 +161,9 @@ prepare_grub(){
|
|||||||
grub-mkimage -d ${grub}/${platform} -o ${efi}/${img} -O ${platform} -p ${prefix} iso9660
|
grub-mkimage -d ${grub}/${platform} -o ${efi}/${img} -O ${platform} -p ${prefix} iso9660
|
||||||
|
|
||||||
prepare_dir ${grub}/themes
|
prepare_dir ${grub}/themes
|
||||||
cp -r ${theme}/themes/artix ${grub}/themes/
|
|
||||||
cp -r ${theme}/{locales,tz} ${grub}
|
cp -r ${theme}/themes/artix ${grub}/themes
|
||||||
|
cp -r ${livecfg}/{locales,tz} ${grub}
|
||||||
|
|
||||||
if [[ -f /usr/share/grub/unicode.pf2 ]];then
|
if [[ -f /usr/share/grub/unicode.pf2 ]];then
|
||||||
msg2 "Copying %s ..." "unicode.pf2"
|
msg2 "Copying %s ..." "unicode.pf2"
|
||||||
|
@@ -24,9 +24,9 @@ make_sig () {
|
|||||||
|
|
||||||
make_checksum(){
|
make_checksum(){
|
||||||
local file="$1"
|
local file="$1"
|
||||||
msg2 "Creating sha512sum ..."
|
msg2 "Creating md5sum ..."
|
||||||
cd ${iso_root}${live_dir}
|
cd ${iso_root}${live_dir}
|
||||||
sha512sum $file > $file.sha512
|
md5sum $file > $file.md5
|
||||||
cd ${OLDPWD}
|
cd ${OLDPWD}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,7 +72,6 @@ make_sfs() {
|
|||||||
error "The path %s does not exist" "${sfs_in}"
|
error "The path %s does not exist" "${sfs_in}"
|
||||||
retrun 1
|
retrun 1
|
||||||
fi
|
fi
|
||||||
local timer=$(get_timer)
|
|
||||||
|
|
||||||
mkdir -p ${iso_root}${live_dir}
|
mkdir -p ${iso_root}${live_dir}
|
||||||
|
|
||||||
@@ -100,15 +99,14 @@ make_sfs() {
|
|||||||
|
|
||||||
mksquashfs "${mksfs_args[@]}"
|
mksquashfs "${mksfs_args[@]}"
|
||||||
|
|
||||||
make_checksum "${img_name}"
|
if ! ${use_dracut}; then
|
||||||
${persist} && rm -r "${work_dir}/embed"
|
make_checksum "${img_name}"
|
||||||
|
if [[ -n ${GPG_KEY} ]];then
|
||||||
if [[ -n ${GPG_KEY} ]];then
|
make_sig "${img_name}"
|
||||||
make_sig "${img_name}"
|
fi
|
||||||
fi
|
fi
|
||||||
|
${persist} && rm -r "${work_dir}/embed"
|
||||||
fi
|
fi
|
||||||
show_elapsed_time "${FUNCNAME}" "${timer_start}"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get_disturl(){
|
get_disturl(){
|
||||||
@@ -146,19 +144,3 @@ assemble_iso(){
|
|||||||
${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]"
|
|
||||||
}
|
|
||||||
|
@@ -37,7 +37,7 @@ track_fs() {
|
|||||||
mount "$@" && FS_ACTIVE_MOUNTS=("$5" "${FS_ACTIVE_MOUNTS[@]}")
|
mount "$@" && FS_ACTIVE_MOUNTS=("$5" "${FS_ACTIVE_MOUNTS[@]}")
|
||||||
}
|
}
|
||||||
|
|
||||||
mount_overlay(){
|
mount_overlayfs(){
|
||||||
FS_ACTIVE_MOUNTS=()
|
FS_ACTIVE_MOUNTS=()
|
||||||
local lower= upper="$1" work="$2"
|
local lower= upper="$1" work="$2"
|
||||||
mkdir -p "${mnt_dir}/work"
|
mkdir -p "${mnt_dir}/work"
|
||||||
@@ -52,7 +52,7 @@ mount_overlay(){
|
|||||||
track_fs -t overlay overlay -olowerdir="$lower",upperdir="$upper",workdir="${mnt_dir}/work" "$upper"
|
track_fs -t overlay overlay -olowerdir="$lower",upperdir="$upper",workdir="${mnt_dir}/work" "$upper"
|
||||||
}
|
}
|
||||||
|
|
||||||
umount_overlay(){
|
umount_overlayfs(){
|
||||||
if [[ -n ${FS_ACTIVE_MOUNTS[@]} ]];then
|
if [[ -n ${FS_ACTIVE_MOUNTS[@]} ]];then
|
||||||
info "overlayfs umount: [%s]" "${FS_ACTIVE_MOUNTS[@]}"
|
info "overlayfs umount: [%s]" "${FS_ACTIVE_MOUNTS[@]}"
|
||||||
umount "${FS_ACTIVE_MOUNTS[@]}"
|
umount "${FS_ACTIVE_MOUNTS[@]}"
|
||||||
|
@@ -19,7 +19,7 @@ error_function() {
|
|||||||
error "A failure occurred in %s()." "$func"
|
error "A failure occurred in %s()." "$func"
|
||||||
plain "Aborting..."
|
plain "Aborting..."
|
||||||
fi
|
fi
|
||||||
umount_overlay
|
umount_overlayfs
|
||||||
umount_img
|
umount_img
|
||||||
exit 2
|
exit 2
|
||||||
}
|
}
|
||||||
@@ -41,7 +41,7 @@ run_safe() {
|
|||||||
trap_exit() {
|
trap_exit() {
|
||||||
local sig=$1; shift
|
local sig=$1; shift
|
||||||
error "$@"
|
error "$@"
|
||||||
umount_overlay
|
umount_overlayfs
|
||||||
trap -- "$sig"
|
trap -- "$sig"
|
||||||
kill "-$sig" "$$"
|
kill "-$sig" "$$"
|
||||||
}
|
}
|
||||||
@@ -62,43 +62,6 @@ copy_overlay(){
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
clean_up_image(){
|
|
||||||
local path mnt="$1"
|
|
||||||
msg2 "Cleaning [%s]" "${mnt##*/}"
|
|
||||||
|
|
||||||
path=$mnt/boot
|
|
||||||
if [[ -d "$path" ]]; then
|
|
||||||
find "$path" -name 'initramfs*.img' -delete &> /dev/null
|
|
||||||
fi
|
|
||||||
path=$mnt/var/lib/pacman/sync
|
|
||||||
if [[ -d $path ]];then
|
|
||||||
find "$path" -type f -delete &> /dev/null
|
|
||||||
fi
|
|
||||||
path=$mnt/var/cache/pacman/pkg
|
|
||||||
if [[ -d $path ]]; then
|
|
||||||
find "$path" -type f -delete &> /dev/null
|
|
||||||
fi
|
|
||||||
path=$mnt/var/log
|
|
||||||
if [[ -d $path ]]; then
|
|
||||||
find "$path" -type f -delete &> /dev/null
|
|
||||||
fi
|
|
||||||
path=$mnt/var/tmp
|
|
||||||
if [[ -d $path ]];then
|
|
||||||
find "$path" -mindepth 1 -delete &> /dev/null
|
|
||||||
fi
|
|
||||||
path=$mnt/tmp
|
|
||||||
if [[ -d $path ]];then
|
|
||||||
find "$path" -mindepth 1 -delete &> /dev/null
|
|
||||||
fi
|
|
||||||
find "$mnt" -name *.pacnew -name *.pacsave -name *.pacorig -delete
|
|
||||||
if [[ -f "$mnt/boot/grub/grub.cfg" ]]; then
|
|
||||||
rm $mnt/boot/grub/grub.cfg
|
|
||||||
fi
|
|
||||||
if [[ -f "$mnt/etc/machine-id" ]]; then
|
|
||||||
rm $mnt/etc/machine-id
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
make_rootfs() {
|
make_rootfs() {
|
||||||
if [[ ! -e ${work_dir}/rootfs.lock ]]; then
|
if [[ ! -e ${work_dir}/rootfs.lock ]]; then
|
||||||
msg "Prepare [Base installation] (rootfs)"
|
msg "Prepare [Base installation] (rootfs)"
|
||||||
@@ -110,9 +73,9 @@ make_rootfs() {
|
|||||||
|
|
||||||
copy_overlay "${ROOT_OVERLAY}" "${rootfs}"
|
copy_overlay "${ROOT_OVERLAY}" "${rootfs}"
|
||||||
|
|
||||||
[[ -z ${LIVE_LIST} ]] && configure_image "${rootfs}"
|
[[ -z ${LIVE_LIST} ]] && configure_chroot "${rootfs}"
|
||||||
|
|
||||||
clean_up_image "${rootfs}"
|
clean_up_chroot "${rootfs}"
|
||||||
|
|
||||||
: > ${work_dir}/rootfs.lock
|
: > ${work_dir}/rootfs.lock
|
||||||
|
|
||||||
@@ -127,17 +90,17 @@ make_livefs() {
|
|||||||
|
|
||||||
prepare_dir "${livefs}"
|
prepare_dir "${livefs}"
|
||||||
|
|
||||||
mount_overlay "${livefs}" "${work_dir}"
|
mount_overlayfs "${livefs}" "${work_dir}"
|
||||||
|
|
||||||
basestrap "${basestrap_args[@]}" "${livefs}" "${packages[@]}"
|
basestrap "${basestrap_args[@]}" "${livefs}" "${packages[@]}"
|
||||||
|
|
||||||
copy_overlay "${LIVE_OVERLAY}" "${livefs}"
|
copy_overlay "${LIVE_OVERLAY}" "${livefs}"
|
||||||
|
|
||||||
configure_image "${livefs}"
|
configure_chroot "${livefs}"
|
||||||
|
|
||||||
umount_overlay
|
umount_overlayfs
|
||||||
|
|
||||||
clean_up_image "${livefs}"
|
clean_up_chroot "${livefs}"
|
||||||
|
|
||||||
: > ${work_dir}/livefs.lock
|
: > ${work_dir}/livefs.lock
|
||||||
|
|
||||||
@@ -148,23 +111,22 @@ make_livefs() {
|
|||||||
make_bootfs() {
|
make_bootfs() {
|
||||||
if [[ ! -e ${work_dir}/bootfs.lock ]]; then
|
if [[ ! -e ${work_dir}/bootfs.lock ]]; then
|
||||||
msg "Prepare [/iso/boot]"
|
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"
|
local bootfs="${work_dir}/bootfs"
|
||||||
|
|
||||||
mount_overlay "${bootfs}" "${work_dir}"
|
mount_overlayfs "${bootfs}" "${work_dir}"
|
||||||
|
|
||||||
prepare_initcpio "${bootfs}"
|
if ${use_dracut}; then
|
||||||
prepare_initramfs "${bootfs}"
|
prepare_initramfs_dracut "${bootfs}"
|
||||||
|
else
|
||||||
|
prepare_initramfs "${bootfs}"
|
||||||
|
fi
|
||||||
|
|
||||||
cp ${bootfs}/boot/initramfs.img ${boot}/initramfs-${ARCH}.img
|
umount_overlayfs
|
||||||
prepare_boot_extras "${bootfs}" "${boot}"
|
|
||||||
|
|
||||||
umount_overlay
|
|
||||||
|
|
||||||
rm -R ${bootfs}
|
rm -R ${bootfs}
|
||||||
: > ${work_dir}/bootfs.lock
|
: > ${work_dir}/bootfs.lock
|
||||||
@@ -181,30 +143,13 @@ make_grub(){
|
|||||||
|
|
||||||
prepare_grub "${work_dir}/rootfs" "$layer"
|
prepare_grub "${work_dir}/rootfs" "$layer"
|
||||||
|
|
||||||
configure_grub
|
if ${use_dracut}; then
|
||||||
|
configure_grub_dracut
|
||||||
|
else
|
||||||
|
configure_grub
|
||||||
|
fi
|
||||||
|
|
||||||
: > ${work_dir}/grub.lock
|
: > ${work_dir}/grub.lock
|
||||||
msg "Done [/iso/boot/grub]"
|
msg "Done [/iso/boot/grub]"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
compress_images(){
|
|
||||||
local timer=$(get_timer)
|
|
||||||
run_safe "make_iso"
|
|
||||||
chown -R "${OWNER}:$(id --group ${OWNER})" "${iso_dir}"
|
|
||||||
show_elapsed_time "${FUNCNAME}" "${timer}"
|
|
||||||
}
|
|
||||||
|
|
||||||
prepare_images(){
|
|
||||||
local timer=$(get_timer)
|
|
||||||
load_pkgs "${ROOT_LIST}" "${INITSYS}"
|
|
||||||
run_safe "make_rootfs"
|
|
||||||
if [[ -n ${LIVE_LIST} ]]; then
|
|
||||||
load_pkgs "${LIVE_LIST}" "${INITSYS}"
|
|
||||||
run_safe "make_livefs"
|
|
||||||
fi
|
|
||||||
run_safe "make_bootfs"
|
|
||||||
run_safe "make_grub"
|
|
||||||
|
|
||||||
show_elapsed_time "${FUNCNAME}" "${timer}"
|
|
||||||
}
|
|
||||||
|
@@ -12,6 +12,8 @@
|
|||||||
# 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.
|
||||||
|
|
||||||
|
shopt -s extglob
|
||||||
|
|
||||||
get_compliant_name(){
|
get_compliant_name(){
|
||||||
local gitname="$1"
|
local gitname="$1"
|
||||||
case $gitname in
|
case $gitname in
|
||||||
@@ -145,7 +147,7 @@ find_cached_package() {
|
|||||||
for dir in "${searchdirs[@]}"; do
|
for dir in "${searchdirs[@]}"; do
|
||||||
[[ -d $dir ]] || continue
|
[[ -d $dir ]] || continue
|
||||||
|
|
||||||
for pkg in "$dir"/*.pkg.tar.?z; do
|
for pkg in "$dir"/*.pkg.tar?(.!(sig|*.*)); do
|
||||||
[[ -f $pkg ]] || continue
|
[[ -f $pkg ]] || continue
|
||||||
|
|
||||||
# avoid adding duplicates of the same inode
|
# avoid adding duplicates of the same inode
|
||||||
@@ -155,7 +157,7 @@ find_cached_package() {
|
|||||||
|
|
||||||
# split apart package filename into parts
|
# split apart package filename into parts
|
||||||
pkgbasename=${pkg##*/}
|
pkgbasename=${pkg##*/}
|
||||||
pkgbasename=${pkgbasename%.pkg.tar.?z}
|
pkgbasename=${pkgbasename%.pkg.tar*}
|
||||||
|
|
||||||
arch=${pkgbasename##*-}
|
arch=${pkgbasename##*-}
|
||||||
pkgbasename=${pkgbasename%-"$arch"}
|
pkgbasename=${pkgbasename%-"$arch"}
|
||||||
|
@@ -34,7 +34,10 @@ for baselib in ${LIBDIR}/base/*.sh; do
|
|||||||
. $baselib
|
. $baselib
|
||||||
done
|
done
|
||||||
|
|
||||||
prepare_dir "${USER_CONF_DIR}"
|
prepare_artools(){
|
||||||
|
prepare_dir "${WORKSPACE_DIR}"
|
||||||
|
prepare_dir "${USER_CONF_DIR}"
|
||||||
|
}
|
||||||
|
|
||||||
load_base_config(){
|
load_base_config(){
|
||||||
|
|
||||||
@@ -50,8 +53,6 @@ load_base_config(){
|
|||||||
|
|
||||||
WORKSPACE_DIR=${WORKSPACE_DIR:-"/home/${OWNER}/artools-workspace"}
|
WORKSPACE_DIR=${WORKSPACE_DIR:-"/home/${OWNER}/artools-workspace"}
|
||||||
|
|
||||||
prepare_dir "${WORKSPACE_DIR}"
|
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -30,8 +30,6 @@ load_iso_config(){
|
|||||||
|
|
||||||
ISO_POOL=${ISO_POOL:-"${WORKSPACE_DIR}/iso"}
|
ISO_POOL=${ISO_POOL:-"${WORKSPACE_DIR}/iso"}
|
||||||
|
|
||||||
prepare_dir "${ISO_POOL}"
|
|
||||||
|
|
||||||
PROFILE='base'
|
PROFILE='base'
|
||||||
|
|
||||||
ISO_VERSION=${ISO_VERSION:-"$(date +%Y%m%d)"}
|
ISO_VERSION=${ISO_VERSION:-"$(date +%Y%m%d)"}
|
||||||
|
Reference in New Issue
Block a user