Compare commits

...

89 Commits
0.13.5 ... 0.16

Author SHA1 Message Date
ee55448fe0 buildtree: update patch_pkg() 2019-11-05 21:36:40 +01:00
b3415307b1 buildiso: drop empty yaml lines 2019-11-05 18:32:53 +01:00
2516fccc3b comparepkg: delete list on rerun 2019-11-05 18:23:15 +01:00
45ecb59ffd Makefile: 0.16 2019-11-05 01:03:37 +01:00
11fff303f9 readme: update 2019-11-05 01:00:20 +01:00
b05d1c999f buildiso: write cal postcfg 2019-11-05 00:56:55 +01:00
1572c94389 small fixes 2019-11-04 10:35:31 +01:00
601f7c30ba buildiso: update profile default services 2019-11-03 00:25:37 +01:00
2f37832558 batchpkg: quote vars 2019-11-03 00:25:08 +01:00
bf70341af9 batchpkg: add run option 2019-11-02 16:30:51 +01:00
ea3a06a9bc fix user info 2019-11-02 15:58:50 +01:00
812cf9a317 lib fixes 2019-11-02 15:35:28 +01:00
70aa91ddd8 simplify conf loading 2019-11-02 14:44:07 +01:00
15407b612a batchpkg: add listname arg 2019-11-02 11:09:23 +01:00
8d4adb5b47 chroot-run: always sync localtime from host 2019-11-02 10:40:49 +01:00
85659bfa5e Makefile: update 2019-11-02 01:07:52 +01:00
f0799f85e4 data: rename artools conf files
lib: load new file names
2019-11-02 01:07:36 +01:00
3810656411 conf (#19) 2019-11-01 23:57:02 +01:00
79b99440fc batchpkg & comparepkg: fixes 2019-11-01 21:04:23 +01:00
d353cd8d46 Makefile: include batchpkg 2019-11-01 19:48:31 +01:00
90623d0485 add batchpkg
comparepkg writes a move and upgrade list which batchpkg reads
2019-11-01 19:47:08 +01:00
2c0c3b2032 buildiso: cal conf cleaning 2019-11-01 18:59:18 +01:00
a463f22118 start 0.16 2019-11-01 18:57:56 +01:00
86504ac676 chroot-run: sync host localtime with chroot 2019-11-01 18:56:21 +01:00
450ac445e4 buildiso: adopt new s6 cal module conf 2019-11-01 03:10:21 +01:00
56b350ffd0 buildiso: improve cal services conf writing 2019-11-01 00:02:30 +01:00
a6c4513867 buildiso: rm postcfg sed 2019-10-31 17:49:58 +01:00
c50715f258 buildiso: standardize the services-$init.conf calamares yaml 2019-10-30 10:01:04 +01:00
77296c4527 buildiso: services cleanup 2019-10-29 20:41:04 +01:00
3f419cc41e Merge branch 's6-fixups' of artix/artools into master 2019-10-29 19:30:04 +01:00
60d7ac62a5 buildiso: s6 service fixes 2019-10-29 11:53:35 -05:00
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
e49d2d77bd commitpkg: comment subrepo pull for now 2019-09-04 23:15:49 +02:00
4a06d4d2eb buildtree: add xfce support 2019-08-24 15:00:51 +02:00
231d054ee9 remove useless param in get_full_version() calls 2019-08-23 20:24:26 +02:00
2945493eb7 use var 2019-08-23 20:23:42 +02:00
0f037f1106 finddeps: colorize 2019-08-23 19:45:59 +02:00
6c4197e76d buildtree: enhance check mode 2019-08-22 16:42:38 +02:00
8ebdad278e buildtree: rm args in funcs 2019-08-22 14:18:37 +02:00
2bacf6d19e deploypkg: fix remove in file mode 2019-08-19 23:07:48 +02:00
6700e1a2e6 Merge branch 'deploy' of artix/artools into master 2019-08-19 14:57:15 +02:00
f874c8c399 buildpkg: add a rebuild option
deploypkg: add option to pass filenames
2019-08-18 21:47:27 +02:00
1a5ea6c4ee buildiso: rm log option; clean up 2019-08-12 22:20:21 +02:00
486acaf47a chroot-run: bind mount /etc/localtime if it exists 2019-08-12 18:41:58 +02:00
d5ba8ed404 buildiso: readd lock files 2019-08-12 11:11:04 +02:00
daf4c8283e buildiso: use basestrap instead of mkchroot 2019-08-12 11:00:13 +02:00
7b65c27025 mkchroot: remove locale backups 2019-08-12 10:59:43 +02:00
433a747da9 data: update artools 2019-08-12 00:31:31 +02:00
015c4f0658 buildiso: remove obsolete mount param 2019-08-12 00:07:23 +02:00
b1dd485ec0 initcpio: remove desktopfs from artix and pxe hook 2019-08-11 23:28:04 +02:00
316514698e buildiso: remove desktopfs support 2019-08-11 23:27:32 +02:00
614d6e19c8 mkchroot: rm left over arg 2019-08-11 23:00:13 +02:00
9c650134c4 buildiso: fix mkchroot_args 2019-08-11 22:17:10 +02:00
b849cadbae comparepkg: table adjustments 2019-08-11 22:00:13 +02:00
f1067bcd60 readd checkpkg, finddeps, find-libdeps 2019-08-11 20:14:04 +02:00
3942dde012 buildtree: support -sg <group> 2019-08-11 19:02:59 +02:00
30a6c61f52 arch-patches (#14) 2019-08-11 17:59:07 +02:00
d8195e2288 add media list 2019-08-10 15:29:00 +02:00
bfe9130cfb comparepkg: show group 2019-08-09 18:08:41 +02:00
8873a71824 subrepo.sh: clean up get_pkg_org() 2019-08-09 09:45:30 +02:00
bb86a05f2f support packages-devel 2019-08-08 22:42:55 +02:00
bd611c1af2 Merge branch 'artools-0.14' of artix/artools into master 2019-08-08 22:36:01 +02:00
f4e8f703ea load pkglist from /etc/artools/pkglist.d 2019-08-08 18:42:27 +02:00
aa83bc79bb rm pkglists 2019-08-08 18:15:15 +02:00
1bb9687ece add nemo packages to the cinnamon list 2019-08-01 10:44:45 -04:00
48ced03735 start 0.14 2019-07-31 21:15:22 +02:00
0437e66091 update artools.conf 2019-07-31 21:14:47 +02:00
9af6d02dea update pkglists; add more lists and make code dynamicly generate all cases 2019-07-31 19:13:07 +02:00
46 changed files with 1324 additions and 1105 deletions

View File

@@ -1,6 +1,6 @@
VERSION=0.13
VERSION=0.16
CHROOT_VERSION=0.9
CHROOT_VERSION=0.10
TOOLS = artools
PREFIX ?= /usr
@@ -10,8 +10,8 @@ LIBDIR = $(PREFIX)/lib
DATADIR = $(PREFIX)/share
CPIODIR = $(SYSCONFDIR)/initcpio
CONF = \
data/artools.conf
BASE_CONF = \
data/conf/artools-base.conf
BASE_BIN = \
bin/base/signfile \
@@ -29,6 +29,9 @@ BASE_UTIL = lib/util-base.sh
BASE_DATA = \
$(wildcard data/base/pacman*.conf)
PKG_CONF = \
data/conf/artools-pkg.conf
PKG_BIN = \
bin/pkg/buildpkg \
bin/pkg/deploypkg \
@@ -38,7 +41,11 @@ PKG_BIN = \
bin/pkg/pkg2yaml \
bin/pkg/buildtree \
bin/pkg/lddd \
bin/pkg/links-add
bin/pkg/links-add \
bin/pkg/checkpkg \
bin/pkg/finddeps \
bin/pkg/find-libdeps \
bin/pkg/batchpkg
LN_COMMITPKG = \
extrapkg \
@@ -85,9 +92,6 @@ LN_DEPLOYPKG = \
PKG_LIBS = \
$(wildcard lib/pkg/*)
PKG_LISTS = \
$(wildcard data/pkglists/*.list)
PKG_UTIL = lib/util-pkg.sh
PKG_DATA = \
@@ -96,6 +100,9 @@ PKG_DATA = \
PATCHES = \
$(wildcard data/patches/*.patch)
ISO_CONF = \
data/conf/artools-iso.conf
ISO_BIN = \
bin/iso/buildiso \
bin/iso/deployiso
@@ -151,7 +158,7 @@ clean:
install_base:
install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install $(FILEMODE) $(CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install $(FILEMODE) $(BASE_CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install $(DIRMODE) $(DESTDIR)$(BINDIR)
install $(MODE) $(BASE_BIN) $(DESTDIR)$(BINDIR)
@@ -164,9 +171,14 @@ install_base:
install $(FILEMODE) $(BASE_DATA) $(DESTDIR)$(DATADIR)/$(TOOLS)
install_pkg:
install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install $(FILEMODE) $(PKG_CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install $(DIRMODE) $(DESTDIR)$(BINDIR)
install $(MODE) $(PKG_BIN) $(DESTDIR)$(BINDIR)
$(LN) find-libdeps $(DESTDIR)$(BINDIR)/find-libprovides
$(LN) links-add $(DESTDIR)$(BINDIR)/links-remove
for l in $(LN_COMMITPKG); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done
@@ -183,12 +195,13 @@ install_pkg:
install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches
install $(FILEMODE) $(PATCHES) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches
install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/pkglists
install $(FILEMODE) $(PKG_LISTS) $(DESTDIR)$(DATADIR)/$(TOOLS)/pkglists
install_cpio:
+make CPIODIR=$(CPIODIR) DESTDIR=$(DESTDIR) -C initcpio install
install_iso: install_cpio
install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install $(FILEMODE) $(ISO_CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install $(DIRMODE) $(DESTDIR)$(BINDIR)
install $(MODE) $(ISO_BIN) $(DESTDIR)$(BINDIR)

View File

@@ -39,15 +39,18 @@ artools
#### Configuration
artools.conf is the central configuration file for artools.
By default, the config is installed in
artools-{base,pkg,iso}.conf are the configuration files for artools.
By default, the config files are installed in
/etc/artools/artools.conf
```bash
/etc/artools/artools-{base,pkg,iso}.conf
```
A user artools.conf can be placed in
$HOME/.config/artools/artools.conf
A user artools-{base,pkg,iso}.conf can be placed in
```bash
$HOME/.config/artools/artools-{base,pkg,iso}.conf
```
If the userconfig is present, artools will load the userconfig values, however, if variables have been set in the systemwide
@@ -55,13 +58,17 @@ These values take precedence over the userconfig.
Best practise is to leave systemwide file untouched.
By default it is commented and shows just initialization values done in code.
Tools configuration is done in artools.conf or by args.
Specifying args will override artools.conf settings.
Tools configuration is done in artools-{base,pkg,iso}.conf or by args.
Specifying args will override artools-{base,pkg,iso}.conf settings.
Both, pacman.conf and makepkg.conf for chroots are loaded from
/usr/share/artools/{makepkg,pacman-*}.conf
```bash
usr/share/artools/{makepkg,pacman-*}.conf
```
and can be overridden dropping them in
$HOME/.config/artools/
```bash
$HOME/.config/artools/
```

View File

@@ -46,10 +46,6 @@ select_os(){
fi
}
load_user_info
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
automount=false
usage() {

View File

@@ -36,18 +36,16 @@ copy_keyring(){
create_min_fs(){
msg "Creating install root at %s" "$1"
mkdir -m 0755 -p $1/var/{cache/pacman/pkg,lib/pacman,log} $1/{dev,etc}
mkdir -m 1777 -p $1/{tmp,run}
mkdir -m 0755 -p $1/var/{cache/pacman/pkg,lib/pacman,log} $1/{dev,run,etc/pacman.d}
mkdir -m 1777 -p $1/tmp
mkdir -m 0555 -p $1/{sys,proc}
}
newroot=/mnt
hostcache=false
copykeyring=true
copymirrorlist=true
directory=false
interactive=false
hostcache=0
copykeyring=1
copymirrorlist=1
usage() {
echo "usage: ${0##*/} [options] root [packages...]"
@@ -72,10 +70,10 @@ opts=':C:cGiM'
while getopts ${opts} arg; do
case "${arg}" in
C) pacman_conf=$OPTARG ;;
c) hostcache=true ;;
i) interactive=true ;;
G) copykeyring=false ;;
M) copymirrorlist=false ;;
c) hostcache=1 ;;
i) interactive=1 ;;
G) copykeyring=0 ;;
M) copymirrorlist=0 ;;
:) echo "invalid argument ${arg}:$OPTARG"; usage 1;;
?) usage 0 ;;
esac
@@ -88,9 +86,13 @@ check_root
newroot=$1; shift
pacman_args=("${@:-base}")
${hostcache} || pacman_args+=(--cachedir="$newroot/var/cache/pacman/pkg")
if (( ! hostcache ));then
pacman_args+=(--cachedir="$newroot/var/cache/pacman/pkg")
fi
${interactive} || pacman_args+=(--noconfirm)
if (( ! interactive )); then
pacman_args+=(--noconfirm)
fi
[[ -n $pacman_conf ]] && pacman_args+=(--config="$pacman_conf")
@@ -102,15 +104,16 @@ create_min_fs "$newroot"
# mount API filesystems
chroot_api_mount "$newroot" || die "failed to setup API filesystems in new root"
if (( copykeyring ));then
copy_keyring "$newroot"
fi
msg2 'Installing packages to %s' "$newroot"
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then
die 'Failed to install packages to new root'
fi
if ${copykeyring};then
copy_keyring "$newroot"
fi
if ${copymirrorlist};then
if (( copymirrorlist ));then
copy_mirrorlist "$newroot"
fi

View File

@@ -16,9 +16,12 @@ chroot_version=0.9
. @libdir@/artools/util-base.sh
# umask might have been changed in /etc/profile
# ensure that sane default is set again
umask 0022
working_dir=''
files=()
nosetarch=false
usage() {
echo "Usage: ${0##*/} [options] working-dir [run arguments]"
@@ -45,9 +48,9 @@ while getopts ${opts} arg; do
case "${arg}" in
C) pacman_conf="$OPTARG" ;;
M) makepkg_conf="$OPTARG" ;;
c) cache_dir="$OPTARG" ;;
c) cache_dirs+=("$OPTARG") ;;
f) files+=("$OPTARG") ;;
s) nosetarch=true ;;
s) nosetarch=1 ;;
r) bindmounts_ro=("$OPTARG") ;;
w) bindmounts_rw=("$OPTARG") ;;
h|?) usage ;;
@@ -65,20 +68,33 @@ shift 1
[[ -z $working_dir ]] && die 'Please specify a working directory.'
if [[ -z $cache_dir ]]; then
cache_dirs=($(pacman -v 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g'))
else
cache_dirs=("$cache_dir")
pacconf_cmd=$(command -v pacman-conf || command -v pacconf)
if (( ${#cache_dirs[@]} == 0 )); then
mapfile -t cache_dirs < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" CacheDir)
fi
pacconf_cmd=$(command -v pacman-conf || command -v pacconf)
host_mirrors=($($pacconf_cmd --repo world Server 2> /dev/null | sed -r 's#(.*/)world/os/.*#\1$repo/os/$arch#'))
while read -r line; do
mapfile -t lines < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" \
--repo $line Server | sed -r 's#(.*/)[^/]+/os/.+#\1$repo/os/$arch#')
if [[ ${lines[0]} != ${host_mirrors[0]} ]]; then
for line in "${lines[@]}"; do
if [[ $line = file://* ]]; then
line=${line#file://}
in_array "$line" "${cache_dirs[@]}" || cache_dirs+=("$line")
fi
done
fi
done < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" --repo-list)
copy_hostconf () {
cp -a /etc/pacman.d/gnupg "$1/etc/pacman.d"
unshare --fork --pid gpg --homedir "$working_dir"/etc/pacman.d/gnupg/ --no-permission-warning --quiet --batch --import --import-options import-local-sigs "$(pacman-conf GpgDir)"/pubring.gpg >/dev/null 2>&1
pacman-key --gpgdir "$working_dir"/etc/pacman.d/gnupg/ --import-trustdb "$(pacman-conf GpgDir)" >/dev/null 2>&1
printf 'Server = %s\n' "${host_mirrors[@]}" >"$working_dir/etc/pacman.d/mirrorlist"
[[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf"
[[ -n $makepkg_conf ]] && cp $makepkg_conf "$1/etc/makepkg.conf"
@@ -95,7 +111,6 @@ copy_hostconf () {
chroot_extra_mount() {
chroot_add_resolv_conf "$1"
chroot_mount "/etc/hosts" "$1/etc/hosts" -B
# chroot_mount_conditional "[[ -e $1/etc/machine-id ]]" "/etc/machine-id" "$1/etc/machine-id" -B
chroot_mount "${cache_dirs[0]}" "$1${cache_dirs[0]}" -B
for cache_dir in ${cache_dirs[@]:1}; do
@@ -109,7 +124,7 @@ chroot_extra_mount() {
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')
@@ -118,6 +133,12 @@ chroot_extra_mount() {
done
}
sync_host_localtime(){
if [[ -e /etc/localtime ]]; then
cp -L /etc/localtime "$1"/etc/localtime
fi
}
umask 0022
# Sanity check
@@ -127,6 +148,8 @@ elif [[ $(cat "$working_dir/.artools") != ${CHROOTVERSION} ]]; then
die "chroot '%s' is not at version %s. Please rebuild." "$working_dir" "${CHROOTVERSION}"
fi
sync_host_localtime "${working_dir}"
chroot_api_mount "${working_dir}" || die "failed to setup API filesystems in chroot %s" "${working_dir}"
chroot_extra_mount "${working_dir}"
@@ -135,7 +158,7 @@ copy_hostconf "${working_dir}"
eval $(grep '^CARCH=' "$working_dir/etc/makepkg.conf")
${nosetarch} && unset CARCH
[[ -z $nosetarch ]] || unset CARCH
${CARCH:+setarch "$CARCH"} chroot "${working_dir}" "$@"

View File

@@ -215,7 +215,7 @@ done
[[ $device = *'\040(deleted)' ]] && continue
if [[ $type = file ]]; then
printf '%-20s' "$device"
printf '%-20s' "${device#${root%/}}"
elif [[ $device = /dev/dm-+([0-9]) ]]; then
# device mapper doesn't allow characters we need to worry
# about being mangled, and it does the escaping of dashes

View File

@@ -15,11 +15,9 @@
. @libdir@/artools/util-base.sh
working_dir=''
files=()
nosetarch=false
copy_mirrorlist=true
basestrap_args=(-Gc)
files=()
chroot_args=()
usage() {
echo "Usage: ${0##*/} [options] working-dir package-list..."
@@ -28,7 +26,6 @@ usage() {
echo ' -M <file> Location of a makepkg config file'
echo ' -c <dir> Set pacman cache'
echo ' -f <file> Copy file from the host to the chroot'
echo ' -m Do not copy mirrorlist to the chroot'
echo ' -s Do not run setarch'
echo ' -h This message'
exit 1
@@ -36,7 +33,7 @@ usage() {
orig_argv=("$0" "$@")
opts='hC:M:c:f:sm'
opts='hC:M:c:f:s'
while getopts ${opts} arg; do
case "${arg}" in
@@ -44,11 +41,12 @@ while getopts ${opts} arg; do
M) makepkg_conf="$OPTARG" ;;
c) cache_dir="$OPTARG" ;;
f) files+=("$OPTARG") ;;
s) nosetarch=true ;;
m) copy_mirrorlist=false; basestrap_args+=(-M) ;;
s) nosetarch=1 ;;
h|?) usage ;;
*) error "invalid argument '%s'" "$arg"; usage ;;
esac
chroot_args+=("-$arg")
[[ -v OPTARG ]] && chroot_args+=("$OPTARG")
done
shift $(($OPTIND - 1))
@@ -61,10 +59,10 @@ shift 1
[[ -z $working_dir ]] && die 'Please specify a working directory.'
if [[ -z $cache_dir ]]; then
cache_dirs=($(pacman -v $cache_conf 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g'))
else
cache_dirs=(${cache_dir})
pacconf_cmd=$(command -v pacman-conf || command -v pacconf)
if (( ${#cache_dirs[@]} == 0 )); then
mapfile -t cache_dirs < <($pacconf_cmd CacheDir)
fi
umask 0022
@@ -90,26 +88,15 @@ for f in "${files[@]}"; do
cp "$f" "$working_dir$f"
done
_env=()
while read -r varname; do
_env+=("$varname=${!varname}")
done < <(declare -x | sed -r 's/^declare -x ([^=]*)=.*/\1/' | grep -i '_proxy$')
env -i "${_env[@]}" \
basestrap "${basestrap_args[@]}" ${pacman_conf:+-C "$pacman_conf"} "$working_dir" ${cache_dirs[@]/#/--cachedir=} "$@" || die 'Failed to install all packages'
basestrap -Mc ${pacman_conf:+-C "$pacman_conf"} "$working_dir" \
${cache_dirs[@]/#/--cachedir=} "$@" || die 'Failed to install all packages'
echo "${CHROOTVERSION}" > "$working_dir/.artools"
if [[ ! -f "$working_dir/etc/locale.gen.orig" ]];then
mv "$working_dir/etc/locale.gen" "$working_dir/etc/locale.gen.orig"
fi
printf '%s.UTF-8 UTF-8\n' en_US de_DE > "$working_dir/etc/locale.gen"
echo 'LANG=en_US.UTF-8' > "$working_dir/etc/locale.conf"
echo "${CHROOTVERSION}" > "$working_dir/.artools"
dbus-uuidgen --ensure="$working_dir"/etc/machine-id
chroot_args=(${pacman_conf:+-C "$pacman_conf"} ${makepkg_conf:+-M "$makepkg_conf"} ${cache_dir:+-c "$cache_dir"})
${nosetarch} && chroot_args+=(${nosetarch:+-s})
exec chroot-run \
"${chroot_args[@]}" \
"$working_dir" locale-gen

View File

@@ -16,7 +16,7 @@
load_user_info
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf"
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
load_vars /etc/makepkg.conf
file_to_sign="$1"

View File

@@ -12,13 +12,27 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-iso.sh
gen_iso_fn(){
local vars=("artix") name
vars+=("${PROFILE}")
vars+=("${INITSYS}")
case "${REPOSITORY}" in
'gremlins'|'goblins') vars+=("${REPOSITORY}") ;;
esac
vars+=("${ISO_VERSION}")
vars+=("${ARCH}")
for n in ${vars[@]};do
name=${name:-}${name:+-}${n}
done
echo $name
}
prepare_build(){
timer_start=$(get_timer)
load_profile "${PROFILE}"
load_profile
local pacman_conf pac_file="pacman-default.conf"
@@ -27,13 +41,13 @@ prepare_build(){
esac
pacman_conf="${DATADIR}/$pac_file"
[[ -f ${USERCONFDIR}/artools/$pac_file ]] && pacman_conf="${USERCONFDIR}/artools/$pac_file"
[[ -f ${USER_CONF_DIR}/$pac_file ]] && pacman_conf="${USER_CONF_DIR}/$pac_file"
iso_file=$(gen_iso_fn).iso
iso_label="ARTIX_$(date +%Y%m)"
mkchroot_args+=(-C ${pacman_conf} -m)
basestrap_args+=(-C ${pacman_conf})
work_dir=${CHROOTS_ISO}/${PROFILE}/${ARCH}
iso_dir="${ISO_POOL}/${PROFILE}"
@@ -73,7 +87,9 @@ build(){
lock_close 9
rm -rf --one-file-system "${work_dir}"
clean_iso_root "${iso_root}"
msg "Deleting isoroot [%s] ..." "${iso_root##*/}"
rm -rf --one-file-system "${iso_root}"
fi
if ${iso_only}; then
@@ -93,18 +109,13 @@ build(){
show_elapsed_time "${FUNCNAME}" "${timer_start}"
}
load_user_info
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
clean_first=true
pretend=false
images_only=false
iso_only=false
log=false
persist=false
mkchroot_args=()
basestrap_args=(-GMc)
cmd=${0##*/}
REPOSITORY=${cmd##*-}
@@ -125,7 +136,6 @@ usage() {
echo ' -x Build images only'
echo ' -z Generate iso only'
echo ' Requires pre built images (-x)'
echo ' -l Log to file'
echo ' -q Query settings and pretend build'
echo ' -h This help'
echo ''
@@ -135,7 +145,7 @@ usage() {
orig_argv=("$0" "$@")
opts='p:r:t:i:g:czxmlqh'
opts='p:r:t:i:g:czxmqh'
while getopts "${opts}" arg; do
case "${arg}" in
@@ -148,7 +158,6 @@ while getopts "${opts}" arg; do
x) images_only=true ;;
z) iso_only=true ;;
m) persist=true ;;
l) log=true ;;
q) pretend=true ;;
h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;;

View File

@@ -12,7 +12,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-iso.sh
connect(){
echo "${ACCOUNT}@${FILE_HOST}:${FILE_HOME}"
@@ -30,10 +30,6 @@ sync_dir(){
show_elapsed_time "${FUNCNAME}" "${timer_start}"
}
load_user_info
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
update=false
verbose=false

71
bin/pkg/batchpkg.in Normal file
View File

@@ -0,0 +1,71 @@
#!/bin/bash
#
# Copyright (C) 2018-19 artoo@artixlinux.org
# Copyright (C) 2018 Artix Linux Developers
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. /usr/lib/artools/util-pkg.sh
batch_move() {
local name="${1:-pkg_moves}"
local pkglist=${TREE_DIR_ARTIX}/$name.list
[[ -f $pkglist ]] || die "%s does not exist!" "$pkglist"
while read entry;do
local pkg=${entry##*:}
local src=${entry%:*}
src=${src#*:}
local dest=${entry%%:*}
if ${runlist}; then
"${dest}"pkg -s "${src}" -u -p "${pkg}"
else
msg "%s" "${dest}pkg -s ${src} -u -p ${pkg}"
fi
done < $pkglist
}
# batch_upgrade() {
# local pkglist=${TREE_DIR_ARTIX}/pkg_upgrades.list
# [[ -f $pkglist ]] || die "%s does not exist!" "$pkglist"
# while read entry;do
# local pkg=${entry#*:}
# local dest=${entry%:*}
# echo "buildtree -i -p ${pkg}"
# echo "${dest}pkg -u -p ${pkg}"
# done < $pkglist
# }
usage() {
echo "Usage: ${0##*/} [optional listname]"
echo ' -r Run generated commands'
echo ' -h This help'
echo ''
echo ''
exit $1
}
movelistname=pkg_moves
runlist=false
opts='rh'
while getopts "${opts}" arg; do
case "${arg}" in
r) runlist=true ;;
h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;;
esac
done
shift $(($OPTIND - 1))
movelistname="$1"; shift
batch_move "$movelistname"

View File

@@ -12,14 +12,12 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh
load_user_info
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
create_first=false
rebuild=false
no_check=false
is_checkpkg=false
mkchrootpkg_args=(-c -n)
@@ -27,22 +25,13 @@ cmd=${0##*/}
repo=${cmd#*-}
base_devel=('base-devel')
case ${repo} in
system|world|galaxy) repo='default' ;;
lib32*) base_devel+=('multilib-devel') ;;
galaxy-gremlins|galaxy-goblins) repo=${repo#*-} ;;
esac
pacman_conf="${DATADIR}/pacman-${repo}.conf"
[[ -f ${USERCONFDIR}/artools/pacman-${repo}.conf ]] && pacman_conf="${USERCONFDIR}/artools/pacman-${repo}.conf"
makepkg_conf="${DATADIR}/makepkg.conf"
[[ -f ${USERCONFDIR}/artools/makepkg.conf ]] && makepkg_conf="${USERCONFDIR}/artools/makepkg.conf"
usage() {
echo "Usage: ${0##*/} [options] -- [mkchrootpkg_args]"
echo " -r <dir> Create chroots in this directory"
echo ' -c Recreate the chroot before building'
echo ' -m Major rebuild'
echo ' -N Disable check() function'
echo ' -C Run checkpkg after built'
echo ' -h This help'
echo ''
echo "Default mkchrootpkg_args args: ${mkchrootpkg_args[*]}"
@@ -52,17 +41,36 @@ usage() {
orig_argv=("$0" "$@")
opts='hcr:'
opts='hcCNmr:'
while getopts "${opts}" arg; do
case "${arg}" in
r) CHROOTS_PKG="$OPTARG" ;;
c) create_first=true ;;
m) rebuild=true ;;
C) is_checkpkg=true; mkchrootpkg_args+=(-C) ;;
N) no_check=true; mkchrootpkg_args+=(-N) ;;
h|?) usage 0 ;;
*) echo "invalid argument '%s'" "${arg}"; usage 1 ;;
esac
done
if ${rebuild};then
repo='default'
else
case ${repo} in
system|world|galaxy) repo='default' ;;
lib32*) base_devel+=('multilib-devel') ;;
galaxy-gremlins|galaxy-goblins) repo=${repo#*-} ;;
esac
fi
pacman_conf="${DATADIR}/pacman-${repo}.conf"
[[ -f ${USER_CONF_DIR}/pacman-${repo}.conf ]] && pacman_conf="${USER_CONF_DIR}/pacman-${repo}.conf"
makepkg_conf="${DATADIR}/makepkg.conf"
[[ -f ${USER_CONF_DIR}/makepkg.conf ]] && makepkg_conf="${USER_CONF_DIR}/makepkg.conf"
check_root SOURCE_DATE_EPOCH
mkchrootpkg_args+=("${@:$OPTIND}")
@@ -94,7 +102,7 @@ else
-C "${pacman_conf}" \
-M "${makepkg_conf}" \
"${CHROOTS_PKG}/${repo}-${ARCH}/root" \
pacman -Syu --noconfirm || abort
pacman -Syuu --noconfirm || abort
fi
# Always build official packages reproducibly

View File

@@ -12,9 +12,39 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh
patch_pkg(){
local pkg="$1"
case $pkg in
glibc)
sed -e 's|{locale,systemd/system,tmpfiles.d}|{locale,tmpfiles.d}|' \
-e '/nscd.service/d' \
-i $pkg/trunk/PKGBUILD
;;
linux|linux-lts)
sed -e 's|KBUILD_BUILD_HOST=.*|KBUILD_BUILD_HOST=artixlinux|' -i $pkg/trunk/PKGBUILD
sed -e 's|CONFIG_DEFAULT_HOSTNAME=.*|CONFIG_DEFAULT_HOSTNAME="artixlinux"|' \
-i $pkg/trunk/config
;;
bash)
sed -e 's|system.bash_logout)|system.bash_logout artix.bashrc)|' \
-e "s|etc/bash.|etc/bash/|g" \
-e 's|"$pkgdir/etc/skel/.bash_logout"|"$pkgdir/etc/skel/.bash_logout"\n install -Dm644 artix.bashrc $pkgdir/etc/bash/bashrc.d/artix.bashrc|' \
-i $pkg/trunk/PKGBUILD
cd $pkg/trunk
patch -Np 1 -i ${DATADIR}/patches/artix-bash.patch
updpkgsums
cd ../..
;;
gstreamer|gst-plugins-*|licenses)
sed -e 's|https://www.archlinux.org/|https://www.artixlinux.org/|' \
-e 's|(Arch Linux)|(Artix Linux)|' \
-i $pkg/trunk/PKGBUILD
;;
esac
}
pull_tree_arch(){
cd ${TREE_DIR_ARCH}
for tree in ${TREE_NAMES_ARCH[@]};do
@@ -29,8 +59,9 @@ pull_tree_arch(){
}
pull_tree_artix(){
local repos=("$1")
cd ${TREE_DIR_ARTIX}
for tree in ${TREE_NAMES_ARTIX[@]};do
for tree in ${repos[@]};do
if [[ -d ${tree} ]];then
config_tree "${tree}"
cd ${tree}
@@ -57,7 +88,7 @@ show_deps(){
[[ $arch == 'any' ]] && CARCH=any
local archver=$(get_full_version $pkg)
local archver=$(get_full_version)
msg2 "repo: %s" "$repo"
[[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}"
@@ -72,20 +103,42 @@ show_deps(){
[[ -n ${optdepends[@]} ]] && msg2 "optdepends: %s" "${optdepends[@]}"
}
from_arch(){
local pkg="$1" src= dest=
local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "$pkg")
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg"
subrepo_new(){
local group="${1:-$GROUP}" team="${2:-$TEAM}"
local dest=${TREE_DIR_ARTIX}/$group/${PACKAGE}/trunk
local package=${TREE_DIR_ARCH}/$git_tree_arch/$pkg
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(){
local src= dest=
cd ${TREE_DIR_ARTIX}
local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "${PACKAGE}")
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "${PACKAGE}"
local package=${TREE_DIR_ARCH}/$git_tree_arch/${PACKAGE}
local repo=$(find_repo "$package" "${staging}" "${unstable}")
src=$package/repos/$repo
local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "$pkg")
local tree_dir=$(get_artix_tree "$pkg" "$git_tree_artix" "$git_tree_arch")
local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}")
local tree_dir=$(get_artix_tree "${PACKAGE}" "$git_tree_artix" "$git_tree_arch")
dest=${TREE_DIR_ARTIX}/$tree_dir/$pkg/trunk
dest=${TREE_DIR_ARTIX}/$tree_dir/${PACKAGE}/trunk
msg "tree: %s" "$tree_dir"
show_deps "$src" "$repo"
@@ -95,25 +148,25 @@ from_arch(){
cd ${TREE_DIR_ARTIX}/$git_tree_artix
. $dest/PKGBUILD 2>/dev/null
local artixver=$(get_full_version $pkg)
local artixver=$(get_full_version)
msg2 "Artix Version: %s" "$artixver"
else
subrepo_new "$pkg" "$tree_dir" "$git_tree_arch"
subrepo_new "$tree_dir" "$git_tree_arch"
fi
msg "Sync (%s) from [%s] to [%s]" "$pkg" "$git_tree_arch" "$tree_dir"
msg "Sync (%s) from [%s] to [%s]" "${PACKAGE}" "$git_tree_arch" "$tree_dir"
sync_pkg "$src" "$dest"
patch_pkg "$pkg"
patch_pkg "${PACKAGE}"
}
view_build(){
local pkg="$1" src=
local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "$pkg")
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg"
local src=
local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "${PACKAGE}")
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "${PACKAGE}"
local pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/$pkg
local pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/${PACKAGE}
local repo=$(find_repo "$pkg_path" "${staging}" "${unstable}")
src=$pkg_path/repos/$repo
@@ -121,15 +174,28 @@ view_build(){
show_deps "$src" "$repo"
}
sync_repos(){
${sync_arch} && pull_tree_arch
${sync_artix} && pull_tree_artix
check_tree(){
local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "${PACKAGE}")
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "${PACKAGE}"
local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}")
local tree_dir=$(get_artix_tree "${PACKAGE}" "$git_tree_artix" "$git_tree_arch")
msg "tree_dir: %s" "$tree_dir"
[[ -z $git_tree_artix ]] && msg2 "exists: %s" "no"
[[ -n $git_tree_artix ]] && msg2 "exists: %s" "yes"
}
load_user_info
sync_repos(){
${sync_arch} && pull_tree_arch
if ${sync_artix};then
if ${sync_group}; then
pull_tree_artix "${GROUP}"
else
pull_tree_artix "${TREE_NAMES_ARTIX[*]}"
fi
fi
}
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf"
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
load_vars /etc/makepkg.conf
sync=false
@@ -141,6 +207,8 @@ createnew=false
conf=false
unstable=false
staging=true
sync_group=false
check=false
PACKAGE=''
@@ -152,7 +220,7 @@ usage() {
echo ' -p <pkg> Package name'
echo ' -t <team> Team name (only with -n)'
echo " [default: ${TEAM}]"
echo ' -g <group> Group name, the superrepo (only with -n)'
echo ' -g <group> Group name, the superrepo (only with -n or -s)'
echo " [default: ${GROUP}]"
echo " -s Clone or pull repos"
echo " -z Don't clone or pull arch repos"
@@ -161,7 +229,8 @@ usage() {
echo ' -n Make new remote subrepo and clone it'
echo ' -u Include kde & gnome unstable (only with -i)'
echo ' -w Exclude staging (only with -i)'
echo ' -v View package depends'
echo ' -v Check if a package is in the artix tree(s)'
echo ' -c View package depends'
echo ' -h This help'
echo ''
echo ''
@@ -170,13 +239,13 @@ usage() {
orig_argv=("$0" "$@")
opts='p:t:g:uwsinzyvh'
opts='p:t:g:uwsinzycvh'
while getopts "${opts}" arg; do
case "${arg}" in
p) PACKAGE="$OPTARG" ;;
t) TEAM="$OPTARG" ;;
g) GROUP="$OPTARG" ;;
g) GROUP="$OPTARG"; sync_group=true ;;
s) sync=true ;;
z) sync_arch=false ;;
y) sync_artix=false ;;
@@ -184,6 +253,7 @@ while getopts "${opts}" arg; do
n) createnew=true ;;
w) staging=false ;;
u) unstable=true ;;
c) check=true ;;
v) view=true ;;
h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;;
@@ -197,8 +267,10 @@ prepare_dir "${TREE_DIR_ARCH}"
${sync} && sync_repos
${view} && view_build "${PACKAGE}"
${view} && view_build
${import} && from_arch "${PACKAGE}"
${check} && check_tree
${createnew} && subrepo_new "${PACKAGE}" "${GROUP}" "${TEAM}"
${import} && from_arch
${createnew} && subrepo_new

155
bin/pkg/checkpkg.in Normal file
View File

@@ -0,0 +1,155 @@
#!/bin/bash
#
# Copyright (C) 2018-19 artoo@artixlinux.org
# Copyright (C) 2018 Artix Linux Developers
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. @libdir@/artools/util-pkg.sh
shopt -s extglob
# Source makepkg.conf; fail if it is not found
if [[ -r '/etc/makepkg.conf' ]]; then
# shellcheck source=makepkg-x86_64.conf
source '/etc/makepkg.conf'
else
die '/etc/makepkg.conf not found!'
fi
# Source user-specific makepkg.conf overrides
if [[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" ]]; then
# shellcheck source=/dev/null
source "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf"
elif [[ -r "$HOME/.makepkg.conf" ]]; then
# shellcheck source=/dev/null
source "$HOME/.makepkg.conf"
fi
usage() {
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
die 'This must be run in the directory of a built package.'
fi
# shellcheck source=PKGBUILD.proto
. ./PKGBUILD
if [[ ${arch[0]} == 'any' ]]; then
CARCH='any'
fi
STARTDIR=$(pwd)
(( RMDIR )) && trap 'rm -rf $TEMPDIR' EXIT INT TERM QUIT
TEMPDIR=$(mktemp -d --tmpdir checkpkg-script.XXXX)
for _pkgname in "${pkgname[@]}"; do
comparepkg=$_pkgname
pkgurl=
target_pkgver=$(get_full_version "$_pkgname")
if ! pkgfile=$(find_cached_package "$_pkgname" "$target_pkgver" "$CARCH"); then
die 'tarball not found for package: %s' "${_pkgname}-$target_pkgver"
fi
ln -s "$pkgfile" "$TEMPDIR"
if (( $# )); then
case $1 in
/*|*/*)
pkgurl=file://$(readlink -m "$1") ;;
*.pkg.tar*)
pkgurl=$1 ;;
'')
;;
*)
comparepkg=$1 ;;
esac
shift
fi
[[ -n $pkgurl ]] || pkgurl=$(pacman -Spdd --print-format '%l' --noconfirm "$comparepkg") ||
die "Couldn't download previous package for %s." "$comparepkg"
oldpkg=${pkgurl##*/}
if [[ ${oldpkg} = "${pkgfile##*/}" ]]; then
die "The built package (%s) is the one in the repo right now!" "$_pkgname"
fi
if [[ $pkgurl = file://* || ( $pkgurl = /* && -f $pkgurl ) ]]; then
ln -s "${pkgurl#file://}" "$TEMPDIR/$oldpkg"
elif [[ -f "$PKGDEST/$oldpkg" ]]; then
ln -s "$PKGDEST/$oldpkg" "$TEMPDIR/$oldpkg"
elif [[ -f "$STARTDIR/$oldpkg" ]]; then
ln -s "$STARTDIR/$oldpkg" "$TEMPDIR/$oldpkg"
else
curl -fsLC - --retry 3 --retry-delay 3 -o "$TEMPDIR/$oldpkg" "$pkgurl"
fi
bsdtar tf "$TEMPDIR/$oldpkg" | sort > "$TEMPDIR/filelist-$_pkgname-old"
bsdtar tf "$pkgfile" | sort > "$TEMPDIR/filelist-$_pkgname"
sdiff -s "$TEMPDIR/filelist-$_pkgname-old" "$TEMPDIR/filelist-$_pkgname"
find-libprovides "$TEMPDIR/$oldpkg" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname-old"
find-libprovides "$pkgfile" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname"
if ! diff_output="$(sdiff -s "$TEMPDIR/libraries-$_pkgname-old" "$TEMPDIR/libraries-$_pkgname")"; then
message="Sonames differ in $_pkgname!"
(( WARN )) && warning "$message" || msg "$message"
echo "$diff_output"
else
msg "No soname differences for %s." "$_pkgname"
fi
done
(( RMDIR )) || msg "Files saved to %s" "$TEMPDIR"

View File

@@ -12,7 +12,6 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh
get_path(){
@@ -74,7 +73,7 @@ commit_pkg(){
${push} && pull_tree "${git_tree}" "$head"
subrepo_pull "${PACKAGE}"
# subrepo_pull "${PACKAGE}"
subrepo_push "${PACKAGE}"
subrepo_clean "${PACKAGE}"
@@ -130,7 +129,7 @@ symlink_commit_pkg(){
${push} && pull_tree "${git_tree}" "$head"
subrepo_pull "${PACKAGE}"
# subrepo_pull "${PACKAGE}"
subrepo_push "${PACKAGE}"
subrepo_clean "${PACKAGE}"
@@ -142,10 +141,7 @@ symlink_commit_pkg(){
fi
}
load_user_info
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf"
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
load_vars /etc/makepkg.conf
REPO_SRC='trunk'

View File

@@ -12,20 +12,19 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh
compare(){
local pkgpath="$1"
local pkgpath="$1" group="$2"
local pkg=${pkgpath##*/}
local artixrepo=$(find_repo "$package" "${staging}" "${unstable}")
local artixrepo=$(find_repo "$pkgpath" "${staging}" "${unstable}")
local artixshow=${artixrepo%-*}
local pkgbuild=$pkgpath/repos/$artixrepo/PKGBUILD
if [[ -f $pkgbuild ]];then
. $pkgbuild 2>/dev/null
local artixver=$(get_full_version $pkg)
local artixver=$(get_full_version)
local archpath=$(get_import_path $pkg)
@@ -36,7 +35,7 @@ compare(){
if [[ -f $pkgbuild ]];then
. $pkgbuild 2>/dev/null
local archver=$(get_full_version $pkg)
local archver=$(get_full_version)
fi
local result=$(vercmp "$artixver" "$archver")
@@ -50,9 +49,13 @@ compare(){
case $artixrepo in
*testing*|*staging*)
if $repomatch;then
msg_row "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver"
msg_row "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
else
msg_row_notify "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver"
msg_row_notify "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
if [[ -n "$archshow" ]]; then
printf "%s\n" "$archshow:$artixshow:$pkg" >> ${TREE_DIR_ARTIX}/pkg_moves.list
fi
fi
;;
esac
@@ -61,14 +64,16 @@ compare(){
elif ${upgrades};then
if [ $result -eq -1 ];then
msg_row_upgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver"
msg_row_upgrade "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
printf "%s\n" "$archshow:$pkg" >> ${TREE_DIR_ARTIX}/pkg_upgrades.list
fi
elif ${downgrades};then
if [ $result -eq 1 ];then
if [[ -n $archver ]] && [[ -n $archrepo ]];then
msg_row_downgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver"
msg_row_downgrade "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
fi
fi
@@ -80,7 +85,7 @@ compare(){
is_db_entry() {
local pkgname="$1" repo="$(arch2artix $2)"
if [[ -d ${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/$repo/$pkgname ]];then
if [[ -d ${USER_CACHE_DIR}/${LINKSDBEXT}/${ARCH}/$repo/$pkgname ]];then
return 0
fi
return 1
@@ -101,7 +106,7 @@ check_db(){
if [[ -f $pkgbuild ]];then
. $pkgbuild 2>/dev/null
local artixver=$(get_full_version $pkg)
local artixver=$(get_full_version)
local is_entry=false
for name in ${pkgname[@]};do
@@ -110,7 +115,7 @@ check_db(){
is_entry=true
fi
if ! $is_entry; then
msg_row "%-20s %-35s %-20s %-10s" "$repo" "$name" "$artixver" "$is_entry"
msg_row "${tableU}" "$repo" "$name" "$artixver" "$is_entry"
fi
done
unset artixver is_entry pkgbuild pkgver epoch pkgname pkgbase
@@ -122,28 +127,27 @@ check_db(){
update_db_cache(){
msg "Updating database cache"
for repo in "${searchrepos[@]}"; do
local cachedir=${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/${repo}
local cachedir=${USER_CACHE_DIR}/${LINKSDBEXT}/${ARCH}/${repo}
rm -rf "$cachedir"
mkdir -p "$cachedir"
msg2 "%s" "$repo"
curl -s "${REPOS_MIRROR}/${repo}/os/${ARCH}/${repo}.${LINKSDBEXT}" \
curl -L -s "${REPOS_MIRROR}/${repo}/os/${ARCH}/${repo}.${LINKSDBEXT}" \
| bsdtar -xf - -C "$cachedir"
done
msg "Done"
}
query_db() {
msg_table_header "%-20s %-45s %s" "Repo" "Package" "Library"
for repo in "${searchrepos[@]}"; do
local prefix=
local db=${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/${repo}/
local db=${USER_CACHE_DIR}/${LINKSDBEXT}/${ARCH}/${repo}/
if [[ -d ${db} ]]; then
while read -rd '' pkg; do
read -r match
pkg=${pkg#${db}}
pkg="${pkg%/*}"
msg_row "%-20s %-45s %s" "${repo}" "${pkg}" "${match}"
msg_row "${tableQ}" "${repo}" "${pkg}" "${match}"
done < <(grep -rZ "${library}" "${db}") | sort -u
fi
done
@@ -154,32 +158,34 @@ show_version_table(){
if ${check};then
${sync} && update_db_cache
msg_table_header "%-20s %-35s %-20s %-10s" "Repo" "Package" "Version" "Database"
msg_table_header "${tableU}" "Repo" "Package" "Version" "Database"
elif ${query};then
${sync} && update_db_cache
msg_table_header "${tableQ}" "Repo" "Package" "Library"
query_db
else
msg_table_header "%-20s %-20s %-25s %-30s %-30s" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version"
msg_table_header "${table}" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" "Group"
fi
if ${move} && [[ -f ${TREE_DIR_ARTIX}/pkg_moves.list ]]; then
rm ${TREE_DIR_ARTIX}/pkg_moves.list
elif ${upgrades} && [[ -f ${TREE_DIR_ARTIX}/pkg_upgrades.list ]]; then
rm ${TREE_DIR_ARTIX}/pkg_upgrades.list
fi
for tree in ${TREE_NAMES_ARTIX[@]};do
local git=$(find ${TREE_DIR_ARTIX}/$tree/ -mindepth 1 -maxdepth 1 -type d)
for package in ${git[@]}; do
if ${check};then
check_db "$package"
else
compare "$package"
compare "$package" "$tree"
fi
done
done
}
load_user_info
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf"
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
load_vars /etc/makepkg.conf
unstable=false
@@ -198,6 +204,10 @@ artix_repos=(
'gnome-wobble' 'kde-wobble'
)
readonly table="%-18s %-18s %-25s %-27s %-27s %-10s"
readonly tableU="%-20s %-35s %-30s %-10s"
readonly tableQ="%-20s %-45s %s"
searchrepos=(${artix_repos[@]})
usage() {

View File

@@ -12,9 +12,80 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh
find_cached_pkgfile() {
local searchdirs=("$PKGDEST" "$PWD") results=()
local pkg="$1"
for dir in "${searchdirs[@]}"; do
[[ -d $dir ]] || continue
results+=$(find "$dir" -type f -name "$pkg")
done
case ${#results[*]} in
0)
return 1
;;
1)
printf '%s\n' "${results[0]}"
return 0
;;
*)
error 'Multiple packages found:'
printf '\t%s\n' "${results[@]}" >&2
return 1
;;
esac
}
get_pkgbasename(){
local pkg="$1"
local pkgbasename name ver rel arch
pkgbasename=${pkg%.pkg.tar.?z}
arch=${pkgbasename##*-}
pkgbasename=${pkgbasename%-"$arch"}
rel=${pkgbasename##*-}
pkgbasename=${pkgbasename%-"$rel"}
ver=${pkgbasename##*-}
name=${pkgbasename%-"$ver"}
echo $name
}
update_repo2(){
local repo="$1"
local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=()
for name in ${passfiles[@]}; do
if pkgfile=$(find_cached_pkgfile "$name");then
info "Found: %s" "$name"
if ${add_pkg};then
local action='add'
packages+=("$name")
if ${sign_pkg};then
[[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig
signfile ${pkgfile}
fi
ln -sf ${pkgfile}{,.sig} $repo_path/
elif ${del_pkg};then
local action='remove'
packages+=("$(get_pkgbasename "$name")")
[[ -e $repo_path/$name ]] && rm $repo_path/$name
[[ -e $repo_path/$name.sig ]] && rm $repo_path/$name.sig
fi
fi
done
cd $repo_path
if [[ -n $action ]]; then
repo-$action -R $repo.${PKGDBEXT} ${packages[@]}
${linksdb} && links-$action $repo.${LINKSDBEXT} ${packages[@]}
fi
return 0
}
update_repo(){
local repo="$1" pkgfile ver
local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=()
@@ -29,14 +100,13 @@ update_repo(){
for name in ${pkgsearch[@]}; do
pkgarch=$(get_pkg_arch "$name")
ver=$(get_full_version "$name")
ver=$(get_full_version)
if pkgfile=$(find_cached_package "$name" "$ver" "$pkgarch");then
local pkg=${pkgfile##*/}
info "Found: %s" "$pkg"
if ${add_pkg};then
local action='add'
packages+=("$pkg")
# checkpkg "${pkgfile}" || return 2
if ${sign_pkg};then
[[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig
signfile ${pkgfile}
@@ -59,10 +129,7 @@ update_repo(){
return 0
}
load_user_info
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf"
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
load_vars /etc/makepkg.conf
add_pkg=false
@@ -100,6 +167,12 @@ done
shift $(($OPTIND - 1))
passfiles="$@"
prepare_dir "${REPOS_ROOT}"
update_repo "${dest_repo}"
if [[ -n ${passfiles[@]} ]]; then
update_repo2 "${dest_repo}"
else
update_repo "${dest_repo}"
fi

100
bin/pkg/find-libdeps.in Normal file
View File

@@ -0,0 +1,100 @@
#!/bin/bash
#
# Copyright (C) 2018-19 artoo@artixlinux.org
# Copyright (C) 2018 Artix Linux Developers
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh
set -e
shopt -s extglob
IGNORE_INTERNAL=0
if [[ $1 = "--ignore-internal" ]]; then
IGNORE_INTERNAL=1
shift
fi
script_mode=${BASH_SOURCE[0]##*/find-lib}
case $script_mode in
deps|provides) true;;
*) die "Unknown mode %s" "$script_mode" ;;
esac
if [[ -z $1 ]]; then
echo "${0##*/} [options] <package file|extracted package dir>"
echo "Options:"
echo " --ignore-internal ignore internal libraries"
exit 1
fi
if [[ -d $1 ]]; then
pushd "$1" >/dev/null
else
setup_workdir
case ${script_mode} in
deps) bsdtar -C "$WORKDIR" -xf "$1";;
provides) bsdtar -C "$WORKDIR" -xf "$1" --include="*.so*";;
esac
pushd "$WORKDIR" >/dev/null
fi
process_sofile() {
# extract the library name: libfoo.so
soname="${sofile%.so?(+(.+([0-9])))}".so
# extract the major version: 1
soversion="${sofile##*\.so\.}"
if [[ "$soversion" = "$sofile" ]] && ((IGNORE_INTERNAL)); then
return
fi
if ! in_array "${soname}=${soversion}-${soarch}" "${soobjects[@]}"; then
# libfoo.so=1-64
echo "${soname}=${soversion}-${soarch}"
soobjects+=("${soname}=${soversion}-${soarch}")
fi
}
case $script_mode in
deps) find_args=(-perm -u+x);;
provides) find_args=(-name '*.so*');;
esac
find . -type f "${find_args[@]}" | while read -r filename; do
if [[ $script_mode = "provides" ]]; then
# ignore if we don't have a shared object
if ! LC_ALL=C readelf -h "$filename" 2>/dev/null | grep -q '.*Type:.*DYN (Shared object file).*'; then
continue
fi
fi
# get architecture of the file; if soarch is empty it's not an ELF binary
soarch=$(LC_ALL=C readelf -h "$filename" 2>/dev/null | sed -n 's/.*Class.*ELF\(32\|64\)/\1/p')
[[ -n $soarch ]] || continue
if [[ $script_mode = "provides" ]]; then
# get the string binaries link to: libfoo.so.1.2 -> libfoo.so.1
sofile=$(LC_ALL=C readelf -d "$filename" 2>/dev/null | sed -n 's/.*Library soname: \[\(.*\)\].*/\1/p')
[[ -z $sofile ]] && sofile="${filename##*/}"
process_sofile
elif [[ $script_mode = "deps" ]]; then
# process all libraries needed by the binary
for sofile in $(LC_ALL=C readelf -d "$filename" 2>/dev/null | sed -nr 's/.*Shared library: \[(.*)\].*/\1/p'); do
process_sofile
done
fi
done
popd >/dev/null

50
bin/pkg/finddeps.in Normal file
View File

@@ -0,0 +1,50 @@
#!/bin/bash
#
# Copyright (C) 2018-19 artoo@artixlinux.org
# Copyright (C) 2018 Artix Linux Developers
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. @libdir@/artools/util-base.sh
match=$1
if [[ -z $match ]]; then
echo 'Usage: finddeps <depname>'
echo ''
echo 'Find packages that depend on a given depname.'
echo 'Run this script from the top-level directory of your ABS tree.'
echo ''
exit 1
fi
find . -type d -print0 2>/dev/null| while read -r -d '' d; do
if [[ -f "$d/PKGBUILD" ]]; then
pkgname=() depends=() makedepends=() optdepends=()
# shellcheck source=PKGBUILD.proto
. "$d/PKGBUILD"
for dep in "${depends[@]}"; do
# lose the version comparator, if any
depname=${dep%%[<>=]*}
[[ $depname = "$match" ]] && msg "$d (depends)"
done
for dep in "${makedepends[@]}"; do
# lose the version comparator, if any
depname=${dep%%[<>=]*}
[[ $depname = "$match" ]] && msg "$d (makedepends)"
done
for dep in "${optdepends[@]/:*}"; do
# lose the version comaparator, if any
depname=${dep%%[<>=]*}
[[ $depname = "$match" ]] && msg "$d (optdepends)"
done
fi
done

View File

@@ -33,6 +33,7 @@ REPO_DB_PREFIX=
REPO_DB_SUFFIX=
LOCKFILE=
CLEAN_LOCK=0
# PREVENT_DOWNGRADE=0
. @libdir@/artools/util-base.sh
@@ -52,6 +53,7 @@ Multiple packages to add can be specified on the command line.\n"
printf -- "\n"
printf -- "Options:\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
printf -- "Usage: links-remove [options] <path-to-db> <packagename> ...\n"
printf -- "\n"
@@ -199,6 +201,18 @@ db_write_entry() {
if (( ONLYADDNEW )); then
return 0
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
# remove an existing entry if it exists, ignore failures
@@ -459,6 +473,7 @@ while (( $# )); do
-s|--sign) SIGN=1 ;;
-k|--key) KEY=1 ; shift; GPGKEY=$1 ;;
-v|--verify) VERIFY=1 ;;
# -p|--prevent-downgrade) PREVENT_DOWNGRADE=1 ;;
*) args+=("$1") ;;
esac
shift

View File

@@ -16,6 +16,31 @@
shopt -s nullglob
default_makepkg_args=(--syncdeps --noconfirm --log --holdver --skipinteg)
makepkg_args=("${default_makepkg_args[@]}")
verifysource_args=()
chrootdir=
passeddir=
makepkg_user=
declare -a install_pkgs
declare -i ret=0
keepbuilddir=0
update_first=0
clean_first=0
run_namcap=0
run_checkpkg=0
temp_chroot=0
run_nocheck=0
bindmounts_ro=()
bindmounts_rw=()
copy=$USER
[[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER
[[ -z "$copy" || $copy = root ]] && copy=copy
src_owner=${SUDO_USER:-$USER}
usage() {
echo "Usage: ${0##*/} [options] -r <chrootdir> [--] [makepkg args]"
echo ' Run this script in a PKGBUILD dir to build a package inside a'
@@ -50,6 +75,8 @@ usage() {
echo ' Useful for maintaining multiple copies'
echo " Default: $copy"
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 '-U Run makepkg as a specified user'
exit 1
@@ -57,37 +84,31 @@ usage() {
# {{{ functions
# Usage: sync_chroot $rootdir $copydir [$copy]
# Usage: sync_chroot $chrootdir $copydir [$copy]
sync_chroot() {
local rootdir=$1
local chrootdir=$1
local copydir=$2
local copy=${3:-$2}
if [[ "$rootdir" -ef "$copydir" ]]; then
if [[ "$chrootdir/root" -ef "$copydir" ]]; then
error 'Cannot sync copy with itself: %s' "$copydir"
return 1
fi
# Get a read lock on the root chroot to make
# sure we don't clone a half-updated chroot
slock 8 "$rootdir.lock" \
"Locking clean chroot [%s]" "$rootdir"
slock 8 "$chrootdir/root.lock" \
"Locking clean chroot [%s]" "$chrootdir/root"
stat_busy "Synchronizing chroot copy [%s] -> [%s]" "$rootdir" "$copy"
if is_subvolume "$rootdir" && is_same_fs "$rootdir" "$(dirname -- "$copydir")" && ! mountpoint -q "$copydir"; then
if is_subvolume "$copydir"; then
subvolume_delete_recursive "$copydir" ||
die "Unable to delete subvolume %s" "$copydir"
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 ||
stat_busy "Synchronizing chroot copy [%s] -> [%s]" "$chrootdir/root" "$copy"
if is_btrfs "$chrootdir" && ! mountpoint -q "$copydir"; then
subvolume_delete_recursive "$copydir" ||
die "Unable to delete subvolume %s" "$copydir"
btrfs subvolume snapshot "$chrootdir/root" "$copydir" >/dev/null ||
die "Unable to create subvolume %s" "$copydir"
else
mkdir -p "$copydir"
rsync -a --delete -q -W -x "$rootdir/" "$copydir"
rsync -a --delete -q -W -x "$chrootdir/root/" "$copydir"
fi
stat_done
@@ -118,11 +139,7 @@ delete_chroot() {
stat_done
}
# Usage: install_packages $copydir $pkgs...
install_packages() {
local copydir=$1
local install_pkgs=("${@:2}")
local -a pkgnames
local ret
@@ -133,28 +150,19 @@ install_packages() {
-r "${bindmounts_ro[@]}" \
-r "${bindmounts_rw[@]}" \
"$copydir" \
pacman -U --noconfirm -- "${pkgnames[@]/#//root/}"
bash -c 'yes y | pacman -U -- "$@"' -bash "${pkgnames[@]/#//root/}"
ret=$?
rm -- "${pkgnames[@]/#/$copydir/root/}"
return $ret
}
# Usage: prepare_chroot $copydir $HOME $keepbuilddir $run_namcap
# Globals:
# - MAKEFLAGS
# - PACKAGER
prepare_chroot() {
local copydir=$1
local USER_HOME=$2
local keepbuilddir=$3
local run_namcap=$4
[[ $keepbuilddir = true ]] || rm -rf "$copydir/build"
(( keepbuilddir )) || rm -rf "$copydir/build"
local builduser_uid builduser_gid
builduser_uid="${SUDO_UID:-$UID}"
builduser_gid="$(id -g "$builduser_uid")"
builduser_uid="$(id -u "$makepkg_user")"
builduser_gid="$(id -g "$makepkg_user")"
local install="install -o $builduser_uid -g $builduser_gid"
local x
@@ -189,7 +197,7 @@ EOF
declare -p SOURCE_DATE_EPOCH 2>/dev/null || true
printf '_chrootbuild "$@" || exit\n'
if [[ $run_namcap = true ]]; then
if (( run_namcap )); then
declare -f _chrootnamcap
printf '_chrootnamcap || exit\n'
fi
@@ -230,39 +238,18 @@ _chrootnamcap() {
done
}
# Usage: download_sources $copydir $makepkg_user
# Globals:
# - SRCDEST
download_sources() {
local copydir=$1
local makepkg_user=$2
# local builddir
# builddir="$(mktemp -d)"
# chown "$makepkg_user:" "$builddir"
setup_workdir
chown "$makepkg_user:" "$WORKDIR"
# Ensure sources are downloaded
sudo -u "$makepkg_user" --preserve-env=GNUPGHOME \
env SRCDEST="$SRCDEST" BUILDDIR="$WORKDIR" \
makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o ||
makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o "${verifysource_args[@]}" ||
die "Could not download sources."
# Clean up garbage from verifysource
# rm -rf "$builddir"
}
# Usage: move_products $copydir $owner
# Globals:
# - PKGDEST
# - LOGDEST
# - SRCPKGDEST
move_products() {
local copydir=$1
local src_owner=$2
local pkgfile
for pkgfile in "$copydir"/pkgdest/*; do
chown "$src_owner" "$pkgfile"
@@ -295,142 +282,138 @@ move_products() {
orig_argv=("$0" "$@")
main() {
default_makepkg_args=(--syncdeps --noconfirm --log --holdver --skipinteg)
makepkg_args=("${default_makepkg_args[@]}")
keepbuilddir=false
update_first=false
clean_first=false
run_namcap=false
temp_chroot=false
chrootdir=
passeddir=
makepkg_user=
declare -a install_pkgs
declare -i ret=0
opts='hcur:I:l:nNCTD:d:U:'
bindmounts_ro=()
bindmounts_rw=()
while getopts "${opts}" arg; do
case "$arg" in
c) clean_first=1 ;;
D) bindmounts_ro+=("$OPTARG") ;;
d) bindmounts_rw+=("$OPTARG") ;;
u) update_first=1 ;;
r) passeddir="$OPTARG" ;;
I) install_pkgs+=("$OPTARG") ;;
l) copy="$OPTARG" ;;
n) run_namcap=1; makepkg_args+=(--install) ;;
N) run_nocheck=1; makepkg_args+=(--nocheck) ;;
C) run_checkpkg=1 ;;
T) temp_chroot=1; copy+="-$$" ;;
U) makepkg_user="$OPTARG" ;;
h|*) usage ;;
esac
done
copy=$USER
[[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER
[[ -z "$copy" || $copy = root ]] && copy=copy
src_owner=${SUDO_USER:-$USER}
[[ ! -f PKGBUILD && -z "${install_pkgs[*]}" ]] && die 'This must be run in a directory containing a PKGBUILD.'
[[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.'
makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}}
local opts='hcur:I:l:nTD:d:U:'
check_root SOURCE_DATE_EPOCH,GNUPGHOME,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER
while getopts "${opts}" arg; do
case "$arg" in
c) clean_first=true ;;
D) bindmounts_ro+=("$OPTARG") ;;
d) bindmounts_rw+=("$OPTARG") ;;
u) update_first=true ;;
r) passeddir="$OPTARG" ;;
I) install_pkgs+=("$OPTARG") ;;
l) copy="$OPTARG" ;;
n) run_namcap=true; makepkg_args+=(--install) ;;
T) temp_chroot=true; copy+="-$$" ;;
U) makepkg_user="$OPTARG" ;;
h|*) usage ;;
esac
done
# Canonicalize chrootdir, getting rid of trailing /
chrootdir=$(readlink -e "$passeddir")
[[ ! -d $chrootdir ]] && die "No chroot dir defined, or invalid path '%s'" "$passeddir"
[[ ! -d $chrootdir/root ]] && die "Missing chroot dir root directory. Try using: mkchroot %s/root base-devel" "$chrootdir"
[[ ! -f PKGBUILD && -z "${install_pkgs[*]}" ]] && die 'This must be run in a directory containing a PKGBUILD.'
[[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.'
makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}}
if [[ ${copy:0:1} = / ]]; then
copydir=$copy
else
copydir="$chrootdir/$copy"
fi
check_root SOURCE_DATE_EPOCH,GNUPGHOME,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER
# Pass all arguments after -- right to makepkg
makepkg_args+=("${@:$OPTIND}")
# Canonicalize chrootdir, getting rid of trailing /
chrootdir=$(readlink -e "$passeddir")
[[ ! -d $chrootdir ]] && die "No chroot dir defined, or invalid path '%s'" "$passeddir"
[[ ! -d $chrootdir/root ]] && die "Missing chroot dir root directory. Try using: mkchroot %s/root base-devel" "$chrootdir"
# See if -R or -e was passed to makepkg
for arg in "${@:$OPTIND}"; do
case ${arg%%=*} in
--skip*|--holdver) verifysource_args+=("$arg") ;;
--repackage|--noextract) keepbuilddir=1 ;;
--*) ;;
-*R*|-*e*) keepbuilddir=1 ;;
esac
done
if [[ ${copy:0:1} = / ]]; then
copydir=$copy
else
copydir="$chrootdir/$copy"
fi
if [[ -n $SUDO_USER ]]; then
eval "USER_HOME=~$SUDO_USER"
else
USER_HOME=$HOME
fi
# Pass all arguments after -- right to makepkg
makepkg_args+=("${@:$OPTIND}")
umask 0022
# See if -R or -e was passed to makepkg
for arg in "${makepkg_args[@]}"; do
case ${arg%%=*} in
--repackage|--noextract) keepbuilddir=true; break ;;
--repackage|--noextract) keepbuilddir=true; break ;;
--*) ;;
-*R*|-*e*) keepbuilddir=true; break ;;
esac
done
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
load_vars /etc/makepkg.conf
load_user_info
# Use PKGBUILD directory if these don't exist
[[ -d $PKGDEST ]] || PKGDEST=$PWD
[[ -d $SRCDEST ]] || SRCDEST=$PWD
[[ -d $SRCPKGDEST ]] || SRCPKGDEST=$PWD
[[ -d $LOGDEST ]] || LOGDEST=$PWD
umask 0022
# Lock the chroot we want to use. We'll keep this lock until we exit.
lock 9 "$copydir.lock" "Locking chroot copy [%s]" "$copy"
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf"
load_vars /etc/makepkg.conf
if [[ ! -d $copydir ]] || (( clean_first )); then
sync_chroot "$chrootdir" "$copydir" "$copy"
fi
# Use PKGBUILD directory if these don't exist
[[ -d $PKGDEST ]] || PKGDEST=$PWD
[[ -d $SRCDEST ]] || SRCDEST=$PWD
[[ -d $SRCPKGDEST ]] || SRCPKGDEST=$PWD
[[ -d $LOGDEST ]] || LOGDEST=$PWD
bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest")
# Lock the chroot we want to use. We'll keep this lock until we exit.
lock 9 "$copydir.lock" "Locking chroot copy [%s]" "$copy"
if [[ ! -d $copydir ]] || $clean_first; then
sync_chroot "$chrootdir/root" "$copydir" "$copy"
fi
bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest")
$update_first && chroot-run \
-r "${bindmounts_ro[*]}" \
-w "${bindmounts_rw[*]}" \
"$copydir" \
pacman -Syu --noconfirm
if [[ -n ${install_pkgs[*]:-} ]]; then
install_packages "$copydir" "${install_pkgs[@]}"
ret=$?
# If there is no PKGBUILD we have done
[[ -f PKGBUILD ]] || return $ret
fi
if [[ "$(id -u "$makepkg_user")" == 0 ]]; then
error "Running makepkg as root is not allowed."
exit 1
fi
download_sources "$copydir" "$makepkg_user"
prepare_chroot "$copydir" "$USER_HOME" "$keepbuilddir" "$run_namcap"
if chroot-run \
(( update_first )) && chroot-run \
-r "${bindmounts_ro[*]}" \
-w "${bindmounts_rw[*]}" \
"$copydir" \
/chrootbuild "${makepkg_args[@]}"
then
move_products "$copydir" "$src_owner"
pacman -Syuu --noconfirm
if [[ -n ${install_pkgs[*]:-} ]]; then
install_packages
ret=$?
# If there is no PKGBUILD we are done
[[ -f PKGBUILD ]] || exit $ret
fi
if [[ "$(id -u "$makepkg_user")" == 0 ]]; then
error "Running makepkg as root is not allowed."
exit 1
fi
download_sources
prepare_chroot
if chroot-run \
-r "${bindmounts_ro[*]}" \
-w "${bindmounts_rw[*]}" \
"$copydir" \
/chrootbuild "${makepkg_args[@]}"
then
pkgnames=()
for pkgfile in "$copydir"/pkgdest/*; do
pkgfile=${pkgfile##*/};
pkgnames+=("${pkgfile%-*-*-*}");
done
move_products
else
(( ret += 1 ))
fi
(( temp_chroot )) && delete_chroot "$copydir" "$copy"
if (( ret != 0 )); then
if (( temp_chroot )); then
die "Build failed"
else
(( ret += 1 ))
die "Build failed, check %s/build" "$copydir"
fi
$temp_chroot && delete_chroot "$copydir" "$copy"
if (( ret != 0 )); then
if $temp_chroot; then
die "Build failed"
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
die "Build failed, check %s/build" "$copydir"
warning "Skipped checkpkg due to missing packages"
fi
else
true
fi
}
main "$@"
true
fi

View File

@@ -1,67 +0,0 @@
#############################################
################ artools-base ###############
#############################################
# build dir where buildpkg or buildiso chroots are created
# CHROOTS_DIR=/var/lib/artools
# the workspace directory
# WORKSPACE_DIR="/home/${OWNER}/artools-workspace"
#############################################
################ artools-pkg ################
#############################################
# gitea user access token
# GIT_TOKEN=''
# HOST_TREE_ARTIX='gitea@gitea.artixlinux.org:artix'
# TREE_DIR_ARTIX=${WORKSPACE_DIR}/artixlinux
# TREE_NAMES_ARTIX=(
# packages
# community
# packages-kernel
# packages-openrc
# packages-runit
# packages-xorg
# packages-python
# packages-perl
# packages-qt5
# packages-ruby
# )
# HOST_TREE_ARCH=git://git.archlinux.org/svntogit
# TREE_DIR_ARCH=${WORKSPACE_DIR}/archlinux
# TREE_NAMES_ARCH=(packages community)
# default repos root
# REPOS_ROOT=${WORKSPACE_DIR}/repos
# default mirror for sogrep
# REPOS_MIRROR="http://mirror1.artixlinux.org/repos"
#############################################
################ artools-iso ################
#############################################
# the iso storage directory
# ISO_POOL="${WORKSPACE_DIR}/iso"
# the dist release; default: auto
# ISO_VERSION=$(date +%Y%m%d)
# possible values: openrc, runit (s6 not yet supported)
# INITSYS="openrc"
# gpg key; leave empty or commented to skip sfs signing
# GPG_KEY=""
# set upload bandwidth limit in kB/s
# UPLIMIT=1000
# the server user
# ACCOUNT=[SetUser]

View File

@@ -0,0 +1,9 @@
#############################################
################ artools-base ###############
#############################################
# build dir where buildpkg or buildiso chroots are created
# CHROOTS_DIR=/var/lib/artools
# the workspace directory
# WORKSPACE_DIR="/home/${OWNER}/artools-workspace"

View File

@@ -0,0 +1,21 @@
#############################################
################ artools-iso ################
#############################################
# the iso storage directory
# ISO_POOL="${WORKSPACE_DIR}/iso"
# the dist release; default: auto
# ISO_VERSION=$(date +%Y%m%d)
# possible values: openrc, runit, s6
# INITSYS="openrc"
# gpg key; leave empty or commented to skip sfs signing
# GPG_KEY=""
# set upload bandwidth limit in kB/s
# UPLIMIT=1000
# the server user
# ACCOUNT=[SetUser]

View File

@@ -0,0 +1,45 @@
#############################################
################ artools-pkg ################
#############################################
# gitea user access token
# GIT_TOKEN=''
# HOST_TREE_ARTIX='gitea@gitea.artixlinux.org:artixlinux'
# TREE_DIR_ARTIX=${WORKSPACE_DIR}/artixlinux
# customize buildtree, packages and community should be enabled
# TREE_NAMES_ARTIX=(
# packages
# community
# packages-kernel
# packages-openrc
# packages-runit
# packages-s6
# packages-media
# packages-xorg
# packages-python
# packages-perl
# packages-java
# packages-qt5
# packages-devel
# packages-ruby
# packages-gtk
# packages-gnome
# packages-cinnamon
# packages-lxqt
# packages-mate
# packages-kde
# packages-xfce
# )
# HOST_TREE_ARCH=git://git.archlinux.org/svntogit
# TREE_DIR_ARCH=${WORKSPACE_DIR}/archlinux
# default repos root
# REPOS_ROOT=${WORKSPACE_DIR}/repos
# default mirror for sogrep
# REPOS_MIRROR="http://mirror1.artixlinux.org/repos"

View File

@@ -1,63 +0,0 @@
accountsservice
cairo
colord
cppunit
dbus
dbus-glib
dbus-python
desktop-file-utils
fontconfig
geoclue2
glu
gst-plugins-bad
gst-plugins-base
gst-plugins-good
gst-plugins-ugly
gstreamer
harfbuzz
hicolor-icon-theme
libatasmart
libbsd
libdrm
libevdev
libinput
libmbim
libnice
libqmi
libvdpau
libxcb
libxft
libxi
media-player-info
mesa
modemmanager
networkmanager
orc
p11-kit
polkit
poppler
poppler-data
pulseaudio
pyxdg
r
sdl
shared-mime-info
sound-theme-freedesktop
startup-notification
systemdcompat
telepathy-glib
ttf-dejavu
udisks2
upower
wayland
wayland-protocols
webrtc-audio-processing
xcb-proto
xcb-util
xcb-util-cursor
xcb-util-image
xcb-util-keysyms
xcb-util-renderutil
xcb-util-wm
xdg-user-dirs
xdg-utils

View File

@@ -1,63 +0,0 @@
adwaita-icon-theme
atk
at-spi2-atk
at-spi2-core
babl
cantarell-fonts
cogl
dconf
flatpak
gamin
gcab
gconf
gcr
gdk-pixbuf2
gegl02
git
glade
glib2
glib-networking
gnome-common
gnome-keyring
gobject-introspection
gsettings-desktop-schemas
gssdp
gtk2
gtk3
gtk-doc
gtksourceview3
gupnp
gupnp-igd
gvfs
json-glib
libcloudproviders
libcroco
libgee
libglade
libgnome-keyring
libgudev
libnotify
librsvg
libsecret
libsoup
libxml2
libxslt
meld
mobile-broadband-provider-info
modemmanager
networkmanager
network-manager-applet
orca
ostree
pango
pyatspi
pygobject
pygobject2
pygtk
rest
ttf-bitstream-vera
vala
vte
vte3
yelp-tools
yelp-xsl

View File

@@ -1,4 +0,0 @@
phonon-gstreamer
polkit-qt
extra-cmake-modules
phonon

View File

@@ -1,17 +0,0 @@
linux
nvidia
nvidia-utils
acpi_call
bbswitch
broadcom-wl
tp_smapi
r8168
virtualbox-modules-artix
linux-lts
nvidia-lts
acpi_call-lts
bbswitch-lts
broadcom-wl-lts
tp_smapi-lts
r8168-lts
linux-firmware

View File

@@ -1,31 +0,0 @@
lxqt-about
lxqt-admin
lxqt-config
lxqt-globalkeys
lxqt-notificationd
lxqt-openssh-askpass
lxqt-panel
lxqt-policykit
lxqt-powermanagement
lxqt-qtplugin
lxqt-runner
lxqt-session
lxqt-sudo
lxqt-themes
lxqt-build-tools
compton-conf
lximage-qt
obconf-qt
openbox
pcmanfm-qt
qterminal
liblxqt
libqtxdg
lxmenu-data
libfm-qt
libfm
qtermwidget
libsysstat
libstatgrab
qps

View File

@@ -1,37 +0,0 @@
libdmx
libfontenc
libice
libpciaccess
libsm
libx11
libxau
libxaw
libxcomposite
libxcursor
libxdamage
libxdmcp
libxext
libxfixes
libxfont2
libxi|libxft
libxinerama
libxkbfile
libxkbui
libxmu
libxpm
libxrandr
libxrender
libxres
libxshmfence
libxss
libxt
libxtst
libxv
libxvmc
libxxf86vm
pixman
xbitmaps
xkeyboard-config
xorgproto
xterm
xtrans

View File

@@ -162,7 +162,7 @@ artix_mount_handler() {
fi
if [[ "${checksum}" == "y" ]]; then
for fs in rootfs desktopfs livefs;do
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..."
@@ -182,7 +182,7 @@ artix_mount_handler() {
fi
if [[ "${verify}" == "y" ]]; then
for fs in rootfs desktopfs livefs;do
for fs in rootfs livefs;do
if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs" ]]; then
if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs.sig" ]]; then
msg -n ":: Signature verification requested, please wait..."
@@ -225,7 +225,7 @@ artix_mount_handler() {
local dest_sfs="/run/artix/sfs" dest_img="/run/artix/img"
local lower_dir
for sfs in livefs desktopfs rootfs;do
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

View File

@@ -40,7 +40,7 @@ artix_pxe_http_mount_handler () {
local _src=${artix_http_srv}${artixbasedir}/${arch}
for sfs in livefs desktopfs rootfs;do
for sfs in livefs rootfs;do
if [[ ! -z "$( curl -s --head "${_src}/${sfs}.sfs" | grep "OK" )" ]]; then
_curl_get "${_src}/${sfs}.sfs" "/${arch}"

View File

@@ -31,7 +31,7 @@ load_vars() {
[[ -f $1 ]] || return 1
for var in {SRC,SRCPKG,PKG,LOG}DEST MAKEFLAGS PACKAGER CARCH GPGKEY; do
[[ -z ${!var:-} ]] && eval "$(grep -a "^${var}=" "$1")"
[[ -z ${!var:-} ]] && eval "$(source "$1"; printf "%s='%s'" "$var" "${!var}")"
done
return 0
@@ -41,144 +41,11 @@ prepare_dir(){
[[ ! -d $1 ]] && mkdir -p $1
}
get_disturl(){
. /usr/lib/os-release
echo "${HOME_URL}"
}
get_osname(){
. /usr/lib/os-release
echo "${NAME}"
}
init_artools_base(){
ARCH=$(uname -m)
CHROOTS_DIR=${CHROOTS_DIR:-'/var/lib/artools'}
WORKSPACE_DIR=${WORKSPACE_DIR:-"/home/${OWNER}/artools-workspace"}
prepare_dir "${WORKSPACE_DIR}"
}
init_artools_pkg(){
DOMAIN='artixlinux.org'
GIT_DOMAIN="gitea.${DOMAIN}"
GIT_URL="https://${GIT_DOMAIN}"
GIT_TOKEN=${GIT_TOKEN:-''}
TREE_DIR_ARTIX=${TREE_DIR_ARTIX:-"${WORKSPACE_DIR}/artixlinux"}
[[ -z ${TREE_NAMES_ARTIX[@]} ]] && \
TREE_NAMES_ARTIX=(
packages
community
packages-kernel
packages-openrc
packages-runit
packages-xorg
packages-python
packages-perl
packages-qt5
packages-ruby
# packages-desktop
# packages-kde
# packages-gnome
)
HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"}
TREE_DIR_ARCH=${TREE_DIR_ARCH:-"${WORKSPACE_DIR}/archlinux"}
TREE_NAMES_ARCH=(packages community)
HOST_TREE_ARCH=${HOST_TREE_ARCH:-'git://git.archlinux.org/svntogit'}
CHROOTS_PKG="${CHROOTS_DIR}/buildpkg"
REPOS_ROOT=${REPOS_ROOT:-"${WORKSPACE_DIR}/repos"}
REPOS_MIRROR=${REPOS_MIRROR:-'http://mirror1.artixlinux.org/repos'}
DBEXT=${DBEXT:-'xz'}
LINKSDBEXT=${LINKSDBEXT:-"links.tar.${DBEXT}"}
PKGDBEXT=${PKGDBEXT:-"db.tar.${DBEXT}"}
}
init_artools_iso(){
CHROOTS_ISO="${CHROOTS_DIR}/buildiso"
ISO_POOL=${ISO_POOL:-"${WORKSPACE_DIR}/iso"}
prepare_dir "${ISO_POOL}"
PROFILE='base'
ISO_VERSION=${ISO_VERSION:-"$(date +%Y%m%d)"}
INITSYS=${INITSYS:-'openrc'}
GPG_KEY=${GPG_KEY:-''}
UPLIMIT=${UPLIMIT:-1000}
FILE_HOST="download.${DOMAIN}"
FILE_HOME=${FILE_HOME:-'/srv/iso'}
FILE_PORT=${FILE_PORT:-65432}
ACCOUNT=${ACCOUNT:-'naughtyISOuploader'}
}
load_config(){
local conf="$1"
[[ -f "$conf" ]] || return 1
[[ -r "$conf" ]] && . "$conf"
init_artools_base
init_artools_pkg
init_artools_iso
return 0
}
user_own(){
local flag=$2
chown ${flag} "${OWNER}:$(id --group ${OWNER})" "$1"
}
user_run(){
su ${OWNER} -c "$@"
}
load_user_info(){
OWNER=${SUDO_USER:-$USER}
if [[ -n $SUDO_USER ]]; then
eval "USER_HOME=~$SUDO_USER"
else
USER_HOME=$HOME
fi
USERCONFDIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}"
prepare_dir "${USERCONFDIR}"
USERCACHEDIR="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools"
}
# orig_argv=("$0" "$@")
check_root() {
local keepenv=$1

View File

@@ -12,20 +12,36 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
add_svc_rc(){
local mnt="$1" name="$2" rlvl="$3"
if [[ -f $mnt/etc/init.d/$name ]];then
msg2 "Setting %s ..." "$name"
chroot $mnt rc-update add $name $rlvl &>/dev/null
fi
add_svc_openrc(){
local mnt="$1" names="$2" rlvl="${3:-default}"
for svc in $names; do
if [[ -f $mnt/etc/init.d/$svc ]];then
msg2 "Setting %s ..." "$svc"
[[ $svc == "xdm" ]] && set_xdm "$mnt"
chroot $mnt rc-update add $svc $rlvl &>/dev/null
fi
done
}
add_svc_runit(){
local mnt="$1" name="$2"
if [[ -d $mnt/etc/runit/sv/$name ]]; then
msg2 "Setting %s ..." "$name"
chroot $mnt ln -s /etc/runit/sv/$name /etc/runit/runsvdir/default &>/dev/null
fi
local mnt="$1" names="$2" rlvl="${3:-default}"
for svc in $names; do
if [[ -d $mnt/etc/runit/sv/$svc ]]; then
msg2 "Setting %s ..." "$svc"
chroot $mnt ln -s /etc/runit/sv/$svc /etc/runit/runsvdir/$rlvl &>/dev/null
fi
done
}
add_svc_s6(){
local mnt="$1" names="$2" valid="" rlvl="${3:-default}"
for svc in $names; do
if [[ -d $mnt/etc/s6/sv/$svc ]]; then
msg2 "Setting %s ..." "$svc"
valid=${valid:-}${valid:+' '}${svc}
fi
done
chroot $mnt s6-rc-bundle -c /etc/s6/rc/compiled add $rlvl $valid
}
set_xdm(){
@@ -51,42 +67,19 @@ configure_logind(){
configure_services(){
local mnt="$1"
info "Configuring [%s]" "${INITSYS}"
case ${INITSYS} in
'openrc')
for svc in ${SERVICES[@]}; do
[[ $svc == "xdm" ]] && set_xdm "$mnt"
add_svc_rc "$mnt" "$svc" "default"
done
for svc in ${SERVICES_LIVE[@]}; do
add_svc_rc "$mnt" "$svc" "default"
done
;;
'runit')
for svc in ${SERVICES[@]}; do
add_svc_runit "$mnt" "$svc"
done
for svc in ${SERVICES_LIVE[@]}; do
add_svc_runit "$mnt" "$svc"
done
;;
esac
info "Done configuring [%s]" "${INITSYS}"
info "Configuring [%s] services" "${INITSYS}"
add_svc_${INITSYS} "$mnt" "${SERVICES[*]} ${SERVICES_LIVE[*]}"
info "Done configuring [%s] services" "${INITSYS}"
}
configure_system(){
local mnt="$1"
case ${INITSYS} in
'openrc' | 'runit')
configure_logind "$mnt" "elogind"
;;
esac
configure_logind "$mnt" "elogind"
echo ${HOST_NAME} > $mnt/etc/hostname
}
write_users_conf(){
local yaml=$(write_yaml_header)
yaml+=$(write_empty_line)
yaml+=$(write_yaml_map 0 'defaultGroups')
local IFS=','
for g in ${ADDGROUPS[@]};do
@@ -108,41 +101,40 @@ write_users_conf(){
printf '%s' "${yaml}"
}
write_servicescfg_conf(){
write_services_conf(){
local key1="$1" val1="$2" key2="$3" val2="$4"
local yaml=$(write_yaml_header)
yaml+=$(write_empty_line)
case "${INITSYS}" in
'runit')
yaml+=$(write_yaml_map 0 'svDir' '/etc/runit/sv')
yaml+=$(write_yaml_map 0 'runsvDir' '/etc/runit/runsvdir')
yaml+=$(write_yaml_map 0 'services')
yaml+=$(write_yaml_map 2 'enabled')
for svc in ${SERVICES[@]};do
yaml+=$(write_yaml_seq_map 4 'name' "$svc")
yaml+=$(write_yaml_map 6 'runlevel' 'default')
done
;;
'openrc')
yaml+=$(write_yaml_map 0 'initdDir' '/etc/init.d')
yaml+=$(write_yaml_map 0 'runlevelsDir' '/etc/runlevels')
yaml+=$(write_yaml_map 0 'services')
for svc in ${SERVICES[@]};do
yaml+=$(write_yaml_seq_map 2 'name' "$svc")
yaml+=$(write_yaml_map 4 'runlevel' 'default')
done
;;
esac
yaml+=$(write_yaml_map 0 "$key1" "$val1")
yaml+=$(write_yaml_map 0 "$key2" "$val2")
yaml+=$(write_yaml_map 0 'services')
for svc in ${SERVICES[@]};do
yaml+=$(write_yaml_seq 2 "$svc")
done
yaml+=$(write_empty_line)
printf '%s' "${yaml}"
}
write_unpackfs_conf(){
write_services_openrc_conf(){
local conf="$1"/services-openrc.conf
write_services_conf 'initdDir' '/etc/init.d' 'runlevelsDir' '/etc/runlevels' > "$conf"
}
write_services_runit_conf(){
local conf="$1"/services-runit.conf
write_services_conf 'svDir' '/etc/runit/sv' 'runsvDir' '/etc/runit/runsvdir' > "$conf"
}
write_services_s6_conf(){
local conf="$1"/services-s6.conf
write_services_conf 'svDir' '/etc/s6/sv' 'dbDir' '/etc/s6/rc/compiled' > "$conf"
}
write_postcfg(){
local yaml=$(write_yaml_header)
yaml+=$(write_empty_line)
yaml+=$(write_yaml_map 0 'unpack')
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 'destination' '')
yaml+=$(write_yaml_map 0 'keyrings')
for k in archlinux artix;do
yaml+=$(write_yaml_seq 2 "$k")
done
yaml+=$(write_empty_line)
printf '%s' "${yaml}"
}
@@ -152,21 +144,22 @@ configure_calamares(){
if [[ -d "$mods" ]];then
msg2 "Configuring Calamares"
write_users_conf > "$mods"/users.conf
write_servicescfg_conf > "$mods"/services-"${INITSYS}".conf
[[ -z ${DESKTOP_LIST} ]] && write_unpackfs_conf > "$mods"/unpackfs.conf
sed -e "s|openrc|${INITSYS}|" -i "$mods"/postcfg.conf
sed -e "s|services-openrc|services-${INITSYS}|" -i "$1"/etc/calamares/settings.conf
write_services_"${INITSYS}"_conf "$mods"
write_postcfg > "$mods"/postcfg.conf
sed -e "s|services-openrc|services-${INITSYS}|" \
-i "$1"/etc/calamares/settings.conf
fi
}
configure_live_image(){
configure_image(){
local fs="$1"
msg "Configuring [livefs]"
msg "Configuring [%s]" "${fs##*/}"
configure_hosts "$fs"
configure_system "$fs"
configure_services "$fs"
configure_calamares "$fs"
[[ ! -d "$fs/etc/artools" ]] && mkdir -p "$fs/etc/artools"
msg2 "Writing live.conf"
write_live_session_conf > "$fs/etc/artools/live.conf"
msg "Done configuring [livefs]"
msg "Done configuring [%s]" "${fs##*/}"
}

View File

@@ -29,11 +29,11 @@ prepare_initramfs(){
fi
if [[ -n ${GPG_KEY} ]]; then
user_run "gpg --export ${GPG_KEY} >${USERCONFDIR}/artools/gpgkey"
exec 17<>${USERCONFDIR}/artools/GPG_KEY
su ${OWNER} -c "gpg --export ${GPG_KEY} >/tmp/GPG_KEY"
exec 17<>/tmp/GPG_KEY
fi
local _kernel=$(cat $mnt/usr/lib/modules/*/version)
ARTIX_GNUPG_FD=${GPG_KEY:+17} chroot-run $mnt \
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
@@ -41,8 +41,8 @@ prepare_initramfs(){
if [[ -n ${GPG_KEY} ]]; then
exec 17<&-
fi
if [[ -f ${USERCONFDIR}/artools/GPG_KEY ]]; then
rm ${USERCONFDIR}/artools/GPG_KEY
if [[ -f /tmp/GPG_KEY ]]; then
rm /tmp/GPG_KEY
fi
}
@@ -59,13 +59,13 @@ prepare_boot_extras(){
}
configure_grub(){
local conf="$1/boot/grub/kernels.cfg"
sed -e "s|@iso_label@|${iso_label}|" -i $conf
sed -e "s|@iso_label@|${iso_label}|" -i ${iso_root}/boot/grub/kernels.cfg
}
prepare_grub(){
local platform=i386-pc img='core.img' grub=$3/boot/grub efi=$3/efi/boot \
lib=$1/usr/lib/grub prefix=/boot/grub theme=$2/usr/share/grub
local platform=i386-pc img='core.img' prefix=/boot/grub
local lib=$1/usr/lib/grub theme=$2/usr/share/grub
local grub=${iso_root}/boot/grub efi=${iso_root}/efi/boot
prepare_dir ${grub}/${platform}
@@ -103,7 +103,7 @@ prepare_grub(){
grub-mkfont -o ${grub}/unicode.pf2 /usr/share/fonts/misc/unifont.bdf
fi
local size=4M mnt="${mnt_dir}/efiboot" efi_img="$3/efi.img"
local size=4M mnt="${mnt_dir}/efiboot" efi_img="${iso_root}/efi.img"
msg2 "Creating fat image of %s ..." "${size}"
truncate -s ${size} "${efi_img}"
mkfs.fat -n ARTIX_EFI "${efi_img}" &>/dev/null

View File

@@ -12,33 +12,12 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
gen_iso_fn(){
local vars=("artix") name
vars+=("${PROFILE}")
vars+=("${INITSYS}")
case "${REPOSITORY}" in
'gremlins'|'goblins') vars+=("${REPOSITORY}") ;;
esac
vars+=("${ISO_VERSION}")
vars+=("${ARCH}")
for n in ${vars[@]};do
name=${name:-}${name:+-}${n}
done
echo $name
}
clean_iso_root(){
local dest="$1"
msg "Deleting isoroot [%s] ..." "${dest##*/}"
rm -rf --one-file-system "$dest"
}
make_sig () {
local idir="$1" file="$2"
msg2 "Creating signature file..."
cd "$idir"
user_own "$idir"
user_run "gpg --detach-sign --default-key ${GPG_KEY} $file.sfs"
chown "${OWNER}:$(id --group ${OWNER})" "$idir"
su ${OWNER} -c "gpg --detach-sign --default-key ${GPG_KEY} $file.sfs"
chown -R root "$idir"
cd ${OLDPWD}
}
@@ -118,16 +97,23 @@ make_sfs() {
show_elapsed_time "${FUNCNAME}" "${timer_start}"
}
get_disturl(){
. /usr/lib/os-release
echo "${HOME_URL}"
}
assemble_iso(){
msg "Creating ISO image..."
local mod_date=$(date -u +%Y-%m-%d-%H-%M-%S-00 | sed -e s/-//g)
local appid="$(get_osname) Live/Rescue CD"
local publisher="$(get_osname) <$(get_disturl)>"
xorriso -as mkisofs \
--modification-date=${mod_date} \
--protective-msdos-label \
-volid "${iso_label}" \
-appid "$(get_osname) Live/Rescue CD" \
-publisher "$(get_osname) <$(get_disturl)>" \
-appid "${appid}" \
-publisher "${publisher}" \
-preparer "Prepared by artools/${0##*/}" \
-r -graft-points -no-pad \
--sort-weight 0 / \

View File

@@ -39,20 +39,14 @@ track_fs() {
mount_overlay(){
FS_ACTIVE_MOUNTS=()
local lower= upper="$1" work="$2" pkglist="$3"
local fs=${upper##*/}
local rootfs="$work/rootfs" desktopfs="$work/desktopfs" livefs="$work/livefs"
local lower= upper="$1" work="$2"
mkdir -p "${mnt_dir}/work"
mkdir -p "$upper"
case $fs in
desktopfs) lower="$rootfs" ;;
livefs)
lower="$rootfs"
[[ -f $pkglist ]] && lower="$desktopfs":"$rootfs"
;;
bootfs)
lower="$livefs":"$rootfs"
[[ -f $pkglist ]] && lower="$livefs":"$desktopfs":"$rootfs"
case $upper in
*/livefs) lower="$work/rootfs" ;;
*/bootfs)
lower="$work/rootfs"
[[ -d "$work/livefs" ]] && lower="$work/livefs":"$work/rootfs"
;;
esac
track_fs -t overlay overlay -olowerdir="$lower",upperdir="$upper",workdir="${mnt_dir}/work" "$upper"

View File

@@ -12,24 +12,6 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# 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-Desktop" ]] && DESKTOP_LIST="$profdir/$prof/Packages-Desktop"
[[ -d "$profdir/$prof/desktop-overlay" ]] && DESKTOP_OVERLAY="$profdir/$prof/desktop-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(){
msg2 "iso_file: %s" "${iso_file}"
msg2 "AUTOLOGIN: %s" "${AUTOLOGIN}"
@@ -42,15 +24,18 @@ show_profile(){
}
load_profile(){
local prof="$1"
local profdir="${DATADIR}/iso-profiles"
[[ -d ${WORKSPACE_DIR}/iso-profiles ]] && profdir=${WORKSPACE_DIR}/iso-profiles
local profile_dir="${DATADIR}/iso-profiles"
[[ -d ${WORKSPACE_DIR}/iso-profiles ]] && profile_dir=${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'}
@@ -66,25 +51,22 @@ load_profile(){
ADDGROUPS=${ADDGROUPS:-"video,power,optical,network,lp,scanner,wheel,users,log"}
if [[ -z ${SERVICES[@]} ]];then
SERVICES=('acpid' 'bluetooth' 'cronie' 'cupsd' 'syslog-ng' 'NetworkManager')
SERVICES=('acpid' 'bluetoothd' 'cronie' 'cupsd' 'syslog-ng' 'connmand')
fi
if [[ ${DISPLAYMANAGER} != "none" ]];then
case "${INITSYS}" in
'openrc') SERVICES+=('xdm') ;;
'runit') SERVICES+=("${DISPLAYMANAGER}") ;;
'runit'|'s6') SERVICES+=("${DISPLAYMANAGER}") ;;
esac
fi
if [[ -z ${SERVICES_LIVE[@]} ]];then
SERVICES_LIVE=('artix-live' 'pacman-init')
fi
SERVICES_LIVE=('artix-live' 'pacman-init')
return 0
}
write_live_session_conf(){
msg2 "Writing live.conf"
local conf=''
conf+=$(printf '%s\n' '# live session configuration')
conf+=$(printf "\nAUTOLOGIN=%s\n" "${AUTOLOGIN}")
@@ -100,7 +82,7 @@ load_pkgs(){
local _init="s|@$init||g"
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" ;;
'runit') _init_rm1="s|@s6.*||g"; _init_rm2="s|@openrc.*||g" ;;
esac

View File

@@ -13,9 +13,6 @@
# GNU General Public License for more details.
error_function() {
if [[ -p $logpipe ]]; then
rm "$logpipe"
fi
local func="$1"
# first exit all subshells, then print the error
if (( ! BASH_SUBSHELL )); then
@@ -27,20 +24,6 @@ error_function() {
exit 2
}
# $1: function
run_log(){
local func="$1" log_dir='/var/log/artools'
[[ ! -d $log_dir ]] && mkdir -p $log_dir
local logfile=${log_dir}/$(gen_iso_fn).$func.log
logpipe=$(mktemp -u "/tmp/$func.pipe.XXXXXXXX")
mkfifo "$logpipe"
tee "$logfile" < "$logpipe" &
local teepid=$!
$func &> "$logpipe"
wait $teepid
rm "$logpipe"
}
run_safe() {
local restoretrap func="$1"
set -e
@@ -48,11 +31,7 @@ run_safe() {
restoretrap=$(trap -p ERR)
trap 'error_function $func' ERR
if ${log};then
run_log "$func"
else
"$func"
fi
"$func"
eval $restoretrap
set +E
@@ -96,12 +75,6 @@ make_iso() {
msg "Done [Build ISO]"
}
install_packages(){
local fs="$1"
setarch "${ARCH}" mkchroot \
"${mkchroot_args[@]}" "${fs}" "${packages[@]}"
}
copy_overlay(){
local src="$1" dest="$2"
if [[ -e "$src" ]];then
@@ -114,10 +87,6 @@ clean_up_image(){
local path mnt="$1"
msg2 "Cleaning [%s]" "${mnt##*/}"
if [[ -f "$mnt/etc/locale.gen.orig" ]];then
mv "$mnt/etc/locale.gen.orig" "$mnt/etc/locale.gen"
rm "$mnt/etc/locale.conf"
fi
path=$mnt/boot
if [[ -d "$path" ]]; then
find "$path" -name 'initramfs*.img' -delete &> /dev/null
@@ -142,11 +111,6 @@ clean_up_image(){
if [[ -d $path ]];then
find "$path" -mindepth 1 -delete &> /dev/null
fi
if [[ ${mnt##*/} == 'livefs' ]];then
rm -rf "$mnt/etc/pacman.d/gnupg"
fi
find "$mnt" -name *.pacnew -name *.pacsave -name *.pacorig -delete
if [[ -f "$mnt/boot/grub/grub.cfg" ]]; then
rm $mnt/boot/grub/grub.cfg
@@ -163,36 +127,20 @@ make_rootfs() {
prepare_dir "${rootfs}"
install_packages "${rootfs}"
basestrap "${basestrap_args[@]}" "${rootfs}" "${packages[@]}"
copy_overlay "${ROOT_OVERLAY}" "${rootfs}"
[[ -z ${LIVE_LIST} ]] && configure_image "${rootfs}"
clean_up_image "${rootfs}"
: > ${work_dir}/rootfs.lock
msg "Done [Base installation] (rootfs)"
fi
}
make_desktopfs() {
if [[ ! -e ${work_dir}/desktopfs.lock ]]; then
msg "Prepare [Desktop installation] (desktopfs)"
local desktopfs="${work_dir}/desktopfs"
prepare_dir "${desktopfs}"
mount_overlay "${desktopfs}" "${work_dir}"
install_packages "${desktopfs}"
copy_overlay "${DESKTOP_OVERLAY}" "${desktopfs}"
umount_overlay
clean_up_image "${desktopfs}"
msg "Done [Desktop installation] (desktopfs)"
fi
}
make_livefs() {
if [[ ! -e ${work_dir}/livefs.lock ]]; then
msg "Prepare [Live installation] (livefs)"
@@ -200,18 +148,20 @@ make_livefs() {
prepare_dir "${livefs}"
mount_overlay "${livefs}" "${work_dir}" "${DESKTOP_LIST}"
mount_overlay "${livefs}" "${work_dir}"
install_packages "${livefs}"
basestrap "${basestrap_args[@]}" "${livefs}" "${packages[@]}"
copy_overlay "${LIVE_OVERLAY}" "${livefs}"
configure_live_image "${livefs}"
configure_image "${livefs}"
umount_overlay
clean_up_image "${livefs}"
: > ${work_dir}/livefs.lock
msg "Done [Live installation] (livefs)"
fi
}
@@ -227,7 +177,7 @@ make_bootfs() {
local bootfs="${work_dir}/bootfs"
mount_overlay "${bootfs}" "${work_dir}" "${DESKTOP_LIST}"
mount_overlay "${bootfs}" "${work_dir}"
prepare_initcpio "${bootfs}"
prepare_initramfs "${bootfs}"
@@ -247,9 +197,12 @@ make_grub(){
if [[ ! -e ${work_dir}/grub.lock ]]; then
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
msg "Done [/iso/boot/grub]"
@@ -259,7 +212,7 @@ make_grub(){
compress_images(){
local timer=$(get_timer)
run_safe "make_iso"
user_own "${iso_dir}" "-R"
chown -R "${OWNER}:$(id --group ${OWNER})" "${iso_dir}"
show_elapsed_time "${FUNCNAME}" "${timer}"
}
@@ -267,11 +220,7 @@ prepare_images(){
local timer=$(get_timer)
load_pkgs "${ROOT_LIST}" "${INITSYS}"
run_safe "make_rootfs"
if [[ -f "${DESKTOP_LIST}" ]] ; then
load_pkgs "${DESKTOP_LIST}" "${INITSYS}"
run_safe "make_desktopfs"
fi
if [[ -f ${LIVE_LIST} ]]; then
if [[ -n ${LIVE_LIST} ]]; then
load_pkgs "${LIVE_LIST}" "${INITSYS}"
run_safe "make_livefs"
fi

View File

@@ -54,9 +54,10 @@ load_team_id(){
add_repo_to_team(){
local pkg="$1" org="$2" team="$3"
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"
}

View File

@@ -23,14 +23,12 @@ get_remote_head(){
get_pkg_org(){
local pkg="$1" org= sub=
case ${pkg} in
ruby-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesRuby" ;;
perl-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesPerl" ;;
python-*) org=${pkg:0:8}; sub="${org:7}"; echo "packagesPython" ;;
python2-*) org=${pkg:0:9}; sub="${org:8}"; echo "packagesPython" ;;
lib32*) org=${pkg:0:7}; sub="${org:6}"; echo "packagesL" ;; #"packages${sub^^}" ;;
# lib*) org=${pkg:0:4}; sub="${org:3}"; echo "packagesLib${sub^^}" ;;
*) org=${pkg:0:1}; echo "packages${org^^}" ;;
ruby-*) org="packagesRuby" ;;
perl-*) org="packagesPerl" ;;
python-*|python2-*) org="packagesPython" ;;
*) sub=${pkg:0:1}; org="packages${sub^^}" ;;
esac
echo $org
}
subrepo_push(){
@@ -83,7 +81,7 @@ pull_tree(){
local remote_head=$(get_remote_head)
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
fi
}
@@ -141,22 +139,3 @@ config_tree(){
fi
cd ..
}
subrepo_new(){
local pkg="$1" tree="$2" team="${3:-$2}"
local dest=${TREE_DIR_ARTIX}/$tree/$pkg/trunk
cd ${TREE_DIR_ARTIX}/$tree
local org=$(get_pkg_org "$pkg")
create_repo "$pkg" "$org"
add_repo_to_team "$pkg" "$org" "$team"
subrepo_clone "$pkg" "$org"
prepare_dir "$dest"
commit_jenkins_files "$pkg"
}

View File

@@ -20,55 +20,6 @@ get_compliant_name(){
echo $gitname
}
patch_pkg(){
local pkg="$1"
case $pkg in
'glibc')
sed -e 's|{locale,systemd/system,tmpfiles.d}|{locale,tmpfiles.d}|' \
-e '/nscd.service/d' \
-i $pkg/trunk/PKGBUILD
;;
'tp_smapi'|'acpi_call'|'r8168'|'bbswitch'|'broadcom-wl')
sed -e 's|-ARCH|-ARTIX|g' -i $pkg/trunk/PKGBUILD
;;
'nvidia')
sed -e 's|-ARCH|-ARTIX|g' -e 's|for Arch kernel|for Artix kernel|g' \
-e 's|for LTS Arch kernel|for LTS Artix kernel|g' \
-i $pkg/trunk/PKGBUILD
;;
'linux')
sed -e 's|-ARCH|-ARTIX|g' -i $pkg/trunk/PKGBUILD
sed -e 's|CONFIG_DEFAULT_HOSTNAME=.*|CONFIG_DEFAULT_HOSTNAME="artixlinux"|' \
-e 's|CONFIG_CRYPTO_SPECK=.*|CONFIG_CRYPTO_SPECK=n|' \
-i $pkg/trunk/config
cd $pkg/trunk
updpkgsums
cd ../..
;;
'licenses')
sed -e 's|https://www.archlinux.org/|https://www.artixlinux.org/|' -i $pkg/trunk/PKGBUILD
;;
'bash')
sed -e 's|system.bash_logout)|system.bash_logout artix.bashrc)|' \
-e "s|etc/bash.|etc/bash/|g" \
-e 's|"$pkgdir/etc/skel/.bash_logout"|"$pkgdir/etc/skel/.bash_logout"\n install -Dm644 artix.bashrc $pkgdir/etc/bash/bashrc.d/artix.bashrc|' \
-i $pkg/trunk/PKGBUILD
cd $pkg/trunk
patch -Np 1 -i ${DATADIR}/patches/artix-bash.patch
updpkgsums
cd ../..
;;
gstreamer|gst-plugins-*)
sed -e 's|https://www.archlinux.org/|https://www.artixlinux.org/|' \
-e 's|(Arch Linux)|(Artix Linux)|' \
-i $pkg/trunk/PKGBUILD
;;
esac
}
arch2artix(){
local repo="$1" artix=none
case "$repo" in
@@ -109,7 +60,7 @@ find_repo(){
local pkg="$1" stag="$2" unst="$3" repo=
for r in $(arch_repos "$stag" "$unst");do
[[ -f $pkg/repos/$r-x86_64/PKGBUILD ]] && repo=$r-x86_64
[[ -f $pkg/repos/$r-${ARCH}/PKGBUILD ]] && repo=$r-${ARCH}
[[ -f $pkg/repos/$r-any/PKGBUILD ]] && repo=$r-any
done
echo $repo
@@ -127,7 +78,8 @@ is_valid_repo(){
}
get_cases(){
local pkglist="${DATADIR}/pkglists/$1.list"
local pkglist="${SYSCONFDIR}/pkglist.d/$1.list"
local _space="s| ||g" _clean=':a;N;$!ba;s/\n/ /g' _com_rm="s|#.*||g"
local pkgs=($(sed "$_com_rm" "$pkglist" | sed "$_space" | sed "$_clean"))
@@ -143,22 +95,28 @@ get_artix_tree(){
local pkg="$1" artix_tree="${2:-$3}" tree
eval "case $pkg in
$(get_cases kernel)) tree=packages-kernel ;;
python-*|python2-*) tree=packages-python ;;
perl-*) tree=packages-perl ;;
ruby-*) tree=packages-ruby ;;
xorg*|xf86*|$(get_cases xorg)) tree=packages-xorg ;;
*-openrc) tree=packages-openrc ;;
*-runit) tree=packages-runit ;;
qt5-*) tree=packages-qt5 ;;
lxqt*|$(get_cases lxqt)) tree=packages-lxqt ;;
$(get_cases python)) tree=packages-python ;;
$(get_cases perl)) tree=packages-perl ;;
$(get_cases ruby)) tree=packages-ruby ;;
$(get_cases openrc)) tree=packages-openrc ;;
$(get_cases runit)) tree=packages-runit ;;
$(get_cases s6)) tree=packages-s6 ;;
$(get_cases media)) tree=packages-media ;;
$(get_cases xorg)) tree=packages-xorg ;;
$(get_cases qt5)) tree=packages-qt5 ;;
$(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 lxqt)) tree=packages-lxqt ;;
$(get_cases cinnamon)) tree=packages-cinnamon ;;
$(get_cases kde)) tree=packages-kde ;;
$(get_cases gnome)) tree=packages-gnome ;;
$(get_cases mate)) tree=packages-mate ;;
$(get_cases xfce)) tree=packages-xfce ;;
*) tree=$artix_tree
esac"
echo $tree
# $(get_cases freedesktop)) tree=packages-desktop ;;
# $(get_cases kde)) tree=packages-kde ;;
# $(get_cases gnome)) tree=packages-gnome ;;
}
get_import_path(){

View File

@@ -23,3 +23,45 @@ SYSCONFDIR=${SYSCONFDIR:-'@sysconfdir@/artools'}
for baselib in ${LIBDIR}/base/*.sh; do
. $baselib
done
load_user_info(){
OWNER=${SUDO_USER:-$USER}
if [[ -n $SUDO_USER ]]; then
eval "USER_HOME=~$SUDO_USER"
else
USER_HOME=$HOME
fi
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$USER_HOME/.config}"
USER_CONF_DIR="${XDG_CONFIG_HOME}/artools"
prepare_dir "${USER_CONF_DIR}"
USER_CACHE_DIR="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools"
}
load_base_config(){
local conf="$1/artools-base.conf"
[[ -f "$conf" ]] || return 1
[[ -r "$conf" ]] && . "$conf"
ARCH=$(uname -m)
CHROOTS_DIR=${CHROOTS_DIR:-'/var/lib/artools'}
WORKSPACE_DIR=${WORKSPACE_DIR:-"/home/${OWNER}/artools-workspace"}
prepare_dir "${WORKSPACE_DIR}"
return 0
}
load_user_info
load_base_config "${USER_CONF_DIR}" || load_base_config "${SYSCONFDIR}"

View File

@@ -12,6 +12,45 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. @libdir@/artools/util-base.sh
for isolib in ${LIBDIR}/iso/*.sh; do
. $isolib
done
load_iso_config(){
local conf="$1/artools-iso.conf"
[[ -f "$conf" ]] || return 1
[[ -r "$conf" ]] && . "$conf"
CHROOTS_ISO="${CHROOTS_DIR}/buildiso"
ISO_POOL=${ISO_POOL:-"${WORKSPACE_DIR}/iso"}
prepare_dir "${ISO_POOL}"
PROFILE='base'
ISO_VERSION=${ISO_VERSION:-"$(date +%Y%m%d)"}
INITSYS=${INITSYS:-'openrc'}
GPG_KEY=${GPG_KEY:-''}
UPLIMIT=${UPLIMIT:-1000}
FILE_HOST="download.${DOMAIN}"
FILE_HOME=${FILE_HOME:-'/srv/iso'}
FILE_PORT=${FILE_PORT:-65432}
ACCOUNT=${ACCOUNT:-'naughtyISOuploader'}
return 0
}
load_iso_config "${USER_CONF_DIR}" || load_iso_config "${SYSCONFDIR}"

View File

@@ -12,6 +12,75 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. @libdir@/artools/util-base.sh
for pkglib in ${LIBDIR}/pkg/*.sh; do
. $pkglib
done
load_pkg_config(){
local conf="$1/artools-pkg.conf"
[[ -f "$conf" ]] || return 1
[[ -r "$conf" ]] && . "$conf"
DOMAIN='artixlinux.org'
GIT_DOMAIN="gitea.${DOMAIN}"
GIT_URL="https://${GIT_DOMAIN}"
GIT_TOKEN=${GIT_TOKEN:-''}
TREE_DIR_ARTIX=${TREE_DIR_ARTIX:-"${WORKSPACE_DIR}/artixlinux"}
[[ -z ${TREE_NAMES_ARTIX[@]} ]] && \
TREE_NAMES_ARTIX=(
packages
community
packages-kernel
packages-openrc
packages-runit
packages-xorg
packages-python
packages-perl
packages-java
packages-qt5
packages-devel
packages-ruby
packages-gtk
packages-gnome
packages-cinnamon
packages-lxqt
packages-mate
packages-kde
packages-xfce
# packages-haskell
)
HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"}
TREE_DIR_ARCH=${TREE_DIR_ARCH:-"${WORKSPACE_DIR}/archlinux"}
TREE_NAMES_ARCH=(packages community)
HOST_TREE_ARCH=${HOST_TREE_ARCH:-'git://git.archlinux.org/svntogit'}
CHROOTS_PKG="${CHROOTS_DIR}/buildpkg"
REPOS_ROOT=${REPOS_ROOT:-"${WORKSPACE_DIR}/repos"}
REPOS_MIRROR=${REPOS_MIRROR:-'http://mirror1.artixlinux.org/repos'}
DBEXT=${DBEXT:-'xz'}
LINKSDBEXT=${LINKSDBEXT:-"links.tar.${DBEXT}"}
PKGDBEXT=${PKGDBEXT:-"db.tar.${DBEXT}"}
return 0
}
load_pkg_config "${USER_CONF_DIR}" || load_pkg_config "${SYSCONFDIR}"