Compare commits

..

22 Commits

Author SHA1 Message Date
8cc8b66e7f buildpkg & mkchrootpkg: add check switches 2019-10-27 02:23:13 +01:00
0ae8c16801 arch-patches (#17) 2019-10-27 02:38:30 +02:00
bb674109ed buildiso: fix live.conf 2019-10-23 11:47:40 +02:00
ede2ac11e2 buildtree: fix has_changes condition 2019-10-22 12:48:50 +02:00
e8913b07c3 buildiso: adopt kernel changes of version file 2019-10-15 21:21:46 +02:00
f5f9a2acb8 buildiso: fix calamares unpackfs.conf writing 2019-10-10 00:16:07 +02:00
c6f7df51d2 checkpkg: arch patches 2019-10-03 22:42:26 +02:00
b105207138 buildiso: fixes 2019-10-02 11:12:27 +02:00
55e98abdc1 buildiso: fixes grub, s6 2019-09-21 11:58:58 +02:00
896c031ea9 buildtree: fix team assignment of alphanumeric char containing repo names 2019-09-17 11:09:16 +02:00
8f16db45e8 artools.conf: update 2019-09-17 10:47:53 +02:00
47ee03e1a4 buildtree: add java dedicated repo 2019-09-17 10:47:29 +02:00
17f49857e2 buildtree: fix new non arch pkg 2019-09-16 01:00:02 +02:00
68e23f7e47 buildtree: fix import of new pkg 2019-09-13 18:36:25 +02:00
c5228a8b43 makechrootpkg: Revert check if the package failed to install 2019-09-13 00:12:06 +02:00
84151f360f s6iso (#16) 2019-09-13 00:08:31 +02:00
a6ca83be7e start 0.15 2019-09-12 15:35:34 +02:00
0a07a1f1dd buildiso: remove base profile 'inheritance' 2019-09-12 15:35:03 +02:00
9dedb2e4cb buildiso: use global profile var 2019-09-07 20:49:09 +02:00
dcf6ec1d7b buildiso: complete optional livefs 2019-09-07 17:18:32 +02:00
62022faad7 buildiso: make livefs optional 2019-09-07 10:52:42 +02:00
dea81dd9f9 chroot-run: don't bind mount localtime 2019-09-07 10:52:13 +02:00
19 changed files with 224 additions and 115 deletions

View File

@@ -1,4 +1,4 @@
VERSION=0.14 VERSION=0.15
CHROOT_VERSION=0.10 CHROOT_VERSION=0.10

View File

@@ -112,10 +112,10 @@ chroot_extra_mount() {
chroot_add_resolv_conf "$1" chroot_add_resolv_conf "$1"
chroot_mount "/etc/hosts" "$1/etc/hosts" -B chroot_mount "/etc/hosts" "$1/etc/hosts" -B
chroot_mount "${cache_dirs[0]}" "$1${cache_dirs[0]}" -B chroot_mount "${cache_dirs[0]}" "$1${cache_dirs[0]}" -B
if [[ -e /etc/localtime ]];then # if [[ -e /etc/localtime ]];then
[[ -e $1/etc/localtime ]] || touch $1/etc/localtime # [[ -e $1/etc/localtime ]] || touch $1/etc/localtime
chroot_mount "/etc/localtime" "$1/etc/localtime" -B # chroot_mount "/etc/localtime" "$1/etc/localtime" -B
fi # fi
for cache_dir in ${cache_dirs[@]:1}; do for cache_dir in ${cache_dirs[@]:1}; do
chroot_mount "$cache_dir" "$1${cache_dir}" -Br chroot_mount "$cache_dir" "$1${cache_dir}" -Br

View File

@@ -33,7 +33,7 @@ gen_iso_fn(){
prepare_build(){ prepare_build(){
timer_start=$(get_timer) timer_start=$(get_timer)
load_profile "${PROFILE}" load_profile
local pacman_conf pac_file="pacman-default.conf" local pacman_conf pac_file="pacman-default.conf"

View File

@@ -21,6 +21,8 @@ load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/
create_first=false create_first=false
rebuild=false rebuild=false
no_check=false
is_checkpkg=false
mkchrootpkg_args=(-c -n) mkchrootpkg_args=(-c -n)
@@ -33,6 +35,8 @@ usage() {
echo " -r <dir> Create chroots in this directory" echo " -r <dir> Create chroots in this directory"
echo ' -c Recreate the chroot before building' echo ' -c Recreate the chroot before building'
echo ' -m Major rebuild' echo ' -m Major rebuild'
echo ' -N Disable check() function'
echo ' -C Run checkpkg after built'
echo ' -h This help' echo ' -h This help'
echo '' echo ''
echo "Default mkchrootpkg_args args: ${mkchrootpkg_args[*]}" echo "Default mkchrootpkg_args args: ${mkchrootpkg_args[*]}"
@@ -42,13 +46,15 @@ usage() {
orig_argv=("$0" "$@") orig_argv=("$0" "$@")
opts='hcmr:' opts='hcCNmr:'
while getopts "${opts}" arg; do while getopts "${opts}" arg; do
case "${arg}" in case "${arg}" in
r) CHROOTS_PKG="$OPTARG" ;; r) CHROOTS_PKG="$OPTARG" ;;
c) create_first=true ;; c) create_first=true ;;
m) rebuild=true ;; m) rebuild=true ;;
C) is_checkpkg=true; mkchrootpkg_args+=(-C) ;;
N) no_check=true; mkchrootpkg_args+=(-N) ;;
h|?) usage 0 ;; h|?) usage 0 ;;
*) echo "invalid argument '%s'" "${arg}"; usage 1 ;; *) echo "invalid argument '%s'" "${arg}"; usage 1 ;;
esac esac

View File

@@ -73,6 +73,25 @@ show_deps(){
[[ -n ${optdepends[@]} ]] && msg2 "optdepends: %s" "${optdepends[@]}" [[ -n ${optdepends[@]} ]] && msg2 "optdepends: %s" "${optdepends[@]}"
} }
subrepo_new(){
local group="${1:-$GROUP}" team="${2:-$TEAM}"
local dest=${TREE_DIR_ARTIX}/$group/${PACKAGE}/trunk
cd ${TREE_DIR_ARTIX}/$group
local org=$(get_pkg_org "${PACKAGE}")
create_repo "${PACKAGE}" "$org"
add_repo_to_team "${PACKAGE}" "$org" "$team"
subrepo_clone "${PACKAGE}" "$org"
prepare_dir "$dest"
commit_jenkins_files "${PACKAGE}"
}
from_arch(){ from_arch(){
local src= dest= local src= dest=
@@ -103,7 +122,7 @@ from_arch(){
msg2 "Artix Version: %s" "$artixver" msg2 "Artix Version: %s" "$artixver"
else else
subrepo_new "${PACKAGE}" "$tree_dir" "$git_tree_arch" subrepo_new "$tree_dir" "$git_tree_arch"
fi fi
msg "Sync (%s) from [%s] to [%s]" "${PACKAGE}" "$git_tree_arch" "$tree_dir" msg "Sync (%s) from [%s] to [%s]" "${PACKAGE}" "$git_tree_arch" "$tree_dir"
@@ -146,25 +165,6 @@ sync_repos(){
fi fi
} }
subrepo_new(){
local dest=${TREE_DIR_ARTIX}/${GROUP}/${PACKAGE}/trunk
cd ${TREE_DIR_ARTIX}/${GROUP}
local org=$(get_pkg_org "${PACKAGE}")
create_repo "${PACKAGE}" "$org"
add_repo_to_team "${PACKAGE}" "$org" "${TEAM:-$GROUP}"
subrepo_clone "${PACKAGE}" "$org"
prepare_dir "$dest"
commit_jenkins_files "${PACKAGE}"
}
load_user_info load_user_info
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"

View File

@@ -17,33 +17,88 @@
shopt -s extglob shopt -s extglob
# Source makepkg.conf; fail if it is not found
if [[ -r '/etc/makepkg.conf' ]]; then if [[ -r '/etc/makepkg.conf' ]]; then
source '/etc/makepkg.conf' # shellcheck source=makepkg-x86_64.conf
source '/etc/makepkg.conf'
else else
die '/etc/makepkg.conf not found!' die '/etc/makepkg.conf not found!'
fi fi
load_user_info # Source user-specific makepkg.conf overrides
if [[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" ]]; then
# shellcheck source=/dev/null
source "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf"
elif [[ -r "$HOME/.makepkg.conf" ]]; then
# shellcheck source=/dev/null
source "$HOME/.makepkg.conf"
fi
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" usage() {
load_vars /etc/makepkg.conf cat <<- _EOF_
Usage: ${BASH_SOURCE[0]##*/} [OPTIONS]
Searches for a locally built package corresponding to the PKGBUILD, and
downloads the last version of that package from the Pacman repositories.
It then compares the list of .so files provided by each version of the
package and outputs if there are soname differences for the new package.
A directory is also created using mktemp with files containing a file
list for both packages and a library list for both packages.
OPTIONS
-r, --rmdir Remove the temporary directory
-w, --warn Print a warning in case of differences
-h, --help Show this help text
_EOF_
}
RMDIR=0
WARN=0
OPT_SHORT='rwh'
OPT_LONG=('rmdir' 'warn' 'help')
if ! parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@"; then
exit 1
fi
set -- "${OPTRET[@]}"
while :; do
case $1 in
-r|--rmdir)
RMDIR=1
;;
-w|--warn)
WARN=1
;;
-h|--help)
usage
exit 0
;;
--)
shift; break
;;
esac
shift
done
if [[ ! -f PKGBUILD ]]; then if [[ ! -f PKGBUILD ]]; then
die 'This must be run in the directory of a built package.' die 'This must be run in the directory of a built package.'
fi fi
# shellcheck source=PKGBUILD.proto
. ./PKGBUILD . ./PKGBUILD
if [[ $arch == 'any' ]]; then if [[ ${arch[0]} == 'any' ]]; then
CARCH='any' CARCH='any'
fi fi
STARTDIR=$(pwd) STARTDIR=$(pwd)
(( RMDIR )) && trap 'rm -rf $TEMPDIR' EXIT INT TERM QUIT
TEMPDIR=$(mktemp -d --tmpdir checkpkg-script.XXXX) TEMPDIR=$(mktemp -d --tmpdir checkpkg-script.XXXX)
for _pkgname in "${pkgname[@]}"; do for _pkgname in "${pkgname[@]}"; do
comparepkg=$_pkgname comparepkg=$_pkgname
pkgurl= pkgurl=
target_pkgver=$(get_full_version) target_pkgver=$(get_full_version "$_pkgname")
if ! pkgfile=$(find_cached_package "$_pkgname" "$target_pkgver" "$CARCH"); then if ! pkgfile=$(find_cached_package "$_pkgname" "$target_pkgver" "$CARCH"); then
die 'tarball not found for package: %s' "${_pkgname}-$target_pkgver" die 'tarball not found for package: %s' "${_pkgname}-$target_pkgver"
fi fi
@@ -90,9 +145,12 @@ for _pkgname in "${pkgname[@]}"; do
find-libprovides "$TEMPDIR/$oldpkg" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname-old" find-libprovides "$TEMPDIR/$oldpkg" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname-old"
find-libprovides "$pkgfile" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname" find-libprovides "$pkgfile" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname"
if ! diff_output="$(sdiff -s "$TEMPDIR/libraries-$_pkgname-old" "$TEMPDIR/libraries-$_pkgname")"; then if ! diff_output="$(sdiff -s "$TEMPDIR/libraries-$_pkgname-old" "$TEMPDIR/libraries-$_pkgname")"; then
msg "Sonames differ in %s!" "$_pkgname" message="Sonames differ in $_pkgname!"
(( WARN )) && warning "$message" || msg "$message"
echo "$diff_output" echo "$diff_output"
else else
msg "No soname differences for %s" "$_pkgname." msg "No soname differences for %s." "$_pkgname"
fi fi
done done
(( RMDIR )) || msg "Files saved to %s" "$TEMPDIR"

View File

@@ -65,7 +65,6 @@ update_repo2(){
if ${add_pkg};then if ${add_pkg};then
local action='add' local action='add'
packages+=("$name") packages+=("$name")
# checkpkg "${pkgfile}" || return 2
if ${sign_pkg};then if ${sign_pkg};then
[[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig [[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig
signfile ${pkgfile} signfile ${pkgfile}
@@ -109,7 +108,6 @@ update_repo(){
if ${add_pkg};then if ${add_pkg};then
local action='add' local action='add'
packages+=("$pkg") packages+=("$pkg")
# checkpkg "${pkgfile}" || return 2
if ${sign_pkg};then if ${sign_pkg};then
[[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig [[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig
signfile ${pkgfile} signfile ${pkgfile}

View File

@@ -33,6 +33,7 @@ REPO_DB_PREFIX=
REPO_DB_SUFFIX= REPO_DB_SUFFIX=
LOCKFILE= LOCKFILE=
CLEAN_LOCK=0 CLEAN_LOCK=0
PREVENT_DOWNGRADE=0
. @libdir@/artools/util-base.sh . @libdir@/artools/util-base.sh
@@ -52,6 +53,7 @@ Multiple packages to add can be specified on the command line.\n"
printf -- "\n" printf -- "\n"
printf -- "Options:\n" printf -- "Options:\n"
printf -- " -n, --new only add packages that are not already in the database\n" printf -- " -n, --new only add packages that are not already in the database\n"
printf -- "$(gettext " -p, --prevent-downgrade do not add package to database if a newer version is already present\n")"
elif [[ $cmd == "links-remove" ]] ; then elif [[ $cmd == "links-remove" ]] ; then
printf -- "Usage: links-remove [options] <path-to-db> <packagename> ...\n" printf -- "Usage: links-remove [options] <path-to-db> <packagename> ...\n"
printf -- "\n" printf -- "\n"
@@ -199,6 +201,18 @@ db_write_entry() {
if (( ONLYADDNEW )); then if (( ONLYADDNEW )); then
return 0 return 0
fi fi
else
pkgentry=$(find_pkgentry "$pkgname")
if [[ -n $pkgentry ]]; then
local version=$(sed -n '/^%VERSION%$/ {n;p;q}' "$pkgentry/desc")
if (( $(vercmp "$version" "$pkgver") > 0 )); then
warning "$(gettext "A newer version for '%s' is already present in database")" "$pkgname"
if (( PREVENT_DOWNGRADE )); then
return 0
fi
fi
fi
fi fi
# remove an existing entry if it exists, ignore failures # remove an existing entry if it exists, ignore failures
@@ -459,6 +473,7 @@ while (( $# )); do
-s|--sign) SIGN=1 ;; -s|--sign) SIGN=1 ;;
-k|--key) KEY=1 ; shift; GPGKEY=$1 ;; -k|--key) KEY=1 ; shift; GPGKEY=$1 ;;
-v|--verify) VERIFY=1 ;; -v|--verify) VERIFY=1 ;;
-p|--prevent-downgrade) PREVENT_DOWNGRADE=1 ;;
*) args+=("$1") ;; *) args+=("$1") ;;
esac esac
shift shift

View File

@@ -29,7 +29,9 @@ keepbuilddir=0
update_first=0 update_first=0
clean_first=0 clean_first=0
run_namcap=0 run_namcap=0
run_checkpkg=0
temp_chroot=0 temp_chroot=0
run_nocheck=0
bindmounts_ro=() bindmounts_ro=()
bindmounts_rw=() bindmounts_rw=()
@@ -73,6 +75,8 @@ usage() {
echo ' Useful for maintaining multiple copies' echo ' Useful for maintaining multiple copies'
echo " Default: $copy" echo " Default: $copy"
echo '-n Run namcap on the package' echo '-n Run namcap on the package'
echo '-C Run checkpkg on the package'
echo '-N Disable check() function'
echo '-T Build in a temporary directory' echo '-T Build in a temporary directory'
echo '-U Run makepkg as a specified user' echo '-U Run makepkg as a specified user'
exit 1 exit 1
@@ -80,37 +84,31 @@ usage() {
# {{{ functions # {{{ functions
# Usage: sync_chroot $rootdir $copydir [$copy] # Usage: sync_chroot $chrootdir $copydir [$copy]
sync_chroot() { sync_chroot() {
local rootdir=$1 local chrootdir=$1
local copydir=$2 local copydir=$2
local copy=${3:-$2} local copy=${3:-$2}
if [[ "$rootdir" -ef "$copydir" ]]; then if [[ "$chrootdir/root" -ef "$copydir" ]]; then
error 'Cannot sync copy with itself: %s' "$copydir" error 'Cannot sync copy with itself: %s' "$copydir"
return 1 return 1
fi fi
# Get a read lock on the root chroot to make # Get a read lock on the root chroot to make
# sure we don't clone a half-updated chroot # sure we don't clone a half-updated chroot
slock 8 "$rootdir.lock" \ slock 8 "$chrootdir/root.lock" \
"Locking clean chroot [%s]" "$rootdir" "Locking clean chroot [%s]" "$chrootdir/root"
stat_busy "Synchronizing chroot copy [%s] -> [%s]" "$rootdir" "$copy" stat_busy "Synchronizing chroot copy [%s] -> [%s]" "$chrootdir/root" "$copy"
if is_subvolume "$rootdir" && is_same_fs "$rootdir" "$(dirname -- "$copydir")" && ! mountpoint -q "$copydir"; then if is_btrfs "$chrootdir" && ! mountpoint -q "$copydir"; then
if is_subvolume "$copydir"; then subvolume_delete_recursive "$copydir" ||
subvolume_delete_recursive "$copydir" || die "Unable to delete subvolume %s" "$copydir"
die "Unable to delete subvolume %s" "$copydir" btrfs subvolume snapshot "$chrootdir/root" "$copydir" >/dev/null ||
else
# avoid change of filesystem in case of an umount failure
rm --recursive --force --one-file-system "$copydir" ||
die "Unable to delete %s" "$copydir"
fi
btrfs subvolume snapshot "$rootdir" "$copydir" >/dev/null ||
die "Unable to create subvolume %s" "$copydir" die "Unable to create subvolume %s" "$copydir"
else else
mkdir -p "$copydir" mkdir -p "$copydir"
rsync -a --delete -q -W -x "$rootdir/" "$copydir" rsync -a --delete -q -W -x "$chrootdir/root/" "$copydir"
fi fi
stat_done stat_done
@@ -225,14 +223,8 @@ _chrootbuild() {
sudo --preserve-env=SOURCE_DATE_EPOCH -iu builduser bash -c 'cd /startdir; makepkg "$@"' -bash "$@" sudo --preserve-env=SOURCE_DATE_EPOCH -iu builduser bash -c 'cd /startdir; makepkg "$@"' -bash "$@"
ret=$? ret=$?
case $ret in case $ret in
0) 0|14)
return 0;; return 0;;
14)
# whitelist "The package failed to install." but only if there are multiple split packages
# in which case they might be conflicting
local pkgfiles=(/pkgdest/*.pkg.tar.xz)
(( ${#pkgfiles[@]} > 1))
return $?;;
*) *)
return $ret;; return $ret;;
esac esac
@@ -255,9 +247,6 @@ download_sources() {
env SRCDEST="$SRCDEST" BUILDDIR="$WORKDIR" \ env SRCDEST="$SRCDEST" BUILDDIR="$WORKDIR" \
makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o "${verifysource_args[@]}" || makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o "${verifysource_args[@]}" ||
die "Could not download sources." die "Could not download sources."
# Clean up garbage from verifysource
# rm -rf "$builddir"
} }
move_products() { move_products() {
@@ -293,7 +282,7 @@ move_products() {
orig_argv=("$0" "$@") orig_argv=("$0" "$@")
opts='hcur:I:l:nTD:d:U:' opts='hcur:I:l:nNCTD:d:U:'
while getopts "${opts}" arg; do while getopts "${opts}" arg; do
case "$arg" in case "$arg" in
@@ -305,6 +294,8 @@ while getopts "${opts}" arg; do
I) install_pkgs+=("$OPTARG") ;; I) install_pkgs+=("$OPTARG") ;;
l) copy="$OPTARG" ;; l) copy="$OPTARG" ;;
n) run_namcap=1; makepkg_args+=(--install) ;; n) run_namcap=1; makepkg_args+=(--install) ;;
N) run_nocheck=1; makepkg_args+=(--nocheck) ;;
C) run_checkpkg=1 ;;
T) temp_chroot=1; copy+="-$$" ;; T) temp_chroot=1; copy+="-$$" ;;
U) makepkg_user="$OPTARG" ;; U) makepkg_user="$OPTARG" ;;
h|*) usage ;; h|*) usage ;;
@@ -358,7 +349,7 @@ load_vars /etc/makepkg.conf
lock 9 "$copydir.lock" "Locking chroot copy [%s]" "$copy" lock 9 "$copydir.lock" "Locking chroot copy [%s]" "$copy"
if [[ ! -d $copydir ]] || (( clean_first )); then if [[ ! -d $copydir ]] || (( clean_first )); then
sync_chroot "$chrootdir/root" "$copydir" "$copy" sync_chroot "$chrootdir" "$copydir" "$copy"
fi fi
bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest") bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest")
@@ -391,6 +382,11 @@ if chroot-run \
"$copydir" \ "$copydir" \
/chrootbuild "${makepkg_args[@]}" /chrootbuild "${makepkg_args[@]}"
then then
pkgnames=()
for pkgfile in "$copydir"/pkgdest/*; do
pkgfile=${pkgfile##*/};
pkgnames+=("${pkgfile%-*-*-*}");
done
move_products move_products
else else
(( ret += 1 )) (( ret += 1 ))
@@ -405,6 +401,15 @@ if (( ret != 0 )); then
die "Build failed, check %s/build" "$copydir" die "Build failed, check %s/build" "$copydir"
fi fi
else else
if (( run_checkpkg )); then
msg "Running checkpkg"
msg2 "Downloading current versions"
if pacman --noconfirm -Swdd --logfile /dev/null "${pkgnames[@]}"; then
msg2 "Checking packages"
sudo -u "$makepkg_user" checkpkg --rmdir --warn
else
warning "Skipped checkpkg due to missing packages"
fi
fi
true true
fi fi

View File

@@ -19,16 +19,19 @@
# TREE_DIR_ARTIX=${WORKSPACE_DIR}/artixlinux # TREE_DIR_ARTIX=${WORKSPACE_DIR}/artixlinux
# customize buildtree, packages and community should be enabled
# TREE_NAMES_ARTIX=( # TREE_NAMES_ARTIX=(
# packages # packages
# community # community
# packages-kernel # packages-kernel
# packages-openrc # packages-openrc
# packages-runit # packages-runit
# packages-s6
# packages-media # packages-media
# packages-xorg # packages-xorg
# packages-python # packages-python
# packages-perl # packages-perl
# packages-java
# packages-qt5 # packages-qt5
# packages-devel # packages-devel
# packages-ruby # packages-ruby
@@ -61,7 +64,7 @@
# the dist release; default: auto # the dist release; default: auto
# ISO_VERSION=$(date +%Y%m%d) # ISO_VERSION=$(date +%Y%m%d)
# possible values: openrc, runit (s6 not yet supported) # 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 sfs signing

View File

@@ -84,6 +84,7 @@ init_artools_pkg(){
packages-xorg packages-xorg
packages-python packages-python
packages-perl packages-perl
packages-java
packages-qt5 packages-qt5
packages-devel packages-devel
packages-ruby packages-ruby
@@ -94,6 +95,7 @@ init_artools_pkg(){
packages-mate packages-mate
packages-kde packages-kde
packages-xfce packages-xfce
# packages-haskell
) )
HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"} HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"}

View File

@@ -28,6 +28,15 @@ add_svc_runit(){
fi fi
} }
add_svc_s6(){
local mnt="$1" name="$2"
if [[ -d $mnt/etc/s6/sv/$name ]]; then
msg2 "Setting %s ..." "$name"
# chroot $mnt s6-rc-bundle $name default &>/dev/null
# chroot $mnt s6-rc -u change default &>/dev/null
fi
}
set_xdm(){ set_xdm(){
if [[ -f $1/etc/conf.d/xdm ]];then if [[ -f $1/etc/conf.d/xdm ]];then
local conf='DISPLAYMANAGER="'${DISPLAYMANAGER}'"' local conf='DISPLAYMANAGER="'${DISPLAYMANAGER}'"'
@@ -70,6 +79,14 @@ configure_services(){
add_svc_runit "$mnt" "$svc" add_svc_runit "$mnt" "$svc"
done done
;; ;;
's6')
for svc in ${SERVICES[@]}; do
add_svc_s6 "$mnt" "$svc"
done
for svc in ${SERVICES_LIVE[@]}; do
add_svc_s6 "$mnt" "$svc"
done
;;
esac esac
info "Done configuring [%s]" "${INITSYS}" info "Done configuring [%s]" "${INITSYS}"
} }
@@ -77,7 +94,7 @@ configure_services(){
configure_system(){ configure_system(){
local mnt="$1" local mnt="$1"
case ${INITSYS} in case ${INITSYS} in
'openrc' | 'runit') 'openrc' | 'runit'|'s6')
configure_logind "$mnt" "elogind" configure_logind "$mnt" "elogind"
;; ;;
esac esac
@@ -131,6 +148,15 @@ write_servicescfg_conf(){
yaml+=$(write_yaml_map 4 'runlevel' 'default') yaml+=$(write_yaml_map 4 'runlevel' 'default')
done done
;; ;;
's6')
yaml+=$(write_yaml_map 0 'svDir' '/etc/s6/sv')
yaml+=$(write_yaml_map 0 'rcDir' '/etc/s6-rc')
yaml+=$(write_yaml_map 0 'services')
for svc in ${SERVICES[@]};do
yaml+=$(write_yaml_seq_map 2 'name' "$svc")
yaml+=$(write_yaml_map 4 'bundle' 'default')
done
;;
esac esac
yaml+=$(write_empty_line) yaml+=$(write_empty_line)
printf '%s' "${yaml}" printf '%s' "${yaml}"
@@ -142,7 +168,7 @@ write_unpackfs_conf(){
yaml+=$(write_yaml_map 0 'unpack') yaml+=$(write_yaml_map 0 'unpack')
yaml+=$(write_yaml_seq_map 2 'source' "/run/artix/bootmnt/artix/x86_64/rootfs.sfs") yaml+=$(write_yaml_seq_map 2 'source' "/run/artix/bootmnt/artix/x86_64/rootfs.sfs")
yaml+=$(write_yaml_map 4 'sourcefs' 'squashfs') yaml+=$(write_yaml_map 4 'sourcefs' 'squashfs')
yaml+=$(write_yaml_map 4 'destination' '') yaml+=$(write_yaml_map 4 'destination' '""')
yaml+=$(write_empty_line) yaml+=$(write_empty_line)
printf '%s' "${yaml}" printf '%s' "${yaml}"
} }
@@ -159,14 +185,15 @@ configure_calamares(){
fi fi
} }
configure_live_image(){ configure_image(){
local fs="$1" local fs="$1"
msg "Configuring [livefs]" msg "Configuring [%s]" "${fs##*/}"
configure_hosts "$fs" configure_hosts "$fs"
configure_system "$fs" configure_system "$fs"
configure_services "$fs" configure_services "$fs"
configure_calamares "$fs" configure_calamares "$fs"
[[ ! -d "$fs/etc/artools" ]] && mkdir -p "$fs/etc/artools" [[ ! -d "$fs/etc/artools" ]] && mkdir -p "$fs/etc/artools"
msg2 "Writing live.conf"
write_live_session_conf > "$fs/etc/artools/live.conf" write_live_session_conf > "$fs/etc/artools/live.conf"
msg "Done configuring [livefs]" msg "Done configuring [%s]" "${fs##*/}"
} }

View File

@@ -32,7 +32,7 @@ prepare_initramfs(){
su ${OWNER} -c "gpg --export ${GPG_KEY} >/tmp/GPG_KEY" su ${OWNER} -c "gpg --export ${GPG_KEY} >/tmp/GPG_KEY"
exec 17<>/tmp/GPG_KEY exec 17<>/tmp/GPG_KEY
fi fi
local _kernel=$(cat $mnt/usr/lib/modules/*/version) local _kernel=$(<$mnt/usr/src/linux/version)
ARTIX_GNUPG_FD=${GPG_KEY:+17} artools-chroot $mnt \ ARTIX_GNUPG_FD=${GPG_KEY:+17} artools-chroot $mnt \
/usr/bin/mkinitcpio -k ${_kernel} \ /usr/bin/mkinitcpio -k ${_kernel} \
-c /etc/mkinitcpio-artix.conf \ -c /etc/mkinitcpio-artix.conf \
@@ -59,14 +59,13 @@ prepare_boot_extras(){
} }
configure_grub(){ configure_grub(){
local conf="$1/boot/grub/kernels.cfg" sed -e "s|@iso_label@|${iso_label}|" -i ${iso_root}/boot/grub/kernels.cfg
sed -e "s|@iso_label@|${iso_label}|" -i $conf
} }
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 theme=$2/usr/share/grub
local grub=$3/boot/grub efi=$3/efi/boot local grub=${iso_root}/boot/grub efi=${iso_root}/efi/boot
prepare_dir ${grub}/${platform} prepare_dir ${grub}/${platform}
@@ -104,7 +103,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="$3/efi.img" local size=4M mnt="${mnt_dir}/efiboot" efi_img="${iso_root}/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

View File

@@ -44,7 +44,10 @@ mount_overlay(){
mkdir -p "$upper" mkdir -p "$upper"
case $upper in case $upper in
*/livefs) lower="$work/rootfs" ;; */livefs) lower="$work/rootfs" ;;
*/bootfs) lower="$work/livefs":"$work/rootfs" ;; */bootfs)
lower="$work/rootfs"
[[ -d "$work/livefs" ]] && lower="$work/livefs":"$work/rootfs"
;;
esac esac
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"
} }

View File

@@ -12,21 +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.
init_profile(){
local profdir="$1" prof="$2"
ROOT_LIST="$profdir/base/Packages-Root"
ROOT_OVERLAY="$profdir/base/root-overlay"
LIVE_LIST="$profdir/base/Packages-Live"
LIVE_OVERLAY="$profdir/base/live-overlay"
[[ -f "$profdir/$prof/Packages-Root" ]] && ROOT_LIST="$profdir/$prof/Packages-Root"
[[ -d "$profdir/$prof/root-overlay" ]] && ROOT_OVERLAY="$profdir/$prof/root-overlay"
[[ -f "$profdir/$prof/Packages-Live" ]] && LIVE_LIST="$profdir/$prof/Packages-Live"
[[ -d "$profdir/$prof/live-overlay" ]] && LIVE_OVERLAY="$profdir/$prof/live-overlay"
}
show_profile(){ show_profile(){
msg2 "iso_file: %s" "${iso_file}" msg2 "iso_file: %s" "${iso_file}"
msg2 "AUTOLOGIN: %s" "${AUTOLOGIN}" msg2 "AUTOLOGIN: %s" "${AUTOLOGIN}"
@@ -39,15 +24,18 @@ show_profile(){
} }
load_profile(){ load_profile(){
local prof="$1" local profile_dir="${DATADIR}/iso-profiles"
local profdir="${DATADIR}/iso-profiles" [[ -d ${WORKSPACE_DIR}/iso-profiles ]] && profile_dir=${WORKSPACE_DIR}/iso-profiles
[[ -d ${WORKSPACE_DIR}/iso-profiles ]] && profdir=${WORKSPACE_DIR}/iso-profiles
init_profile "$profdir" "$prof" ROOT_LIST="$profile_dir/${PROFILE}/Packages-Root"
ROOT_OVERLAY="$profile_dir/${PROFILE}/root-overlay"
[[ -f $profdir/$prof/profile.conf ]] || return 1 [[ -f "$profile_dir/${PROFILE}/Packages-Live" ]] && LIVE_LIST="$profile_dir/${PROFILE}/Packages-Live"
[[ -d "$profile_dir/${PROFILE}/live-overlay" ]] && LIVE_OVERLAY="$profile_dir/${PROFILE}/live-overlay"
[[ -r $profdir/$prof/profile.conf ]] && . $profdir/$prof/profile.conf [[ -f $profile_dir/${PROFILE}/profile.conf ]] || return 1
[[ -r $profile_dir/${PROFILE}/profile.conf ]] && . $profile_dir/${PROFILE}/profile.conf
DISPLAYMANAGER=${DISPLAYMANAGER:-'none'} DISPLAYMANAGER=${DISPLAYMANAGER:-'none'}
@@ -63,13 +51,13 @@ load_profile(){
ADDGROUPS=${ADDGROUPS:-"video,power,optical,network,lp,scanner,wheel,users,log"} ADDGROUPS=${ADDGROUPS:-"video,power,optical,network,lp,scanner,wheel,users,log"}
if [[ -z ${SERVICES[@]} ]];then if [[ -z ${SERVICES[@]} ]];then
SERVICES=('acpid' 'bluetooth' 'cronie' 'cupsd' 'syslog-ng' 'NetworkManager') SERVICES=('acpid' 'bluetooth' 'cronie' 'cupsd' 'syslog-ng' 'connman')
fi fi
if [[ ${DISPLAYMANAGER} != "none" ]];then if [[ ${DISPLAYMANAGER} != "none" ]];then
case "${INITSYS}" in case "${INITSYS}" in
'openrc') SERVICES+=('xdm') ;; 'openrc') SERVICES+=('xdm') ;;
'runit') SERVICES+=("${DISPLAYMANAGER}") ;; 'runit'|'s6') SERVICES+=("${DISPLAYMANAGER}") ;;
esac esac
fi fi
@@ -81,7 +69,6 @@ load_profile(){
} }
write_live_session_conf(){ write_live_session_conf(){
msg2 "Writing live.conf"
local conf='' local conf=''
conf+=$(printf '%s\n' '# live session configuration') conf+=$(printf '%s\n' '# live session configuration')
conf+=$(printf "\nAUTOLOGIN=%s\n" "${AUTOLOGIN}") conf+=$(printf "\nAUTOLOGIN=%s\n" "${AUTOLOGIN}")
@@ -97,7 +84,7 @@ load_pkgs(){
local _init="s|@$init||g" local _init="s|@$init||g"
case "$init" in case "$init" in
'openrc') _init_rm1="s|@runit.*||g"; _init_rm2="s|@s6*||g" ;; 'openrc') _init_rm1="s|@runit.*||g"; _init_rm2="s|@s6.*||g" ;;
's6') _init_rm1="s|@runit.*||g"; _init_rm2="s|@openrc.*||g" ;; 's6') _init_rm1="s|@runit.*||g"; _init_rm2="s|@openrc.*||g" ;;
'runit') _init_rm1="s|@s6.*||g"; _init_rm2="s|@openrc.*||g" ;; 'runit') _init_rm1="s|@s6.*||g"; _init_rm2="s|@openrc.*||g" ;;
esac esac

View File

@@ -13,9 +13,6 @@
# GNU General Public License for more details. # GNU General Public License for more details.
error_function() { error_function() {
if [[ -p $logpipe ]]; then
rm "$logpipe"
fi
local func="$1" local func="$1"
# first exit all subshells, then print the error # first exit all subshells, then print the error
if (( ! BASH_SUBSHELL )); then if (( ! BASH_SUBSHELL )); then
@@ -134,6 +131,8 @@ make_rootfs() {
copy_overlay "${ROOT_OVERLAY}" "${rootfs}" copy_overlay "${ROOT_OVERLAY}" "${rootfs}"
[[ -z ${LIVE_LIST} ]] && configure_image "${rootfs}"
clean_up_image "${rootfs}" clean_up_image "${rootfs}"
: > ${work_dir}/rootfs.lock : > ${work_dir}/rootfs.lock
@@ -155,7 +154,7 @@ make_livefs() {
copy_overlay "${LIVE_OVERLAY}" "${livefs}" copy_overlay "${LIVE_OVERLAY}" "${livefs}"
configure_live_image "${livefs}" configure_image "${livefs}"
umount_overlay umount_overlay
@@ -198,9 +197,12 @@ make_grub(){
if [[ ! -e ${work_dir}/grub.lock ]]; then if [[ ! -e ${work_dir}/grub.lock ]]; then
msg "Prepare [/iso/boot/grub]" msg "Prepare [/iso/boot/grub]"
prepare_grub "${work_dir}/rootfs" "${work_dir}/livefs" "${iso_root}" local layer=${work_dir}/rootfs
[[ -n ${LIVE_LIST} ]] && layer=${work_dir}/livefs
configure_grub "${iso_root}" prepare_grub "${work_dir}/rootfs" "$layer"
configure_grub
: > ${work_dir}/grub.lock : > ${work_dir}/grub.lock
msg "Done [/iso/boot/grub]" msg "Done [/iso/boot/grub]"
@@ -218,7 +220,7 @@ prepare_images(){
local timer=$(get_timer) local timer=$(get_timer)
load_pkgs "${ROOT_LIST}" "${INITSYS}" load_pkgs "${ROOT_LIST}" "${INITSYS}"
run_safe "make_rootfs" run_safe "make_rootfs"
if [[ -f ${LIVE_LIST} ]]; then if [[ -n ${LIVE_LIST} ]]; then
load_pkgs "${LIVE_LIST}" "${INITSYS}" load_pkgs "${LIVE_LIST}" "${INITSYS}"
run_safe "make_livefs" run_safe "make_livefs"
fi fi

View File

@@ -54,9 +54,10 @@ load_team_id(){
add_repo_to_team(){ add_repo_to_team(){
local pkg="$1" org="$2" team="$3" local pkg="$1" org="$2" team="$3"
local id=$(load_team_id "$org" "$team") local id=$(load_team_id "$org" "$team")
local gitname=$(get_compliant_name "$pkg")
msg2 "Adding package repo [%s] to team (%s)" "$pkg" "$team" msg2 "Adding package repo [%s] to team (%s)" "$gitname" "$team"
curl -s -X PUT "${GIT_URL}/api/v1/teams/$id/repos/$org/$pkg?access_token=${GIT_TOKEN}" \ curl -s -X PUT "${GIT_URL}/api/v1/teams/$id/repos/$org/$gitname?access_token=${GIT_TOKEN}" \
-H "accept: application/json" -H "accept: application/json"
} }

View File

@@ -81,7 +81,7 @@ pull_tree(){
local remote_head=$(get_remote_head) local remote_head=$(get_remote_head)
msg "Checking %s (%s)" "${tree}" "$os" msg "Checking %s (%s)" "${tree}" "$os"
if $(has_changes "${local_head}" "${remote_head}");then if has_changes "${local_head}" "${remote_head}";then
git pull origin master git pull origin master
fi fi
} }

View File

@@ -149,10 +149,13 @@ get_artix_tree(){
$(get_cases ruby)) tree=packages-ruby ;; $(get_cases ruby)) tree=packages-ruby ;;
$(get_cases openrc)) tree=packages-openrc ;; $(get_cases openrc)) tree=packages-openrc ;;
$(get_cases runit)) tree=packages-runit ;; $(get_cases runit)) tree=packages-runit ;;
$(get_cases s6)) tree=packages-s6 ;;
$(get_cases media)) tree=packages-media ;; $(get_cases media)) tree=packages-media ;;
$(get_cases xorg)) tree=packages-xorg ;; $(get_cases xorg)) tree=packages-xorg ;;
$(get_cases qt5)) tree=packages-qt5 ;; $(get_cases qt5)) tree=packages-qt5 ;;
$(get_cases gtk)) tree=packages-gtk ;; $(get_cases gtk)) tree=packages-gtk ;;
$(get_cases java)) tree=packages-java ;;
$(get_cases haskell)) tree=packages-haskell ;;
$(get_cases devel)) tree=packages-devel ;; $(get_cases devel)) tree=packages-devel ;;
$(get_cases lxqt)) tree=packages-lxqt ;; $(get_cases lxqt)) tree=packages-lxqt ;;
$(get_cases cinnamon)) tree=packages-cinnamon ;; $(get_cases cinnamon)) tree=packages-cinnamon ;;