Compare commits
	
		
			30 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 0a80e2b4e1 | |||
| 4679c59de0 | |||
| f308217f62 | |||
| 0cd97b0b1d | |||
| a4956dba6e | |||
| 8738706db2 | |||
| 5ca22931dd | |||
| 652ddcd3a9 | |||
| 7c60916356 | |||
| b4e6dface6 | |||
| fa38579488 | |||
| 07c1605666 | |||
| bfde5dbbb1 | |||
| 0918ff749d | |||
| 3d3e4376c5 | |||
| 7499878d00 | |||
| d9e99543f6 | |||
| 43983042dd | |||
| 1b5f09076f | |||
| d770030869 | |||
| ea06ec0b2e | |||
| e67990ae04 | |||
| b37d5f0236 | |||
| 989af04593 | |||
| 90f46d7ecc | |||
| 8e872ca9ca | |||
| 05c95b7025 | |||
| 442aee08df | |||
| 2c497f663b | |||
| 9a84cdedd5 | 
							
								
								
									
										165
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										165
									
								
								Makefile
									
									
									
									
									
								
							| @@ -1,58 +1,48 @@ | ||||
| VERSION=0.11 | ||||
| VERSION=0.12 | ||||
|  | ||||
| CHROOT_VERSION=0.9 | ||||
|  | ||||
| TOOLS = artools | ||||
| PREFIX ?= /usr/local | ||||
| PREFIX ?= /usr | ||||
| SYSCONFDIR = /etc | ||||
| BINDIR = $(PREFIX)/bin | ||||
| LIBDIR = $(PREFIX)/lib | ||||
| DATADIR = $(PREFIX)/share | ||||
| CPIODIR = $(SYSCONFDIR)/initcpio | ||||
|  | ||||
| SYSCONF = \ | ||||
| CONF = \ | ||||
| 	data/artools.conf | ||||
|  | ||||
| BIN_BASE = \ | ||||
| 	bin/mkchroot \ | ||||
| 	bin/basestrap \ | ||||
| 	bin/artools-chroot \ | ||||
| 	bin/fstabgen \ | ||||
| 	bin/signfile \ | ||||
| 	bin/chroot-run | ||||
| BASE_BIN = \ | ||||
| 	bin/base/signfile \ | ||||
| 	bin/base/chroot-run \ | ||||
| 	bin/base/mkchroot \ | ||||
| 	bin/base/basestrap \ | ||||
| 	bin/base/artools-chroot \ | ||||
| 	bin/base/fstabgen | ||||
|  | ||||
| LIBS_BASE = \ | ||||
| 	lib/util.sh \ | ||||
| 	lib/util-msg.sh \ | ||||
| 	lib/util-mount.sh \ | ||||
| 	lib/util-chroot.sh \ | ||||
| 	lib/util-fstab.sh | ||||
| BASE_LIBS = \ | ||||
| 	$(wildcard lib/base/*.sh) | ||||
|  | ||||
| SHARED_BASE = \ | ||||
| 	$(wildcard data/pacman*.conf) | ||||
| BASE_UTIL = lib/util-base.sh | ||||
|  | ||||
| BIN_PKG = \ | ||||
| 	bin/checkpkg \ | ||||
| 	bin/lddd \ | ||||
| 	bin/finddeps \ | ||||
| 	bin/find-libdeps \ | ||||
| 	bin/mkchrootpkg \ | ||||
| 	bin/buildpkg \ | ||||
| 	bin/buildtree \ | ||||
| 	bin/deploypkg \ | ||||
| 	bin/commitpkg \ | ||||
| 	bin/pkg2yaml | ||||
| BASE_DATA = \ | ||||
| 	$(wildcard data/base/pacman*.conf) | ||||
|  | ||||
| LIBS_PKG = \ | ||||
| 	$(wildcard lib/util-pkg*.sh) | ||||
| PKG_BIN = \ | ||||
| 	bin/pkg/buildpkg \ | ||||
| 	bin/pkg/deploypkg \ | ||||
| 	bin/pkg/commitpkg \ | ||||
| 	bin/pkg/comparepkg \ | ||||
| 	bin/pkg/checkpkg \ | ||||
| 	bin/pkg/mkchrootpkg \ | ||||
| 	bin/pkg/pkg2yaml \ | ||||
| 	bin/pkg/buildtree \ | ||||
| 	bin/pkg/lddd \ | ||||
| 	bin/pkg/finddeps \ | ||||
| 	bin/pkg/find-libdeps | ||||
|  | ||||
| SHARED_PKG = \ | ||||
| 	data/makepkg.conf | ||||
|  | ||||
| PATCHES = \ | ||||
| 	$(wildcard data/patches/*.patch) | ||||
|  | ||||
| COMMITPKG_SYMS = \ | ||||
| LN_COMMITPKG = \ | ||||
| 	extrapkg \ | ||||
| 	corepkg \ | ||||
| 	testingpkg \ | ||||
| @@ -66,7 +56,7 @@ COMMITPKG_SYMS = \ | ||||
| 	kde-unstablepkg \ | ||||
| 	gnome-unstablepkg | ||||
|  | ||||
| BUILDPKG_SYMS = \ | ||||
| LN_BUILDPKG = \ | ||||
| 	buildpkg-system \ | ||||
| 	buildpkg-world \ | ||||
| 	buildpkg-gremlins \ | ||||
| @@ -80,7 +70,7 @@ BUILDPKG_SYMS = \ | ||||
| 	buildpkg-kde-wobble \ | ||||
| 	buildpkg-gnome-wobble | ||||
|  | ||||
| DEPLOYPKG_SYMS = \ | ||||
| LN_DEPLOYPKG = \ | ||||
| 	deploypkg-system \ | ||||
| 	deploypkg-world \ | ||||
| 	deploypkg-gremlins \ | ||||
| @@ -94,76 +84,100 @@ DEPLOYPKG_SYMS = \ | ||||
| 	deploypkg-kde-wobble \ | ||||
| 	deploypkg-gnome-wobble | ||||
|  | ||||
| BIN_ISO = \ | ||||
| 	bin/buildiso \ | ||||
| 	bin/deployiso | ||||
| PKG_LIBS = \ | ||||
| 	$(wildcard lib/pkg/*) | ||||
|  | ||||
| BUILDISO_SYMS = \ | ||||
| PKG_UTIL = lib/util-pkg.sh | ||||
|  | ||||
| PKG_DATA = \ | ||||
| 	data/pkg/makepkg.conf | ||||
|  | ||||
| PATCHES = \ | ||||
| 	$(wildcard data/patches/*.patch) | ||||
|  | ||||
| ISO_BIN = \ | ||||
| 	bin/iso/buildiso \ | ||||
| 	bin/iso/deployiso | ||||
|  | ||||
| LN_BUILDISO = \ | ||||
| 	buildiso-gremlins \ | ||||
| 	buildiso-goblins | ||||
|  | ||||
| LIBS_ISO = \ | ||||
| 	$(wildcard lib/util-iso*.sh) | ||||
| ISO_LIBS = \ | ||||
| 	$(wildcard lib/iso/*.sh) | ||||
|  | ||||
| SHARED_ISO = \ | ||||
| 	data/mkinitcpio.conf | ||||
| ISO_UTIL = lib/util-iso.sh | ||||
|  | ||||
| ISO_DATA = \ | ||||
| 	data/iso/mkinitcpio.conf | ||||
|  | ||||
| DIRMODE = -dm0755 | ||||
| FILEMODE = -m0644 | ||||
| MODE =  -m0755 | ||||
|  | ||||
| LN = ln -sf | ||||
| RM = rm -f | ||||
| M4 = m4 -P | ||||
| CHMODAW = chmod a-w | ||||
| CHMODX = chmod +x | ||||
|  | ||||
| all: $(BIN_BASE) $(BIN_PKG) $(BIN_ISO) | ||||
| BIN = $(BASE_BIN) $(PKG_BIN) $(ISO_BIN) | ||||
| UTIL = $(BASE_UTIL) $(PKG_UTIL) $(ISO_UTIL) | ||||
|  | ||||
| EDIT = sed -e "s|@datadir[@]|$(DATADIR)/$(TOOLS)|g" \ | ||||
| 	-e "s|@sysconfdir[@]|$(SYSCONFDIR)/$(TOOLS)|g" \ | ||||
| 	-e "s|@libdir[@]|$(LIBDIR)/$(TOOLS)|g" \ | ||||
| 	-e "s|@version@|$(VERSION)|" \ | ||||
| all: $(BIN) $(UTIL) | ||||
|  | ||||
| EDIT_UTIL = sed -e "s|@datadir[@]|$(DATADIR)|g" \ | ||||
| 	-e "s|@sysconfdir[@]|$(SYSCONFDIR)|g" \ | ||||
| 	-e "s|@libdir[@]|$(LIBDIR)|g" \ | ||||
| 	-e "s|@chroot_version@|$(CHROOT_VERSION)|" | ||||
|  | ||||
| %: %.in Makefile | ||||
| EDIT_BIN = sed -e "s|@libdir[@]|$(LIBDIR)|g" | ||||
|  | ||||
| $(UTIL): %: %.in Makefile | ||||
| 	@echo "GEN $@" | ||||
| 	@$(RM) "$@" | ||||
| 	@$(M4) $@.in | $(EDIT) >$@ | ||||
| 	@$(M4) $@.in | $(EDIT_UTIL) >$@ | ||||
| 	@$(CHMODAW) "$@" | ||||
|  | ||||
| $(BIN): %: %.in Makefile | ||||
| 	@echo "GEN $@" | ||||
| 	@$(RM) "$@" | ||||
| 	@$(M4) $@.in | $(EDIT_BIN) >$@ | ||||
| 	@$(CHMODAW) "$@" | ||||
| 	@$(CHMODX) "$@" | ||||
|  | ||||
| clean: | ||||
| 	$(RM) $(BIN_BASE) $(BIN_PKG) $(BIN_ISO) | ||||
| 	$(RM) $(BIN) $(UTIL) | ||||
|  | ||||
| install_base: | ||||
| 	install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(SYSCONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) | ||||
|  | ||||
| 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | ||||
| 	install $(MODE) $(BIN_BASE) $(DESTDIR)$(BINDIR) | ||||
| 	install $(MODE) $(BASE_BIN) $(DESTDIR)$(BINDIR) | ||||
|  | ||||
| 	install $(DIRMODE) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(LIBS_BASE) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||
| 	install $(DIRMODE) $(DESTDIR)$(LIBDIR)/$(TOOLS)/base | ||||
| 	install $(FILEMODE) $(BASE_UTIL) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(BASE_LIBS) $(DESTDIR)$(LIBDIR)/$(TOOLS)/base | ||||
|  | ||||
| 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(SHARED_BASE) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(BASE_DATA) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||
|  | ||||
| install_pkg: | ||||
| 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | ||||
| 	install $(MODE) $(BIN_PKG) $(DESTDIR)$(BINDIR) | ||||
| 	install $(MODE) $(PKG_BIN) $(DESTDIR)$(BINDIR) | ||||
|  | ||||
| 	$(LN) find-libdeps $(DESTDIR)$(BINDIR)/find-libprovides | ||||
|  | ||||
| 	for l in $(COMMITPKG_SYMS); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done | ||||
| 	for l in $(BUILDPKG_SYMS); do $(LN) buildpkg $(DESTDIR)$(BINDIR)/$$l; done | ||||
| 	for l in $(DEPLOYPKG_SYMS); do $(LN) deploypkg $(DESTDIR)$(BINDIR)/$$l; done | ||||
| 	for l in $(LN_COMMITPKG); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done | ||||
| 	for l in $(LN_BUILDPKG); do $(LN) buildpkg $(DESTDIR)$(BINDIR)/$$l; done | ||||
| 	for l in $(LN_DEPLOYPKG); do $(LN) deploypkg $(DESTDIR)$(BINDIR)/$$l; done | ||||
|  | ||||
| 	install $(DIRMODE) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(LIBS_PKG) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||
| 	install $(DIRMODE) $(DESTDIR)$(LIBDIR)/$(TOOLS)/pkg | ||||
| 	install $(FILEMODE) $(PKG_UTIL) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(PKG_LIBS) $(DESTDIR)$(LIBDIR)/$(TOOLS)/pkg | ||||
|  | ||||
| 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(SHARED_PKG) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(PKG_DATA) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||
|  | ||||
| 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches | ||||
| 	install $(FILEMODE) $(PATCHES) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches | ||||
| @@ -172,16 +186,17 @@ install_cpio: | ||||
|  | ||||
| install_iso: install_cpio | ||||
| 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | ||||
| 	install $(MODE) $(BIN_ISO) $(DESTDIR)$(BINDIR) | ||||
| 	install $(MODE) $(ISO_BIN) $(DESTDIR)$(BINDIR) | ||||
|  | ||||
| 	for l in $(BUILDISO_SYMS); do $(LN) buildiso $(DESTDIR)$(BINDIR)/$$l; done | ||||
| 	for l in $(LN_BUILDISO); do $(LN) buildiso $(DESTDIR)$(BINDIR)/$$l; done | ||||
|  | ||||
| 	install $(DIRMODE) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(LIBS_ISO) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||
| 	install $(DIRMODE) $(DESTDIR)$(LIBDIR)/$(TOOLS)/iso | ||||
| 	install $(FILEMODE) $(ISO_UTIL) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(ISO_LIBS) $(DESTDIR)$(LIBDIR)/$(TOOLS)/iso | ||||
|  | ||||
| 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(SHARED_ISO) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(ISO_DATA) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||
|  | ||||
| install: install_base install_pkg install_iso | ||||
|  | ||||
| .PHONY: all clean install | ||||
| .PHONY: all clean install install_base install_pkg install_iso | ||||
|   | ||||
| @@ -4,7 +4,7 @@ artools | ||||
| #### Make flags | ||||
|  | ||||
|  | ||||
| * PREFIX=/usr/local (default if defined) | ||||
| * PREFIX=/usr | ||||
| * SYSCONFDIR=/etc | ||||
|  | ||||
| #### Dependencies | ||||
|   | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -9,16 +12,9 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| 
 | ||||
| VERSION=@version@ | ||||
| 
 | ||||
| shopt -s extglob | ||||
| 
 | ||||
| LIBDIR='@libdir@' | ||||
| SYSCONFDIR='@sysconfdir@' | ||||
| 
 | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| import ${LIBDIR}/util-mount.sh | ||||
| . @libdir@/artools/util-base.sh | ||||
| 
 | ||||
| select_os(){ | ||||
|     local os_list=( $(detect) ) count=${#os_list[@]} | ||||
| @@ -52,7 +48,7 @@ select_os(){ | ||||
| 
 | ||||
| load_user_info | ||||
| 
 | ||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| 
 | ||||
| automount=false | ||||
| 
 | ||||
| @@ -1,4 +1,16 @@ | ||||
| #!/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. | ||||
| 
 | ||||
| # | ||||
| # Assumptions: | ||||
| @@ -8,17 +20,9 @@ | ||||
| #  4) A valid mirror appears in /etc/pacman.d/mirrorlist | ||||
| # | ||||
| 
 | ||||
| VERSION=@version@ | ||||
| 
 | ||||
| shopt -s extglob | ||||
| 
 | ||||
| DATADIR='@datadir@' | ||||
| LIBDIR='@libdir@' | ||||
| 
 | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| import ${LIBDIR}/util-mount.sh | ||||
| import ${LIBDIR}/util-chroot.sh | ||||
| . @libdir@/artools/util-base.sh | ||||
| 
 | ||||
| copy_mirrorlist(){ | ||||
|     cp -a /etc/pacman.d/mirrorlist "$1/etc/pacman.d/" | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -9,16 +12,9 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| 
 | ||||
| VERSION=@version@ | ||||
| chroot_version=0.9 | ||||
| 
 | ||||
| chroot_version=@chroot_version@ | ||||
| 
 | ||||
| LIBDIR='@libdir@' | ||||
| 
 | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| import ${LIBDIR}/util-chroot.sh | ||||
| import ${LIBDIR}/util-mount.sh | ||||
| . @libdir@/artools/util-base.sh | ||||
| 
 | ||||
| working_dir='' | ||||
| files=() | ||||
| @@ -115,8 +111,8 @@ umask 0022 | ||||
| # Sanity check | ||||
| if [[ ! -f "$working_dir/.artools" ]]; then | ||||
|     die "'%s' does not appear to be an artix chroot." "$working_dir" | ||||
| elif [[ $(cat "$working_dir/.artools") != $chroot_version ]]; then | ||||
|     die "chroot '%s' is not at version %s. Please rebuild." "$working_dir" "$chroot_version" | ||||
| elif [[ $(cat "$working_dir/.artools") != ${CHROOTVERSION} ]]; then | ||||
|     die "chroot '%s' is not at version %s. Please rebuild." "$working_dir" "${CHROOTVERSION}" | ||||
| fi | ||||
| 
 | ||||
| chroot_api_mount "${working_dir}" || die "failed to setup API filesystems in chroot %s" "${working_dir}" | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -9,14 +12,9 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| 
 | ||||
| VERSION=@version@ | ||||
| 
 | ||||
| shopt -s extglob | ||||
| 
 | ||||
| LIBDIR='@libdir@' | ||||
| 
 | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util-fstab.sh | ||||
| . @libdir@/artools/util-base.sh | ||||
| 
 | ||||
| write_source() { | ||||
|     local src=$1 spec= label= uuid= comment=() | ||||
| @@ -209,7 +207,7 @@ done | ||||
| 
 | ||||
|     while read -r device type _ _ prio; do | ||||
|         options=defaults | ||||
|         if [[ $prio != -1 ]]; then | ||||
|         if (( prio >= 0 )); then | ||||
|             options+=,pri=$prio | ||||
|         fi | ||||
| 
 | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -9,15 +12,7 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| 
 | ||||
| VERSION=@version@ | ||||
| 
 | ||||
| chroot_version=@chroot_version@ | ||||
| 
 | ||||
| LIBDIR='@libdir@' | ||||
| 
 | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| import ${LIBDIR}/util-chroot.sh | ||||
| . @libdir@/artools/util-base.sh | ||||
| 
 | ||||
| working_dir='' | ||||
| files=() | ||||
| @@ -102,7 +97,7 @@ 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' | ||||
| 
 | ||||
| echo "$chroot_version" > "$working_dir/.artools" | ||||
| 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" | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -9,16 +12,11 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| 
 | ||||
| VERSION=@version@ | ||||
| 
 | ||||
| LIBDIR='@libdir@' | ||||
| 
 | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| . @libdir@/artools/util-base.sh | ||||
| 
 | ||||
| load_user_info | ||||
| 
 | ||||
| load_vars "${PAC_USERCONFDIR}/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
| 
 | ||||
| file_to_sign="$1" | ||||
| @@ -28,9 +26,10 @@ if [ ! -e "$1" ]; then | ||||
|     exit 1 | ||||
| fi | ||||
| 
 | ||||
| msg2 "Signing [%s] with key %s" "${file_to_sign##*/}" "${GPGKEY}..." | ||||
| if [[ -n "${BUILDBOT_GPGP}" ]]; then | ||||
|     msg2 "Signing [%s]" "${file_to_sign##*/}" | ||||
|     gpg --batch --passphrase "${BUILDBOT_GPGP}" --detach-sign "$file_to_sign" | ||||
| else | ||||
|     msg2 "Signing [%s] with key %s" "${file_to_sign##*/}" "${GPGKEY}..." | ||||
|     gpg --detach-sign --use-agent -u "${GPGKEY}" "$file_to_sign" | ||||
| fi | ||||
							
								
								
									
										339
									
								
								bin/buildtree.in
									
									
									
									
									
								
							
							
						
						
									
										339
									
								
								bin/buildtree.in
									
									
									
									
									
								
							| @@ -1,339 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # 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. | ||||
|  | ||||
| VERSION=@version@ | ||||
|  | ||||
| LIBDIR='@libdir@' | ||||
| SYSCONFDIR='@sysconfdir@' | ||||
| DATADIR='@datadir@' | ||||
|  | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| import ${LIBDIR}/util-pkg.sh | ||||
| import ${LIBDIR}/util-pkg-gitea.sh | ||||
| import ${LIBDIR}/util-pkg-subrepo.sh | ||||
|  | ||||
| pull_tree_arch(){ | ||||
|     cd ${TREE_DIR_ARCH} | ||||
|     for tree in ${tree_names[@]};do | ||||
|         if [[ -d ${tree} ]];then | ||||
|             cd ${tree} | ||||
|             msg "Checking (%s)" "${tree}" | ||||
|             pull_tree | ||||
|             cd .. | ||||
|         else | ||||
|             msg "Cloning (%s) ..." "$tree" | ||||
|             clone_tree "${HOST_TREE_ARCH}/${tree}" | ||||
|         fi | ||||
|     done | ||||
| } | ||||
|  | ||||
| config_tree(){ | ||||
|     local tree="$1" | ||||
|     cd $tree | ||||
|         git config --bool pull.rebase true | ||||
|         git config commit.gpgsign true | ||||
|         if [[ -n "${GPGKEY}" ]];then | ||||
|             git config user.signingkey "${GPGKEY}" | ||||
|         else | ||||
|             warning "No GPGKEY configured in makepkg.conf!" | ||||
|         fi | ||||
|     cd .. | ||||
| } | ||||
|  | ||||
| pull_tree_artix(){ | ||||
|     cd ${TREE_DIR_ARTIX} | ||||
|     for tree in ${tree_names[@]};do | ||||
|         if [[ -d ${tree} ]];then | ||||
|             config_tree "${tree}" | ||||
|             cd ${tree} | ||||
|             msg "Checking (%s)" "${tree}" | ||||
|             pull_tree | ||||
|             cd .. | ||||
|         else | ||||
|             msg "Cloning (%s) ..." "$tree" | ||||
|             clone_tree "${HOST_TREE_ARTIX}/${tree}" | ||||
|             config_tree "${tree}" | ||||
|         fi | ||||
|     done | ||||
| } | ||||
|  | ||||
| mkrepo(){ | ||||
|     local pkg="$1" team="$2" | ||||
|     local pkg_path=${TREE_DIR_ARTIX}/$team/$pkg | ||||
|  | ||||
|     cd ${TREE_DIR_ARTIX}/$team | ||||
|  | ||||
|     local org=$(get_pkg_org "$pkg") | ||||
|  | ||||
|     create_repo "$pkg" "$org" | ||||
|  | ||||
|     add_repo_to_team "$pkg" "$org" "$team" | ||||
|  | ||||
|     subrepo_clone "$pkg" "$org" | ||||
|  | ||||
|     prepare_dir "$pkg_path/trunk" | ||||
|  | ||||
|     cd $pkg_path | ||||
|     commit_jenkins_files | ||||
| } | ||||
|  | ||||
| show_version_table(){ | ||||
|     msg_table_header "%-20s %-20s %-25s %-30s %-30s" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" | ||||
|  | ||||
|     for tree in ${tree_names[@]};do | ||||
|  | ||||
|         local git=$(find ${TREE_DIR_ARTIX}/$tree/ -mindepth 1 -maxdepth 1 -type d) | ||||
|  | ||||
|         for package in ${git[@]}; do | ||||
|  | ||||
|             local pkg=${package##*/} | ||||
|             local artixrepo=$(find_repo "$package" "${unstable}" "${staging}") | ||||
|             local artixshow=${artixrepo%-*} | ||||
|             local pkgbuild=$package/repos/$artixrepo/PKGBUILD | ||||
|  | ||||
|             if [[ -f $pkgbuild ]];then | ||||
|  | ||||
|                 source $pkgbuild 2>/dev/null | ||||
|                 local artixver=$(get_full_version $pkg) | ||||
|  | ||||
|                 local archpath=$(get_import_path "$pkg") | ||||
|                 local archrepo=$(find_repo "$archpath" "${unstable}" "${staging}") | ||||
|                 local archshow=${archrepo%-*} | ||||
|                 pkgbuild=$archpath/repos/$archrepo/PKGBUILD | ||||
|  | ||||
|                 if [[ -f $pkgbuild ]];then | ||||
|                     source $pkgbuild 2>/dev/null | ||||
|                     local archver=$(get_full_version $pkg) | ||||
|                 fi | ||||
|  | ||||
|                 if ${artix};then | ||||
|  | ||||
|                     if [ $(vercmp "$artixver" "$archver") -eq 0 ] || [ $(vercmp "$artixver" "$archver") -gt 0 ];then | ||||
|                         case $artixrepo in | ||||
|                             *staging*) | ||||
|                                 if [[ "$archrepo" == "$artixrepo" ]];then | ||||
|                                     msg_row "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                                 else | ||||
|                                     msg_row_notify "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                                 fi | ||||
|                             ;; | ||||
|                             *testing*) | ||||
|                                 if [[ "$archrepo" == "$artixrepo" ]];then | ||||
|                                     msg_row "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                                 else | ||||
|                                     msg_row_notify "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                                 fi | ||||
|                             ;; | ||||
|                         esac | ||||
|                     fi | ||||
|  | ||||
|                 else | ||||
|  | ||||
|                     if [ $(vercmp "$artixver" "$archver") -lt 0 ];then | ||||
|                         ${upgrades} && msg_row_upgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                     fi | ||||
|  | ||||
|                     if [ $(vercmp "$artixver" "$archver") -gt 0 ];then | ||||
|                         if [[ -n $archver ]] && [[ -n $archrepo ]];then | ||||
|                             ${downgrades} && msg_row_downgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                         fi | ||||
|                     fi | ||||
|  | ||||
|                 fi | ||||
|                 unset pkgver epoch pkgrel artixver archver | ||||
|  | ||||
|             fi | ||||
|         done | ||||
|     done | ||||
| } | ||||
|  | ||||
| sync_pkg(){ | ||||
|     local rsync_args=(-aWxvci --progress --delete-before --no-R --no-implied-dirs) | ||||
|     local src="$1" dest="$2" tree="$3" | ||||
|  | ||||
|     info "Sync from archlinux (%s)" "$git_tree_arch" | ||||
|     rsync "${rsync_args[@]}" $src/ $dest/ | ||||
| } | ||||
|  | ||||
| show_deps(){ | ||||
|     local src="$1" repo="$2" | ||||
|  | ||||
|     source $src/PKGBUILD 2>/dev/null | ||||
|  | ||||
|     [[ $arch == 'any' ]] && CARCH=any | ||||
|  | ||||
|     local archver=$(get_full_version $pkg) | ||||
|  | ||||
|     msg "git tree: %s" "$git_tree_arch" | ||||
|     msg2 "repo: %s" "$repo" | ||||
|     [[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}" | ||||
|     msg2 "pkgname: %s" "${pkgname[*]}" | ||||
|     [[ -n $pkgdesc ]] && msg2 "pkgdesc: %s" "${pkgdesc}" | ||||
|     msg2 "Arch Version: %s" "$archver" | ||||
|     msg2 "arch: %s" "$CARCH" | ||||
|  | ||||
|     [[ -n ${makedepends[@]} ]] && msg2 "makedepends: %s" "${makedepends[*]}" | ||||
|     [[ -n ${checkdepends[@]} ]] && msg2 "checkdepends: %s" "${checkdepends[*]}" | ||||
|     [[ -n ${depends[@]} ]] && msg2 "depends: %s" "${depends[*]}" | ||||
|     [[ -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" | ||||
|  | ||||
|     local package=${TREE_DIR_ARCH}/$git_tree_arch/$pkg | ||||
|     local repo=$(find_repo "$package" "${unstable}") | ||||
|  | ||||
|     src=$package/repos/$repo | ||||
|  | ||||
|     local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "$pkg") | ||||
|     dest=${TREE_DIR_ARTIX}/$git_tree_artix/$pkg/trunk | ||||
|  | ||||
|     show_deps "$src" "$repo" | ||||
|  | ||||
|     if [[ -d $dest ]];then | ||||
|         cd ${TREE_DIR_ARTIX}/$git_tree_artix | ||||
|  | ||||
|         source $dest/PKGBUILD 2>/dev/null | ||||
|         local artixver=$(get_full_version $pkg) | ||||
|  | ||||
|         msg2 "Artix Version: %s" "$artixver" | ||||
|         sync_pkg "$src" "$dest" "$git_tree_arch" | ||||
|         patch_pkg "$pkg" | ||||
|     else | ||||
|         [[ $git_tree_arch == 'packages' ]] && git_tree_artix=$git_tree_arch | ||||
|         [[ $git_tree_arch == 'community' ]] && git_tree_artix=$git_tree_arch | ||||
|  | ||||
|         local pkg_path=${TREE_DIR_ARTIX}/$git_tree_artix/$pkg | ||||
|  | ||||
|         cd ${TREE_DIR_ARTIX}/$git_tree_artix | ||||
|  | ||||
|         local org=$(get_pkg_org "$pkg") | ||||
|  | ||||
|         create_repo "$pkg" "$org" | ||||
|  | ||||
|         add_repo_to_team "$pkg" "$org" "$git_tree_artix" | ||||
|  | ||||
|         subrepo_clone "$pkg" "$org" | ||||
|  | ||||
|         cd $pkg_path | ||||
|         commit_jenkins_files | ||||
|  | ||||
|         dest=$pkg_path/trunk | ||||
|  | ||||
|         sync_pkg "$src" "$dest" "$git_tree_arch" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| 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 pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/$pkg | ||||
|     local repo=$(find_repo "$pkg_path" "${unstable}") | ||||
|  | ||||
|     src=$pkg_path/repos/$repo | ||||
|  | ||||
|     show_deps "$src" "$repo" | ||||
| } | ||||
|  | ||||
| sync_repos(){ | ||||
|     ${sync_arch} && pull_tree_arch | ||||
|     pull_tree_artix | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| load_vars "${PAC_USERCONFDIR}/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
|  | ||||
| sync=false | ||||
| sync_arch=true | ||||
| compare=false | ||||
| unstable=false | ||||
| staging=true | ||||
| upgrades=false | ||||
| downgrades=false | ||||
| artix=false | ||||
| import=false | ||||
| view=false | ||||
| createnew=false | ||||
|  | ||||
| PACKAGE='' | ||||
|  | ||||
| tree_names=(packages community) | ||||
| TEAM=${tree_names[0]} | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options]" | ||||
|     echo '    -p <pkg>      Package name' | ||||
|     echo '    -t <team>     Team name (only with -m)' | ||||
|     echo "                  [default: ${TEAM}]" | ||||
|     echo "    -s            Clone or pull repos" | ||||
|     echo "    -z            Don't clone or pull arch repos" | ||||
|     echo '    -c            Compare packages' | ||||
|     echo '    -u            Show upgrade packages' | ||||
|     echo '    -d            Show downgrade packages' | ||||
|     echo '    -a            Show testing packages' | ||||
|     echo "    -y            Don't inlcude staging packages" | ||||
|     echo '    -x            Include unstable kde and gnome' | ||||
|     echo '    -i            Import a package from arch repos' | ||||
|     echo '    -m            Make new remote subrepo and clone it' | ||||
|     echo '    -v            View package depends' | ||||
|     echo '    -h            This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
|     exit $1 | ||||
| } | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='p:t:csudayimzxvh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         p) PACKAGE="$OPTARG" ;; | ||||
|         t) TEAM="$OPTARG" ;; | ||||
|         s) sync=true ;; | ||||
|         z) sync_arch=false ;; | ||||
|         c) compare=true ;; | ||||
|         u) upgrades=true ;; | ||||
|         d) downgrades=true ;; | ||||
|         a) artix=true ;; | ||||
|         y) staging=false ;; | ||||
|         i) import=true ;; | ||||
|         m) createnew=true ;; | ||||
|         v) view=true ;; | ||||
|         x) unstable=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
| shift $(($OPTIND - 1)) | ||||
|  | ||||
| prepare_dir "${TREE_DIR_ARTIX}" | ||||
| prepare_dir "${TREE_DIR_ARCH}" | ||||
|  | ||||
| ${sync} && sync_repos | ||||
|  | ||||
| ${view} && view_build "${PACKAGE}" | ||||
|  | ||||
| ${compare} && show_version_table | ||||
|  | ||||
| ${import} && from_arch "${PACKAGE}" | ||||
|  | ||||
| ${createnew} && mkrepo "${PACKAGE}" "${TEAM}" | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -9,15 +12,8 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| 
 | ||||
| VERSION=@version@ | ||||
| 
 | ||||
| LIBDIR='@libdir@' | ||||
| DATADIR='@datadir@' | ||||
| SYSCONFDIR='@sysconfdir@' | ||||
| 
 | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| import ${LIBDIR}/util-iso.sh | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-iso.sh | ||||
| 
 | ||||
| prepare_build(){ | ||||
|     timer_start=$(get_timer) | ||||
| @@ -31,7 +27,7 @@ prepare_build(){ | ||||
|     esac | ||||
| 
 | ||||
|     pacman_conf="${DATADIR}/$pac_file" | ||||
|     [[ -f $AT_USERCONFDIR/$pac_file ]] && pacman_conf="$AT_USERCONFDIR/$pac_file" | ||||
|     [[ -f ${USERCONFDIR}/artools/$pac_file ]] && pacman_conf="${USERCONFDIR}/artools/$pac_file" | ||||
| 
 | ||||
|     iso_file=$(gen_iso_fn).iso | ||||
| 
 | ||||
| @@ -99,7 +95,7 @@ build(){ | ||||
| 
 | ||||
| load_user_info | ||||
| 
 | ||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| 
 | ||||
| clean_first=true | ||||
| pretend=false | ||||
| @@ -161,12 +157,12 @@ done | ||||
| 
 | ||||
| shift $(($OPTIND - 1)) | ||||
| 
 | ||||
| ${pretend} && display_settings && exit 1 | ||||
| 
 | ||||
| check_root | ||||
| 
 | ||||
| prepare_traps | ||||
| 
 | ||||
| prepare_build | ||||
| 
 | ||||
| ${pretend} && display_settings && exit 1 | ||||
| 
 | ||||
| build | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -9,13 +12,7 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| 
 | ||||
| VERSION=@version@ | ||||
| 
 | ||||
| LIBDIR='@libdir@' | ||||
| SYSCONFDIR='@sysconfdir@' | ||||
| 
 | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| . @libdir@/artools/util-base.sh | ||||
| 
 | ||||
| connect(){ | ||||
|     echo "${ACCOUNT}@${FILE_HOST}:${FILE_HOME}" | ||||
| @@ -35,7 +32,7 @@ sync_dir(){ | ||||
| 
 | ||||
| load_user_info | ||||
| 
 | ||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| 
 | ||||
| update=false | ||||
| verbose=false | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -9,19 +12,12 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| 
 | ||||
| VERSION=@version@ | ||||
| 
 | ||||
| LIBDIR='@libdir@' | ||||
| SYSCONFDIR='@sysconfdir@' | ||||
| DATADIR='@datadir@' | ||||
| 
 | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| import ${LIBDIR}/util-chroot.sh | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-pkg.sh | ||||
| 
 | ||||
| load_user_info | ||||
| 
 | ||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| 
 | ||||
| create_first=false | ||||
| 
 | ||||
| @@ -38,10 +34,10 @@ case ${repo} in | ||||
| esac | ||||
| 
 | ||||
| pacman_conf="${DATADIR}/pacman-${repo}.conf" | ||||
| [[ -f $AT_USERCONFDIR/pacman-${repo}.conf ]] && pacman_conf="$AT_USERCONFDIR/pacman-${repo}.conf" | ||||
| [[ -f ${USERCONFDIR}/artools/pacman-${repo}.conf ]] && pacman_conf="${USERCONFDIR}/artools/pacman-${repo}.conf" | ||||
| 
 | ||||
| makepkg_conf="${DATADIR}/makepkg.conf" | ||||
| [[ -f $AT_USERCONFDIR/makepkg.conf ]] && makepkg_conf="$AT_USERCONFDIR/makepkg.conf" | ||||
| [[ -f ${USERCONFDIR}/artools/makepkg.conf ]] && makepkg_conf="${USERCONFDIR}/artools/makepkg.conf" | ||||
| 
 | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options] -- [mkchrootpkg_args]" | ||||
							
								
								
									
										194
									
								
								bin/pkg/buildtree.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										194
									
								
								bin/pkg/buildtree.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,194 @@ | ||||
| #!/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 | ||||
|  | ||||
| pull_tree_arch(){ | ||||
|     cd ${TREE_DIR_ARCH} | ||||
|     for tree in ${tree_names[@]};do | ||||
|         if [[ -d ${tree} ]];then | ||||
|             cd ${tree} | ||||
|             pull_tree "${tree}" | ||||
|             cd .. | ||||
|         else | ||||
|             clone_tree "${HOST_TREE_ARCH}" "${tree}" | ||||
|         fi | ||||
|     done | ||||
| } | ||||
|  | ||||
| pull_tree_artix(){ | ||||
|     cd ${TREE_DIR_ARTIX} | ||||
|     for tree in ${tree_names[@]};do | ||||
|         if [[ -d ${tree} ]];then | ||||
|             config_tree "${tree}" | ||||
|             cd ${tree} | ||||
|             pull_tree "${tree}" | ||||
|             cd .. | ||||
|         else | ||||
|             clone_tree "${HOST_TREE_ARTIX}" "${tree}" | ||||
|             config_tree "${tree}" | ||||
|         fi | ||||
|     done | ||||
| } | ||||
|  | ||||
| sync_pkg(){ | ||||
|     local rsync_args=(-aWxvci --progress --delete-before --no-R --no-implied-dirs) | ||||
|     local src="$1" dest="$2" | ||||
|  | ||||
|     rsync "${rsync_args[@]}" $src/ $dest/ | ||||
| } | ||||
|  | ||||
| show_deps(){ | ||||
|     local src="$1" repo="$2" | ||||
|  | ||||
|     . $src/PKGBUILD 2>/dev/null | ||||
|  | ||||
|     [[ $arch == 'any' ]] && CARCH=any | ||||
|  | ||||
|     local archver=$(get_full_version $pkg) | ||||
|  | ||||
|     msg "git tree: %s" "$git_tree_arch" | ||||
|     msg2 "repo: %s" "$repo" | ||||
|     [[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}" | ||||
|     msg2 "pkgname: %s" "${pkgname[*]}" | ||||
|     [[ -n $pkgdesc ]] && msg2 "pkgdesc: %s" "${pkgdesc}" | ||||
|     msg2 "Arch Version: %s" "$archver" | ||||
|     msg2 "arch: %s" "$CARCH" | ||||
|  | ||||
|     [[ -n ${makedepends[@]} ]] && msg2 "makedepends: %s" "${makedepends[*]}" | ||||
|     [[ -n ${checkdepends[@]} ]] && msg2 "checkdepends: %s" "${checkdepends[*]}" | ||||
|     [[ -n ${depends[@]} ]] && msg2 "depends: %s" "${depends[*]}" | ||||
|     [[ -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" | ||||
|  | ||||
|     local package=${TREE_DIR_ARCH}/$git_tree_arch/$pkg | ||||
|     local repo=$(find_repo "$package") | ||||
|  | ||||
|     src=$package/repos/$repo | ||||
|  | ||||
|     dest=${TREE_DIR_ARTIX}/$git_tree_arch/$pkg/trunk | ||||
|  | ||||
|     show_deps "$src" "$repo" | ||||
|  | ||||
|     if [[ -d $dest ]];then | ||||
|         cd ${TREE_DIR_ARTIX}/$git_tree_arch | ||||
|  | ||||
|         . $dest/PKGBUILD 2>/dev/null | ||||
|         local artixver=$(get_full_version $pkg) | ||||
|  | ||||
|         msg2 "Artix Version: %s" "$artixver" | ||||
|     else | ||||
|         subrepo_new "$pkg" "$git_tree_arch" | ||||
|     fi | ||||
|  | ||||
|     info "Sync from archlinux (%s)" "$git_tree_arch" | ||||
|     sync_pkg "$src" "$dest" | ||||
|     patch_pkg "$pkg" | ||||
| } | ||||
|  | ||||
| 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 pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/$pkg | ||||
|     local repo=$(find_repo "$pkg_path") | ||||
|  | ||||
|     src=$pkg_path/repos/$repo | ||||
|  | ||||
|     show_deps "$src" "$repo" | ||||
| } | ||||
|  | ||||
| sync_repos(){ | ||||
|     ${sync_arch} && pull_tree_arch | ||||
|     pull_tree_artix | ||||
| } | ||||
|  | ||||
| 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 /etc/makepkg.conf | ||||
|  | ||||
| sync=false | ||||
| sync_arch=true | ||||
| import=false | ||||
| view=false | ||||
| createnew=false | ||||
| conf=false | ||||
|  | ||||
| PACKAGE='' | ||||
|  | ||||
| tree_names=(packages community) | ||||
| TEAM=${tree_names[0]} | ||||
| SUBORG='' | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options]" | ||||
|     echo '    -p <pkg>      Package name' | ||||
|     echo '    -t <team>     Team name (only with -n)' | ||||
|     echo "                  [default: ${TEAM}]" | ||||
|     echo '    -o <org>      Org of subrepo (only with -c)' | ||||
|     echo "    -s            Clone or pull repos" | ||||
|     echo "    -z            Don't clone or pull arch repos" | ||||
|     echo '    -i            Import a package from arch repos' | ||||
|     echo '    -n            Make new remote subrepo and clone it' | ||||
|     echo '    -c            Configure subrepo url' | ||||
|     echo '    -v            View package depends' | ||||
|     echo '    -h            This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
|     exit $1 | ||||
| } | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='p:t:o:csinzvh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         p) PACKAGE="$OPTARG" ;; | ||||
|         t) TEAM="$OPTARG" ;; | ||||
|         o) SUBORG="$OPTARG" ;; | ||||
|         s) sync=true ;; | ||||
|         z) sync_arch=false ;; | ||||
|         i) import=true ;; | ||||
|         n) createnew=true ;; | ||||
|         v) view=true ;; | ||||
|         c) conf=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
| shift $(($OPTIND - 1)) | ||||
|  | ||||
| prepare_dir "${TREE_DIR_ARTIX}" | ||||
| prepare_dir "${TREE_DIR_ARCH}" | ||||
|  | ||||
| ${sync} && sync_repos | ||||
|  | ||||
| ${view} && view_build "${PACKAGE}" | ||||
|  | ||||
| ${import} && from_arch "${PACKAGE}" | ||||
|  | ||||
| ${createnew} && subrepo_new "${PACKAGE}" "${TEAM}" | ||||
|  | ||||
| ${conf} && subrepo_config "${PACKAGE}" "${SUBORG}" | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -9,19 +12,14 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| 
 | ||||
| VERSION=@version@ | ||||
| 
 | ||||
| LIBDIR='@libdir@' | ||||
| 
 | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| import ${LIBDIR}/util-pkg.sh | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-pkg.sh | ||||
| 
 | ||||
| shopt -s extglob | ||||
| 
 | ||||
| load_user_info | ||||
| 
 | ||||
| load_vars "${PAC_USERCONFDIR}/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
| 
 | ||||
| if [[ ! -f PKGBUILD ]]; then | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -9,16 +12,8 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| 
 | ||||
| VERSION=@version@ | ||||
| 
 | ||||
| LIBDIR='@libdir@' | ||||
| SYSCONFDIR='@sysconfdir@' | ||||
| DATADIR='@datadir@' | ||||
| 
 | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| import ${LIBDIR}/util-pkg.sh | ||||
| import ${LIBDIR}/util-pkg-subrepo.sh | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-pkg.sh | ||||
| 
 | ||||
| is_valid_repo(){ | ||||
|     local src="$1" | ||||
| @@ -33,11 +28,13 @@ commit_pkg(){ | ||||
|     if [[ -n ${git_tree} ]];then | ||||
|         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} | ||||
| 
 | ||||
|         source trunk/PKGBUILD | ||||
|         . trunk/PKGBUILD | ||||
|         [[ $arch == 'any' ]] && CARCH=any | ||||
|         local ver=$(get_full_version "${PACKAGE}") | ||||
|         local commit_msg="" | ||||
| 
 | ||||
|         local head=$(get_local_head) | ||||
| 
 | ||||
|         if ${remove};then | ||||
|             local action='remove' | ||||
|             if [[ "${REPO_SRC}" == 'trunk' ]];then | ||||
| @@ -60,16 +57,13 @@ commit_pkg(){ | ||||
| 
 | ||||
|         cd ${TREE_DIR_ARTIX}/${git_tree} | ||||
| 
 | ||||
|         if ${push};then | ||||
|             msg2 "Check (%s)" "${git_tree}" | ||||
|             git pull origin master | ||||
|         ${push} && pull_tree "${git_tree}" "$head" | ||||
| 
 | ||||
|             msg2 "Update (%s)" "${PACKAGE}" | ||||
|         subrepo_push "${PACKAGE}" | ||||
| #             sleep 1 | ||||
|             msg2 "Update (%s)" "${git_tree}" | ||||
|             git push origin master | ||||
|         fi | ||||
|         subrepo_clean "${PACKAGE}" | ||||
| 
 | ||||
|         ${push} && push_tree "${git_tree}" | ||||
| 
 | ||||
|         git prune | ||||
|     else | ||||
|         error "Package '%s' does not exist!" "${PACKAGE}" | ||||
| @@ -81,10 +75,12 @@ symlink_commit_pkg(){ | ||||
|     if [[ -n ${git_tree} ]];then | ||||
|         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} | ||||
| 
 | ||||
|         source trunk/PKGBUILD | ||||
|         . trunk/PKGBUILD | ||||
|         [[ $arch == 'any' ]] && CARCH=any | ||||
|         local ver=$(get_full_version "${PACKAGE}") | ||||
| 
 | ||||
|         local head=$(get_local_head) | ||||
| 
 | ||||
|         if [[ ${REPO_SRC} == 'trunk' ]];then | ||||
|             local action='add' | ||||
|             local dest="${REPO_DEST}-$CARCH" | ||||
| @@ -98,6 +94,7 @@ symlink_commit_pkg(){ | ||||
|             local action='move' | ||||
|             local src="${REPO_SRC}-$CARCH" dest="${REPO_DEST}-$CARCH" | ||||
| 
 | ||||
|             [[ ! -f repos/$src/PKGBUILD ]] && die "%s does not exist!" "repos/$src/PKGBUILD" | ||||
|             [[ -d repos/$dest ]] && git rm -r repos/$dest | ||||
|             [[ ! -d repos ]] && mkdir repos | ||||
|             [[ ! -d repos/$dest ]] && mkdir repos/$dest | ||||
| @@ -113,16 +110,13 @@ symlink_commit_pkg(){ | ||||
| 
 | ||||
|         cd ${TREE_DIR_ARTIX}/${git_tree} | ||||
| 
 | ||||
|         if ${push};then | ||||
|             msg2 "Check (%s)" "${git_tree}" | ||||
|             git pull origin master | ||||
|         ${push} && pull_tree "${git_tree}" "$head" | ||||
| 
 | ||||
|             msg2 "Update (%s)" "${PACKAGE}" | ||||
|         subrepo_push "${PACKAGE}" | ||||
| #             sleep 1 | ||||
|             msg2 "Update (%s)" "${git_tree}" | ||||
|             git push origin master | ||||
|         fi | ||||
|         subrepo_clean "${PACKAGE}" | ||||
| 
 | ||||
|         ${push} && push_tree "${git_tree}" | ||||
| 
 | ||||
|         git prune | ||||
|     else | ||||
|         error "Package '%s' does not exist!" "${PACKAGE}" | ||||
| @@ -131,8 +125,8 @@ symlink_commit_pkg(){ | ||||
| 
 | ||||
| load_user_info | ||||
| 
 | ||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| load_vars "${PAC_USERCONFDIR}/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| 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 /etc/makepkg.conf | ||||
| 
 | ||||
| REPO_SRC='trunk' | ||||
							
								
								
									
										135
									
								
								bin/pkg/comparepkg.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								bin/pkg/comparepkg.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,135 @@ | ||||
| #!/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 | ||||
|  | ||||
| show_version_table(){ | ||||
|     msg_table_header "%-20s %-20s %-25s %-30s %-30s" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" | ||||
|  | ||||
|     for tree in ${tree_names[@]};do | ||||
|  | ||||
|         local git=$(find ${TREE_DIR_ARTIX}/$tree/ -mindepth 1 -maxdepth 1 -type d) | ||||
|  | ||||
|         for package in ${git[@]}; do | ||||
|  | ||||
|             local pkg=${package##*/} | ||||
|             local artixrepo=$(find_repo "$package" "${staging}" "${unstable}") | ||||
|             local artixshow=${artixrepo%-*} | ||||
|             local pkgbuild=$package/repos/$artixrepo/PKGBUILD | ||||
|  | ||||
|             if [[ -f $pkgbuild ]];then | ||||
|  | ||||
|                 . $pkgbuild 2>/dev/null | ||||
|                 local artixver=$(get_full_version $pkg) | ||||
|  | ||||
|                 local archpath=$(get_import_path $pkg) | ||||
|  | ||||
|                 local archrepo=$(find_repo "$archpath" "${staging}" "${unstable}") | ||||
|  | ||||
|                 local archshow=${archrepo%-*} | ||||
|                 pkgbuild=$archpath/repos/$archrepo/PKGBUILD | ||||
|  | ||||
|                 if [[ -f $pkgbuild ]];then | ||||
|                     . $pkgbuild 2>/dev/null | ||||
|                     local archver=$(get_full_version $pkg) | ||||
|                 fi | ||||
|  | ||||
|                 local result=$(vercmp "$artixver" "$archver") | ||||
|  | ||||
|                 local repomatch=false | ||||
|                 [[ "$archrepo" == "$artixrepo" ]] && repomatch=true | ||||
|  | ||||
|                 if ${move};then | ||||
|  | ||||
|                     if [ $result -gt -1 ];then | ||||
|                         case $artixrepo in | ||||
|                             *testing*|*staging*) | ||||
|                                 if $repomatch;then | ||||
|                                     msg_row "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                                 else | ||||
|                                     msg_row_notify "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                                 fi | ||||
|                             ;; | ||||
|                         esac | ||||
|                     fi | ||||
|  | ||||
|                 elif ${upgrades};then | ||||
|  | ||||
|                     if [ $result -eq -1 ];then | ||||
|                         msg_row_upgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                     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" | ||||
|                         fi | ||||
|                     fi | ||||
|  | ||||
|                 fi | ||||
|                 unset pkgver epoch pkgrel artixver archver pkgbuild archpath | ||||
|  | ||||
|             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 /etc/makepkg.conf | ||||
|  | ||||
| unstable=false | ||||
| staging=true | ||||
| upgrades=false | ||||
| downgrades=false | ||||
| move=false | ||||
|  | ||||
| tree_names=(packages community) | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options]" | ||||
|     echo '    -u            Show upgrade packages' | ||||
|     echo '    -d            Show downgrade packages' | ||||
|     echo '    -m            Show packages to move' | ||||
|     echo "    -x            Don't inlcude staging packages" | ||||
|     echo '    -y            Include unstable kde and gnome' | ||||
|     echo '    -h            This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
|     exit $1 | ||||
| } | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='udmxyh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         u) upgrades=true ;; | ||||
|         d) downgrades=true ;; | ||||
|         m) move=true ;; | ||||
|         x) staging=false ;; | ||||
|         y) unstable=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
| shift $(($OPTIND - 1)) | ||||
|  | ||||
| show_version_table | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -9,21 +12,14 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| 
 | ||||
| VERSION=@version@ | ||||
| 
 | ||||
| LIBDIR='@libdir@' | ||||
| SYSCONFDIR='@sysconfdir@' | ||||
| DATADIR='@datadir@' | ||||
| 
 | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| import ${LIBDIR}/util-pkg.sh | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-pkg.sh | ||||
| 
 | ||||
| update_repo(){ | ||||
|     local repo="$1" pkgfile ver ext=db.tar.xz | ||||
|     local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=() | ||||
| 
 | ||||
|     source PKGBUILD | ||||
|     . PKGBUILD | ||||
| 
 | ||||
|     for name in ${pkgname[@]};do | ||||
|         pkgarch=$(get_pkg_arch "$name") | ||||
| @@ -55,8 +51,8 @@ update_repo(){ | ||||
| 
 | ||||
| load_user_info | ||||
| 
 | ||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| load_vars "${PAC_USERCONFDIR}/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| 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 /etc/makepkg.conf | ||||
| 
 | ||||
| add_pkg=false | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -9,12 +12,8 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| 
 | ||||
| VERSION=@version@ | ||||
| 
 | ||||
| LIBDIR='@libdir@' | ||||
| 
 | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util-pkg.sh | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-pkg.sh | ||||
| 
 | ||||
| # $1: sofile | ||||
| # $2: soarch | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -9,11 +12,8 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| 
 | ||||
| VERSION=@version@ | ||||
| . @libdir@/artools/util-base.sh | ||||
| 
 | ||||
| LIBDIR='@libdir@' | ||||
| 
 | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| match=$1 | ||||
| 
 | ||||
| if [[ -z $match ]]; then | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -9,11 +12,7 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| 
 | ||||
| VERSION=@version@ | ||||
| 
 | ||||
| LIBDIR='@libdir@' | ||||
| 
 | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| . @libdir@/artools/util-base.sh | ||||
| 
 | ||||
| ifs=$IFS | ||||
| IFS="${IFS}:" | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -9,13 +12,7 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| 
 | ||||
| VERSION=@version@ | ||||
| 
 | ||||
| LIBDIR='@libdir@' | ||||
| 
 | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| import ${LIBDIR}/util-chroot.sh | ||||
| . @libdir@/artools/util-base.sh | ||||
| 
 | ||||
| shopt -s nullglob | ||||
| 
 | ||||
| @@ -369,7 +366,7 @@ main() { | ||||
| 
 | ||||
|     umask 0022 | ||||
| 
 | ||||
|     load_vars "${XDG_CONFIG_HOME:-$USER_HOME/.config}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
|     load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
|     load_vars /etc/makepkg.conf | ||||
| 
 | ||||
|     # Use PKGBUILD directory if these don't exist | ||||
							
								
								
									
										139
									
								
								bin/pkg/pkg2yaml.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								bin/pkg/pkg2yaml.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,139 @@ | ||||
| #!/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 | ||||
|  | ||||
| write_attr(){ | ||||
|     local ident1="$1" ident2="$2" ident3="$3" | ||||
|     local attrname=$4 attrvalues=("${@:5}") | ||||
|  | ||||
|     # normalize whitespace, strip leading and trailing | ||||
|     attrvalues=("${attrvalues[@]//+([[:space:]])/ }") | ||||
|     attrvalues=("${attrvalues[@]#[[:space:]]}") | ||||
|     attrvalues=("${attrvalues[@]%[[:space:]]}") | ||||
|  | ||||
|     case $attrname in | ||||
|         makedepends|checkdepends|depends|provides|arch) | ||||
|             Yaml+=$(write_yaml_map $ident1 "$attrname") | ||||
|             for v in ${attrvalues[@]};do | ||||
|                 Yaml+=$(write_yaml_seq $ident2 "$v") | ||||
|             done | ||||
|         ;; | ||||
|         *) | ||||
|             for v in ${attrvalues[@]};do | ||||
|                 Yaml+=$(write_yaml_map $ident3 "$attrname" "$v") | ||||
|             done | ||||
|         ;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
| extract_info() { | ||||
|     local pkgname=$1 attrname=$2 isarray=$3 outvalue= | ||||
|  | ||||
|     if get_pkgbuild_attribute "$pkgname" "$attrname" "$isarray" 'outvalue'; then | ||||
|         [[ -z $pkgname ]] && write_attr 2 4 2 "$attrname" "${outvalue[@]}" | ||||
|         [[ -n $pkgname ]] && write_attr 4 6 2 "$attrname" "${outvalue[@]}" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| write_details() { | ||||
|     local attr package_arch a | ||||
|     local multivalued_arch_attrs=(provides depends makedepends checkdepends) | ||||
|  | ||||
|     local singlevalued=() | ||||
|     local multivalued=(arch provides depends checkdepends) | ||||
|  | ||||
|     if [[ -z "$1" ]];then | ||||
|         singlevalued=(pkgver pkgrel epoch) | ||||
|         multivalued=(arch provides depends makedepends checkdepends) | ||||
|     fi | ||||
|  | ||||
|     for attr in "${singlevalued[@]}"; do | ||||
|         extract_info "$1" "$attr" 0 | ||||
|     done | ||||
|  | ||||
|     for attr in "${multivalued[@]}"; do | ||||
|         extract_info "$1" "$attr" 1 | ||||
|     done | ||||
|  | ||||
|     get_pkgbuild_attribute "$1" 'arch' 1 'package_arch' | ||||
|     for a in "${package_arch[@]}"; do | ||||
|         # 'any' is special. there's no support for, e.g. depends_any. | ||||
|         [[ $a = any ]] && continue | ||||
|  | ||||
|         for attr in "${multivalued_arch_attrs[@]}"; do | ||||
|             extract_info "$1" "${attr}_$a" 1 | ||||
|         done | ||||
|     done | ||||
| } | ||||
|  | ||||
| write_pkg_yaml(){ | ||||
|     local pkgfile=$(print_all_package_names) | ||||
|  | ||||
|     Yaml=$(write_yaml_header) | ||||
|  | ||||
|     Yaml+=$(write_empty_line) | ||||
|  | ||||
|     Yaml+=$(write_yaml_map 0 "pkgbase") | ||||
|     Yaml+=$(write_yaml_map 2 "pkgname" "${pkgbase:-$pkgname}") | ||||
|     ${details} && write_details '' | ||||
|  | ||||
|     Yaml+=$(write_empty_line) | ||||
|  | ||||
|     Yaml+=$(write_yaml_map 0 "package") | ||||
|     for pkg in "${pkgname[@]}"; do | ||||
|         Yaml+=$(write_yaml_seq_map 2 "pkgname" "$pkg") | ||||
|         ${details} && write_details "$pkg" | ||||
|     done | ||||
|  | ||||
|     Yaml+=$(write_empty_line) | ||||
|  | ||||
|     Yaml+=$(write_yaml_map 0 "pkgfile") | ||||
|     for f in ${pkgfile[@]};do | ||||
|         Yaml+=$(write_yaml_seq 2 "${f##*/}") | ||||
|     done | ||||
|  | ||||
|     Yaml+=$(write_empty_line) | ||||
|  | ||||
|     printf '%s' "${Yaml}" | ||||
| } | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options]" | ||||
|     echo "    -d            Don't include details" | ||||
|     echo '    -h            This help' | ||||
|     echo '' | ||||
|     exit $1 | ||||
| } | ||||
|  | ||||
| details=true | ||||
|  | ||||
| opts='dh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         d) details=false ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
| shift $(( $OPTIND - 1 )) | ||||
|  | ||||
| [[ -f "$1"/PKGBUILD ]] || die "%s/PKGBUILD does not exist!" "$1" | ||||
| PACKAGE="$1"/PKGBUILD; shift | ||||
|  | ||||
| . "$PACKAGE" | ||||
|  | ||||
| write_pkg_yaml | ||||
| @@ -1,44 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # 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. | ||||
|  | ||||
| VERSION=@version@ | ||||
|  | ||||
| VERSION=0.10.4.r2.gd0e3c4e | ||||
|  | ||||
| if [[ -f "$1"/PKGBUILD ]]; then | ||||
|     LIBRARY=${LIBRARY:-'/usr/share/makepkg'} | ||||
|  | ||||
|     for lib in "$LIBRARY"/*.sh; do | ||||
|         source "$lib" | ||||
|     done | ||||
|     . /etc/makepkg.conf | ||||
|  | ||||
|     . "$1"/PKGBUILD | ||||
|  | ||||
|     pkgfile=$(print_all_package_names) | ||||
| fi | ||||
|  | ||||
| NL=$'\n' | ||||
|  | ||||
| Yaml="%YAML 1.2"$NL | ||||
| Yaml+="---"$NL | ||||
|  | ||||
| Yaml+="pkgfile:"$NL | ||||
| for f in ${pkgfile[@]};do | ||||
|     Yaml+="  - ${f##*/}"$NL | ||||
| done | ||||
|  | ||||
| Yaml+="pkgname:"$NL | ||||
| for n in ${pkgname[@]};do | ||||
|     Yaml+="  - ${n##*/}"$NL | ||||
| done | ||||
|  | ||||
| printf '%s' "${Yaml}" | ||||
| @@ -17,7 +17,7 @@ | ||||
|  | ||||
| # HOST_TREE_ARTIX='gitea@gitea.artixlinux.org:artix' | ||||
|  | ||||
| # HOST_TREE_ARCH=git://projects.archlinux.org/svntogit | ||||
| # HOST_TREE_ARCH=git://git.archlinux.org/svntogit | ||||
|  | ||||
| # default repos root | ||||
| # REPOS_ROOT=${WORKSPACE_DIR}/repos | ||||
|   | ||||
| @@ -1,4 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -1,4 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -11,6 +15,7 @@ | ||||
| declare -A pseudofs_types=([anon_inodefs]=1 | ||||
|                         [autofs]=1 | ||||
|                         [bdev]=1 | ||||
|                         [bpf]=1 | ||||
|                         [binfmt_misc]=1 | ||||
|                         [cgroup]=1 | ||||
|                         [cgroup2]=1 | ||||
| @@ -21,6 +26,7 @@ declare -A pseudofs_types=([anon_inodefs]=1 | ||||
|                         [devpts]=1 | ||||
|                         [devtmpfs]=1 | ||||
|                         [dlmfs]=1 | ||||
|                         [efivarfs]=1 | ||||
|                         [fuse.gvfs-fuse-daemon]=1 | ||||
|                         [fusectl]=1 | ||||
|                         [hugetlbfs]=1 | ||||
| @@ -1,4 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -11,8 +15,6 @@ | ||||
| # export LC_MESSAGES=C | ||||
| export LANG=C | ||||
| 
 | ||||
| source /usr/share/makepkg/util.sh | ||||
| 
 | ||||
| if [[ -t 2 ]]; then | ||||
|     colorize | ||||
| else | ||||
| @@ -100,11 +102,3 @@ msg_row_upgrade(){ | ||||
|     local mesg=$1; shift | ||||
|     printf "${RED}${RED} ${mesg} ${ALL_OFF}\n" "$@" >&2 | ||||
| } | ||||
| 
 | ||||
| import(){ | ||||
|     if [[ -r "$1" ]];then | ||||
|         source "$1" | ||||
|     else | ||||
|         die 'Could not import %s' "$1" | ||||
|     fi | ||||
| } | ||||
| @@ -1,4 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -44,7 +48,7 @@ trap_setup(){ | ||||
| } | ||||
| 
 | ||||
| chroot_mount() { | ||||
|     info "mount: [%s]" "$2" | ||||
| #     info "mount: [%s]" "$2" | ||||
|     mount "$@" && CHROOT_ACTIVE_MOUNTS=("$2" "${CHROOT_ACTIVE_MOUNTS[@]}") | ||||
| } | ||||
| 
 | ||||
| @@ -84,16 +88,18 @@ chroot_mount_conditional() { | ||||
| } | ||||
| 
 | ||||
| chroot_setup(){ | ||||
|     chroot_mount_conditional "! mountpoint -q '$1'" "$1" "$1" --bind && | ||||
|     chroot_mount proc "$1/proc" -t proc -o nosuid,noexec,nodev && | ||||
|     chroot_mount sys "$1/sys" -t sysfs -o nosuid,noexec,nodev,ro && | ||||
|     ignore_error chroot_mount_conditional "[[ -d '$1/sys/firmware/efi/efivars' ]]" \ | ||||
|         efivarfs "$1/sys/firmware/efi/efivars" -t efivarfs -o nosuid,noexec,nodev && | ||||
|     chroot_mount udev "$1/dev" -t devtmpfs -o mode=0755,nosuid && | ||||
|     chroot_mount devpts "$1/dev/pts" -t devpts -o mode=0620,gid=5,nosuid,noexec && | ||||
|     chroot_mount shm "$1/dev/shm" -t tmpfs -o mode=1777,nosuid,nodev && | ||||
|     chroot_mount run "$1/run" -t tmpfs -o nosuid,nodev,mode=0755 && | ||||
|     chroot_mount tmp "$1/tmp" -t tmpfs -o mode=1777,strictatime,nodev,nosuid | ||||
|     local mnt="$1" os="$2" run_args='-t tmpfs -o nosuid,nodev,mode=0755' | ||||
|     $os && run_args='--bind' | ||||
|     chroot_mount_conditional "! mountpoint -q '$mnt'" "$mnt" "$mnt" --bind && | ||||
|     chroot_mount proc "$mnt/proc" -t proc -o nosuid,noexec,nodev && | ||||
|     chroot_mount sys "$mnt/sys" -t sysfs -o nosuid,noexec,nodev,ro && | ||||
|     ignore_error chroot_mount_conditional "[[ -d '$mnt/sys/firmware/efi/efivars' ]]" \ | ||||
|         efivarfs "$mnt/sys/firmware/efi/efivars" -t efivarfs -o nosuid,noexec,nodev && | ||||
|     chroot_mount udev "$mnt/dev" -t devtmpfs -o mode=0755,nosuid && | ||||
|     chroot_mount devpts "$mnt/dev/pts" -t devpts -o mode=0620,gid=5,nosuid,noexec && | ||||
|     chroot_mount shm "$mnt/dev/shm" -t tmpfs -o mode=1777,nosuid,nodev && | ||||
|     chroot_mount /run "$mnt/run" ${run_args} && | ||||
|     chroot_mount tmp "$mnt/tmp" -t tmpfs -o mode=1777,strictatime,nodev,nosuid | ||||
| } | ||||
| 
 | ||||
| mount_os(){ | ||||
| @@ -115,19 +121,19 @@ mount_os(){ | ||||
|         esac | ||||
|     done | ||||
| 
 | ||||
|     chroot_setup "$1" | ||||
|     chroot_setup "$1" true | ||||
|     chroot_add_resolv_conf "$1" | ||||
| } | ||||
| 
 | ||||
| chroot_api_mount() { | ||||
|     CHROOT_ACTIVE_MOUNTS=() | ||||
|     trap_setup chroot_api_umount | ||||
|     chroot_setup "$1" | ||||
|     chroot_setup "$1" false | ||||
| } | ||||
| 
 | ||||
| chroot_api_umount() { | ||||
|     if (( ${#CHROOT_ACTIVE_MOUNTS[@]} )); then | ||||
|         info "umount: [%s]" "${CHROOT_ACTIVE_MOUNTS[@]}" | ||||
| #         info "umount: [%s]" "${CHROOT_ACTIVE_MOUNTS[@]}" | ||||
|         umount "${CHROOT_ACTIVE_MOUNTS[@]}" | ||||
|     fi | ||||
|     unset CHROOT_ACTIVE_MOUNTS | ||||
| @@ -1,4 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -38,12 +42,12 @@ prepare_dir(){ | ||||
| } | ||||
| 
 | ||||
| get_disturl(){ | ||||
|     source /usr/lib/os-release | ||||
|     . /usr/lib/os-release | ||||
|     echo "${HOME_URL}" | ||||
| } | ||||
| 
 | ||||
| get_osname(){ | ||||
|     source /usr/lib/os-release | ||||
|     . /usr/lib/os-release | ||||
|     echo "${NAME}" | ||||
| } | ||||
| 
 | ||||
| @@ -51,9 +55,9 @@ init_artools_base(){ | ||||
| 
 | ||||
|     ARCH=$(uname -m) | ||||
| 
 | ||||
|     [[ -z ${CHROOTS_DIR} ]] && CHROOTS_DIR='/var/lib/artools' | ||||
|     CHROOTS_DIR=${CHROOTS_DIR:-'/var/lib/artools'} | ||||
| 
 | ||||
|     [[ -z ${WORKSPACE_DIR} ]] && WORKSPACE_DIR=/home/${OWNER}/artools-workspace | ||||
|     WORKSPACE_DIR=${WORKSPACE_DIR:-"/home/${OWNER}/artools-workspace"} | ||||
| 
 | ||||
|     prepare_dir "${WORKSPACE_DIR}" | ||||
| } | ||||
| @@ -66,55 +70,54 @@ init_artools_pkg(){ | ||||
| 
 | ||||
|     GIT_URL="https://${GIT_DOMAIN}" | ||||
| 
 | ||||
|     [[ -z ${GIT_TOKEN} ]] && GIT_TOKEN='' | ||||
|     GIT_TOKEN=${GIT_TOKEN:-''} | ||||
| 
 | ||||
|     [[ -z ${TREE_DIR_ARTIX} ]] && TREE_DIR_ARTIX="${WORKSPACE_DIR}/artixlinux" | ||||
|     TREE_DIR_ARTIX=${TREE_DIR_ARTIX:-"${WORKSPACE_DIR}/artixlinux"} | ||||
| 
 | ||||
|     [[ -z ${HOST_TREE_ARTIX} ]] && HOST_TREE_ARTIX="gitea@${GIT_DOMAIN}:artixlinux" | ||||
|     HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"} | ||||
| 
 | ||||
|     [[ -z ${TREE_DIR_ARCH} ]] && TREE_DIR_ARCH="${WORKSPACE_DIR}/archlinux" | ||||
|     TREE_DIR_ARCH=${TREE_DIR_ARCH:-"${WORKSPACE_DIR}/archlinux"} | ||||
| 
 | ||||
|     [[ -z ${HOST_TREE_ARCH} ]] && HOST_TREE_ARCH='git://projects.archlinux.org/svntogit' | ||||
|     HOST_TREE_ARCH=${HOST_TREE_ARCH:-'git://git.archlinux.org/svntogit'} | ||||
| 
 | ||||
|     CHROOTS_PKG="${CHROOTS_DIR}/buildpkg" | ||||
| 
 | ||||
|     [[ -z ${REPOS_ROOT} ]] && REPOS_ROOT="${WORKSPACE_DIR}/repos" | ||||
|     REPOS_ROOT=${REPOS_ROOT:-"${WORKSPACE_DIR}/repos"} | ||||
| } | ||||
| 
 | ||||
| init_artools_iso(){ | ||||
|     CHROOTS_ISO="${CHROOTS_DIR}/buildiso" | ||||
| 
 | ||||
|     [[ -z ${ISO_POOL} ]] && ISO_POOL="${WORKSPACE_DIR}/iso" | ||||
|     ISO_POOL=${ISO_POOL:-"${WORKSPACE_DIR}/iso"} | ||||
| 
 | ||||
|     prepare_dir "${ISO_POOL}" | ||||
| 
 | ||||
|     PROFILE='base' | ||||
| 
 | ||||
|     [[ -z ${ISO_VERSION} ]] && ISO_VERSION=$(date +%Y%m%d) | ||||
|     ISO_VERSION=${ISO_VERSION:-"$(date +%Y%m%d)"} | ||||
| 
 | ||||
|     [[ -z ${INITSYS} ]] && INITSYS="openrc" | ||||
|     INITSYS=${INITSYS:-'openrc'} | ||||
| 
 | ||||
|     [[ -z ${GPG_KEY} ]] && GPG_KEY='' | ||||
|     GPG_KEY=${GPG_KEY:-''} | ||||
| 
 | ||||
|     [[ -z ${UPLIMIT} ]] && UPLIMIT=1000 | ||||
|     UPLIMIT=${UPLIMIT:-1000} | ||||
| 
 | ||||
|     FILE_HOST="download.${DOMAIN}" | ||||
| 
 | ||||
|     [[ -z ${FILE_HOME} ]] && FILE_HOME="/srv/iso" | ||||
|     FILE_HOME=${FILE_HOME:-'/srv/iso'} | ||||
| 
 | ||||
|     [[ -z ${FILE_PORT} ]] && FILE_PORT=65432 | ||||
|     FILE_PORT=${FILE_PORT:-65432} | ||||
| 
 | ||||
|     [[ -z ${ACCOUNT} ]] && ACCOUNT="naughtyISOuploader" | ||||
|     ACCOUNT=${ACCOUNT:-'naughtyISOuploader'} | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| load_config(){ | ||||
| 
 | ||||
|     [[ -f $1 ]] || return 1 | ||||
|     local conf="$1" | ||||
| 
 | ||||
|     ARTOOLS_CONF="$1" | ||||
|     [[ -f "$conf" ]] || return 1 | ||||
| 
 | ||||
|     [[ -r ${ARTOOLS_CONF} ]] && source ${ARTOOLS_CONF} | ||||
|     [[ -r "$conf" ]] && . "$conf" | ||||
| 
 | ||||
|     init_artools_base | ||||
| 
 | ||||
| @@ -134,13 +137,6 @@ user_run(){ | ||||
|     su ${OWNER} -c "$@" | ||||
| } | ||||
| 
 | ||||
| clean_dir(){ | ||||
|     if [[ -d $1 ]]; then | ||||
|         msg "Cleaning [%s] ..." "$1" | ||||
|         rm -r $1/* | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| load_user_info(){ | ||||
|     OWNER=${SUDO_USER:-$USER} | ||||
| 
 | ||||
| @@ -150,9 +146,8 @@ load_user_info(){ | ||||
|         USER_HOME=$HOME | ||||
|     fi | ||||
| 
 | ||||
|     AT_USERCONFDIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}/artools" | ||||
|     PAC_USERCONFDIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}/pacman" | ||||
|     prepare_dir "${AT_USERCONFDIR}" | ||||
|     USERCONFDIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}" | ||||
|     prepare_dir "${USERCONFDIR}" | ||||
| } | ||||
| 
 | ||||
| # orig_argv=("$0" "$@") | ||||
							
								
								
									
										36
									
								
								lib/base/yaml.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								lib/base/yaml.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| #!/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. | ||||
|  | ||||
| write_yaml_header(){ | ||||
|     printf '%s' '---' | ||||
| } | ||||
|  | ||||
| write_empty_line(){ | ||||
|     printf '\n%s\n' ' ' | ||||
| } | ||||
|  | ||||
| write_yaml_map(){ | ||||
|     local ident="$1" key="$2" val="$3" | ||||
|     printf "\n%${ident}s%s: %s\n" '' "$key" "$val" | ||||
| } | ||||
|  | ||||
| write_yaml_seq(){ | ||||
|     local ident="$1" val="$2" | ||||
|     printf "\n%${ident}s- %s\n" '' "$val" | ||||
| } | ||||
|  | ||||
| write_yaml_seq_map(){ | ||||
|     local ident="$1" key="$2" val="$3" | ||||
|     printf "\n%${ident}s- %s: %s\n" '' "$key" "$val" | ||||
| } | ||||
							
								
								
									
										160
									
								
								lib/iso/chrootcfg.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								lib/iso/chrootcfg.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,160 @@ | ||||
| #!/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. | ||||
|  | ||||
| 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_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 | ||||
| } | ||||
|  | ||||
| set_xdm(){ | ||||
|     if [[ -f $1/etc/conf.d/xdm ]];then | ||||
|         local conf='DISPLAYMANAGER="'${DISPLAYMANAGER}'"' | ||||
|         sed -i -e "s|^.*DISPLAYMANAGER=.*|${conf}|" $1/etc/conf.d/xdm | ||||
|     fi | ||||
| } | ||||
|  | ||||
| configure_hosts(){ | ||||
|     sed -e "s|localhost.localdomain|localhost.localdomain ${HOST_NAME}|" -i $1/etc/hosts | ||||
| } | ||||
|  | ||||
| configure_logind(){ | ||||
|     local conf=$1/etc/$2/logind.conf | ||||
|     if [[ -e $conf ]];then | ||||
|         msg2 "Configuring logind ..." | ||||
|         sed -i 's/#\(HandleSuspendKey=\)suspend/\1ignore/' "$conf" | ||||
|         sed -i 's/#\(HandleLidSwitch=\)suspend/\1ignore/' "$conf" | ||||
|         sed -i 's/#\(HandleHibernateKey=\)hibernate/\1ignore/' "$conf" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| 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}" | ||||
| } | ||||
|  | ||||
| configure_system(){ | ||||
|     local mnt="$1" | ||||
|     case ${INITSYS} in | ||||
|         'openrc' | 'runit') | ||||
|             configure_logind "$mnt" "elogind" | ||||
|         ;; | ||||
|     esac | ||||
|     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 | ||||
|         yaml+=$(write_yaml_seq 2 "$g") | ||||
|     done | ||||
|     unset IFS | ||||
|     yaml+=$(write_yaml_map 0 'autologinGroup' 'autologin') | ||||
|     yaml+=$(write_yaml_map 0 'doAutologin' 'false') | ||||
|     yaml+=$(write_yaml_map 0 'sudoersGroup' 'wheel') | ||||
|     yaml+=$(write_yaml_map 0 'setRootPassword' 'true') | ||||
|     yaml+=$(write_yaml_map 0 'availableShells' '/bin/bash, /bin/zsh') | ||||
| #     yaml+=$(write_yaml_map 0 'passwordRequirements') | ||||
| #     yaml+=$(write_yaml_map 2 'minLength' '-1') | ||||
| #     yaml+=$(write_yaml_map 2 'maxLength' '-1') | ||||
| #     yaml+=$(write_yaml_map 2 'libpwquality') | ||||
| #     yaml+=$(write_yaml_seq 4 "minlen=8") | ||||
| #     yaml+=$(write_yaml_seq 4 "minclass=80") | ||||
|     yaml+=$(write_empty_line) | ||||
|     printf '%s' "${yaml}" | ||||
| } | ||||
|  | ||||
| write_servicescfg_conf(){ | ||||
|     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_empty_line) | ||||
|     printf '%s' "${yaml}" | ||||
| } | ||||
|  | ||||
| configure_calamares(){ | ||||
|     local mods="$1/etc/calamares/modules" | ||||
|     if [[ -d "$mods" ]];then | ||||
|         msg2 "Configuring Calamares" | ||||
|         write_users_conf > "$mods"/users.conf | ||||
|         write_servicescfg_conf > "$mods"/services-"${INITSYS}".conf | ||||
|         sed -e "s|openrc|${INITSYS}|" -i "$mods"/postcfg.conf | ||||
|         sed -e "s|services-openrc|services-${INITSYS}|" -i "$1"/etc/calamares/settings.conf | ||||
|     fi | ||||
| } | ||||
|  | ||||
| configure_live_image(){ | ||||
|     local fs="$1" | ||||
|     msg "Configuring [livefs]" | ||||
|     configure_hosts "$fs" | ||||
|     configure_system "$fs" | ||||
|     configure_services "$fs" | ||||
|     configure_calamares "$fs" | ||||
|     [[ ! -d "$fs/etc/artools" ]] && mkdir -p "$fs/etc/artools" | ||||
|     write_live_session_conf > "$fs/etc/artools/live.conf" | ||||
|     msg "Done configuring [livefs]" | ||||
| } | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -26,8 +29,8 @@ prepare_initramfs(){ | ||||
|     fi | ||||
| 
 | ||||
|     if [[ -n ${GPG_KEY} ]]; then | ||||
|         user_run "gpg --export ${GPG_KEY} >${AT_USERCONFDIR}/gpgkey" | ||||
|         exec 17<>${AT_USERCONFDIR}/GPG_KEY | ||||
|         user_run "gpg --export ${GPG_KEY} >${USERCONFDIR}/artools/gpgkey" | ||||
|         exec 17<>${USERCONFDIR}/artools/GPG_KEY | ||||
|     fi | ||||
|     local _kernel=$(cat $mnt/usr/lib/modules/*/version) | ||||
|     ARTIX_GNUPG_FD=${GPG_KEY:+17} chroot-run $mnt \ | ||||
| @@ -38,8 +41,8 @@ prepare_initramfs(){ | ||||
|     if [[ -n ${GPG_KEY} ]]; then | ||||
|         exec 17<&- | ||||
|     fi | ||||
|     if [[ -f ${AT_USERCONFDIR}/GPG_KEY ]]; then | ||||
|         rm ${AT_USERCONFDIR}/GPG_KEY | ||||
|     if [[ -f ${USERCONFDIR}/artools/GPG_KEY ]]; then | ||||
|         rm ${USERCONFDIR}/artools/GPG_KEY | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
							
								
								
									
										147
									
								
								lib/iso/iso.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								lib/iso/iso.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,147 @@ | ||||
| #!/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. | ||||
|  | ||||
| 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 -R root "$idir" | ||||
|     cd ${OLDPWD} | ||||
| } | ||||
|  | ||||
| make_checksum(){ | ||||
|     local idir="$1" file="$2" | ||||
|     msg2 "Creating sha512sum ..." | ||||
|     cd $idir | ||||
|     sha512sum $file.sfs > $file.sha512 | ||||
|     cd ${OLDPWD} | ||||
| } | ||||
|  | ||||
| # $1: image path | ||||
| make_sfs() { | ||||
|     local src="$1" | ||||
|     if [[ ! -e "${src}" ]]; then | ||||
|         error "The path %s does not exist" "${src}" | ||||
|         retrun 1 | ||||
|     fi | ||||
|     local timer=$(get_timer) dest=${iso_root}/artix/${ARCH} | ||||
|     local name=${1##*/} | ||||
|     local sfs="${dest}/${name}.sfs" | ||||
|     mkdir -p ${dest} | ||||
|     msg "Generating SquashFS image for %s" "${src}" | ||||
|     if [[ -f "${sfs}" ]]; then | ||||
|         local has_changed_dir=$(find ${src} -newer ${sfs}) | ||||
|         msg2 "Possible changes for %s ..." "${src}"  >> /tmp/buildiso.debug | ||||
|         msg2 "%s" "${has_changed_dir}" >> /tmp/buildiso.debug | ||||
|         if [[ -n "${has_changed_dir}" ]]; then | ||||
|             msg2 "SquashFS image %s is not up to date, rebuilding..." "${sfs}" | ||||
|             rm "${sfs}" | ||||
|         else | ||||
|             msg2 "SquashFS image %s is up to date, skipping." "${sfs}" | ||||
|             return | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     if ${persist};then | ||||
|         local size=32G | ||||
|         local mnt="${mnt_dir}/${name}" | ||||
|         msg2 "Creating ext4 image of %s ..." "${size}" | ||||
|         truncate -s ${size} "${src}.img" | ||||
|         local ext4_args=() | ||||
|         ext4_args+=(-O ^has_journal,^resize_inode -E lazy_itable_init=0 -m 0) | ||||
|         mkfs.ext4 ${ext4_args[@]} -F "${src}.img" &>/dev/null | ||||
|         tune2fs -c 0 -i 0 "${src}.img" &> /dev/null | ||||
|         mount_img "${work_dir}/${name}.img" "${mnt}" | ||||
|         msg2 "Copying %s ..." "${src}/" | ||||
|         cp -aT "${src}/" "${mnt}/" | ||||
|         umount_img "${mnt}" | ||||
|  | ||||
|     fi | ||||
|  | ||||
|     msg2 "Creating SquashFS image, this may take some time..." | ||||
|     local mksfs_args=() | ||||
|     if ${persist};then | ||||
|         mksfs_args+=(${work_dir}/${name}.img) | ||||
|     else | ||||
|         mksfs_args+=(${src}) | ||||
|     fi | ||||
|  | ||||
|     mksfs_args+=(${sfs} -noappend) | ||||
|  | ||||
|     local highcomp="-b 256K -Xbcj x86" comp='xz' | ||||
|  | ||||
|     mksfs_args+=(-comp ${comp} ${highcomp}) | ||||
|  | ||||
|     mksquashfs "${mksfs_args[@]}" | ||||
|  | ||||
|     make_checksum "${dest}" "${name}" | ||||
|     ${persist} && rm "${src}.img" | ||||
|  | ||||
|     if [[ -n ${GPG_KEY} ]];then | ||||
|         make_sig "${dest}" "${name}" | ||||
|     fi | ||||
|  | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer_start}" | ||||
| } | ||||
|  | ||||
| assemble_iso(){ | ||||
|     msg "Creating ISO image..." | ||||
|     local mod_date=$(date -u +%Y-%m-%d-%H-%M-%S-00  | sed -e s/-//g) | ||||
|  | ||||
|     xorriso -as mkisofs \ | ||||
|         --modification-date=${mod_date} \ | ||||
|         --protective-msdos-label \ | ||||
|         -volid "${iso_label}" \ | ||||
|         -appid "$(get_osname) Live/Rescue CD" \ | ||||
|         -publisher "$(get_osname) <$(get_disturl)>" \ | ||||
|         -preparer "Prepared by artools/${0##*/}" \ | ||||
|         -r -graft-points -no-pad \ | ||||
|         --sort-weight 0 / \ | ||||
|         --sort-weight 1 /boot \ | ||||
|         --grub2-mbr ${iso_root}/boot/grub/i386-pc/boot_hybrid.img \ | ||||
|         -partition_offset 16 \ | ||||
|         -b boot/grub/i386-pc/eltorito.img \ | ||||
|         -c boot.catalog \ | ||||
|         -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \ | ||||
|         -eltorito-alt-boot \ | ||||
|         -append_partition 2 0xef ${iso_root}/efi.img \ | ||||
|         -e --interval:appended_partition_2:all:: -iso_mbr_part_type 0x00 \ | ||||
|         -no-emul-boot \ | ||||
|         -iso-level 3 \ | ||||
|         -o ${iso_dir}/${iso_file} \ | ||||
|         ${iso_root}/ | ||||
| } | ||||
							
								
								
									
										68
									
								
								lib/iso/mount.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								lib/iso/mount.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| #!/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. | ||||
|  | ||||
| track_img() { | ||||
|     info "mount: [%s]" "$2" | ||||
|     mount "$@" && IMG_ACTIVE_MOUNTS=("$2" "${IMG_ACTIVE_MOUNTS[@]}") | ||||
| } | ||||
|  | ||||
| mount_img() { | ||||
|     IMG_ACTIVE_MOUNTS=() | ||||
|     mkdir -p "$2" | ||||
|     track_img "$1" "$2" | ||||
| } | ||||
|  | ||||
| umount_img() { | ||||
|     if [[ -n ${IMG_ACTIVE_MOUNTS[@]} ]];then | ||||
|         info "umount: [%s]" "${IMG_ACTIVE_MOUNTS[@]}" | ||||
|         umount "${IMG_ACTIVE_MOUNTS[@]}" | ||||
|         unset IMG_ACTIVE_MOUNTS | ||||
|         rm -r "$1" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| track_fs() { | ||||
|     info "overlayfs mount: [%s]" "$5" | ||||
|     mount "$@" && FS_ACTIVE_MOUNTS=("$5" "${FS_ACTIVE_MOUNTS[@]}") | ||||
| } | ||||
|  | ||||
| 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" | ||||
|     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" | ||||
|         ;; | ||||
|     esac | ||||
|     track_fs -t overlay overlay -olowerdir="$lower",upperdir="$upper",workdir="${mnt_dir}/work" "$upper" | ||||
| } | ||||
|  | ||||
| umount_overlay(){ | ||||
|     if [[ -n ${FS_ACTIVE_MOUNTS[@]} ]];then | ||||
|         info "overlayfs umount: [%s]" "${FS_ACTIVE_MOUNTS[@]}" | ||||
|         umount "${FS_ACTIVE_MOUNTS[@]}" | ||||
|         unset FS_ACTIVE_MOUNTS | ||||
|         rm -rf "${mnt_dir}/work" | ||||
|     fi | ||||
| } | ||||
| @@ -1,4 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -46,22 +50,20 @@ load_profile(){ | ||||
| 
 | ||||
|     [[ -f $profdir/$prof/profile.conf ]] || return 1 | ||||
| 
 | ||||
|     [[ -r $profdir/$prof/profile.conf ]] && source $profdir/$prof/profile.conf | ||||
|     [[ -r $profdir/$prof/profile.conf ]] && . $profdir/$prof/profile.conf | ||||
| 
 | ||||
|     [[ -z ${DISPLAYMANAGER} ]] && DISPLAYMANAGER="none" | ||||
|     DISPLAYMANAGER=${DISPLAYMANAGER:-'none'} | ||||
| 
 | ||||
|     [[ -z ${AUTOLOGIN} ]] && AUTOLOGIN="true" | ||||
|     AUTOLOGIN=${AUTOLOGIN:-"true"} | ||||
|     [[ ${DISPLAYMANAGER} == 'none' ]] && AUTOLOGIN="false" | ||||
| 
 | ||||
|     [[ -z ${HOST_NAME} ]] && HOST_NAME="artix" | ||||
|     HOST_NAME=${HOST_NAME:-'artix'} | ||||
| 
 | ||||
|     [[ -z ${USER_NAME} ]] && USER_NAME="artix" | ||||
|     USER_NAME=${USER_NAME:-'artix'} | ||||
| 
 | ||||
|     [[ -z ${PASSWORD} ]] && PASSWORD="artix" | ||||
|     PASSWORD=${PASSWORD:-'artix'} | ||||
| 
 | ||||
|     if [[ -z ${ADDGROUPS} ]];then | ||||
|         ADDGROUPS="video,power,storage,optical,network,lp,scanner,wheel,users,log" | ||||
|     fi | ||||
|     ADDGROUPS=${ADDGROUPS:-"video,power,cdrom,network,lp,scanner,wheel,users,log"} | ||||
| 
 | ||||
|     if [[ -z ${SERVICES[@]} ]];then | ||||
|         SERVICES=('acpid' 'bluetooth' 'cronie' 'cupsd' 'syslog-ng' 'NetworkManager') | ||||
| @@ -82,23 +84,14 @@ load_profile(){ | ||||
| } | ||||
| 
 | ||||
| write_live_session_conf(){ | ||||
|     local path=$1${SYSCONFDIR} | ||||
|     [[ ! -d $path ]] && mkdir -p "$path" | ||||
|     local conf=$path/live.conf | ||||
|     msg2 "Writing %s" "${conf##*/}" | ||||
|     echo '# live session configuration' > ${conf} | ||||
|     echo '' >> ${conf} | ||||
|     echo '# autologin' >> ${conf} | ||||
|     echo "AUTOLOGIN=${AUTOLOGIN}" >> ${conf} | ||||
|     echo '' >> ${conf} | ||||
|     echo '# live user name' >> ${conf} | ||||
|     echo "USERNAME=${USERNAME}" >> ${conf} | ||||
|     echo '' >> ${conf} | ||||
|     echo '# live password' >> ${conf} | ||||
|     echo "PASSWORD=${PASSWORD}" >> ${conf} | ||||
|     echo '' >> ${conf} | ||||
|     echo '# live group membership' >> ${conf} | ||||
|     echo "ADDGROUPS='${ADDGROUPS}'" >> ${conf} | ||||
|     msg2 "Writing live.conf" | ||||
|     local conf='' | ||||
|     conf+=$(printf '%s\n' '# live session configuration') | ||||
|     conf+=$(printf "\nAUTOLOGIN=%s\n" "${AUTOLOGIN}") | ||||
|     conf+=$(printf "\nUSER_NAME=%s\n" "${USER_NAME}") | ||||
|     conf+=$(printf "\nPASSWORD=%s\n" "${PASSWORD}") | ||||
|     conf+=$(printf "\nADDGROUPS='%s'\n" "${ADDGROUPS}") | ||||
|     printf '%s' "$conf" | ||||
| } | ||||
| 
 | ||||
| load_pkgs(){ | ||||
							
								
								
									
										282
									
								
								lib/iso/util.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										282
									
								
								lib/iso/util.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,282 @@ | ||||
| #!/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. | ||||
|  | ||||
| error_function() { | ||||
|     if [[ -p $logpipe ]]; then | ||||
|         rm "$logpipe" | ||||
|     fi | ||||
|     local func="$1" | ||||
|     # first exit all subshells, then print the error | ||||
|     if (( ! BASH_SUBSHELL )); then | ||||
|         error "A failure occurred in %s()." "$func" | ||||
|         plain "Aborting..." | ||||
|     fi | ||||
|     umount_overlay | ||||
|     umount_img | ||||
|     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 | ||||
|     set -E | ||||
|     restoretrap=$(trap -p ERR) | ||||
|     trap 'error_function $func' ERR | ||||
|  | ||||
|     if ${log};then | ||||
|         run_log "$func" | ||||
|     else | ||||
|         "$func" | ||||
|     fi | ||||
|  | ||||
|     eval $restoretrap | ||||
|     set +E | ||||
|     set +e | ||||
| } | ||||
|  | ||||
| trap_exit() { | ||||
|     local sig=$1; shift | ||||
|     error "$@" | ||||
|     umount_overlay | ||||
|     trap -- "$sig" | ||||
|     kill "-$sig" "$$" | ||||
| } | ||||
|  | ||||
| prepare_traps(){ | ||||
|     for sig in TERM HUP QUIT; do | ||||
|         trap "trap_exit $sig \"$(gettext "%s signal caught. Exiting...")\" \"$sig\"" "$sig" | ||||
|     done | ||||
|     trap 'trap_exit INT "$(gettext "Aborted by user! Exiting...")"' INT | ||||
| #     trap 'trap_exit USR1 "$(gettext "An unknown error has occurred. Exiting...")"' ERR | ||||
| } | ||||
|  | ||||
| # Build ISO | ||||
| make_iso() { | ||||
|     msg "Start [Build ISO]" | ||||
|     touch "${iso_root}/.artix" | ||||
|     for sfs_dir in $(find "${work_dir}" -maxdepth 1 -type d); do | ||||
|         if [[ "${sfs_dir}" != "${work_dir}" ]]; then | ||||
|             make_sfs "${sfs_dir}" | ||||
|         fi | ||||
|     done | ||||
|  | ||||
|     msg "Making bootable image" | ||||
|     # Sanity checks | ||||
|     [[ ! -d "${iso_root}" ]] && return 1 | ||||
|     if [[ -f "${iso_dir}/${iso_file}" ]]; then | ||||
|         msg2 "Removing existing bootable image..." | ||||
|         rm -rf "${iso_dir}/${iso_file}" | ||||
|     fi | ||||
|     assemble_iso | ||||
|     msg "Done [Build ISO]" | ||||
| } | ||||
|  | ||||
| install_packages(){ | ||||
|     local fs="$1" | ||||
|     setarch "${ARCH}" mkchroot \ | ||||
|         "${mkchroot_args[@]}" "${fs}" "${packages[@]}" | ||||
| } | ||||
|  | ||||
| copy_overlay(){ | ||||
|     local src="$1" dest="$2" | ||||
|     if [[ -e "$src" ]];then | ||||
|         msg2 "Copying [%s] ..." "${src##*/}" | ||||
|         cp -LR "$src"/* "$dest" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| 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 | ||||
|     fi | ||||
|     path=$mnt/var/lib/pacman/sync | ||||
|     if [[ -d $path ]];then | ||||
|         find "$path" -type f -delete &> /dev/null | ||||
|     fi | ||||
|     path=$mnt/var/cache/pacman/pkg | ||||
|     if [[ -d $path ]]; then | ||||
|         find "$path" -type f -delete &> /dev/null | ||||
|     fi | ||||
|     path=$mnt/var/log | ||||
|     if [[ -d $path ]]; then | ||||
|         find "$path" -type f -delete &> /dev/null | ||||
|     fi | ||||
|     path=$mnt/var/tmp | ||||
|     if [[ -d $path ]];then | ||||
|         find "$path" -mindepth 1 -delete &> /dev/null | ||||
|     fi | ||||
|     path=$mnt/tmp | ||||
|     if [[ -d $path ]];then | ||||
|         find "$path" -mindepth 1 -delete &> /dev/null | ||||
|     fi | ||||
|  | ||||
|     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 | ||||
|     fi | ||||
|     if [[ -f "$mnt/etc/machine-id" ]]; then | ||||
|         rm $mnt/etc/machine-id | ||||
|     fi | ||||
| } | ||||
|  | ||||
| make_rootfs() { | ||||
|     if [[ ! -e ${work_dir}/rootfs.lock ]]; then | ||||
|         msg "Prepare [Base installation] (rootfs)" | ||||
|         local rootfs="${work_dir}/rootfs" | ||||
|  | ||||
|         prepare_dir "${rootfs}" | ||||
|  | ||||
|         install_packages "${rootfs}" | ||||
|  | ||||
|         copy_overlay "${ROOT_OVERLAY}" "${rootfs}" | ||||
|  | ||||
|         clean_up_image "${rootfs}" | ||||
|  | ||||
|         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)" | ||||
|         local livefs="${work_dir}/livefs" | ||||
|  | ||||
|         prepare_dir "${livefs}" | ||||
|  | ||||
|         mount_overlay "${livefs}" "${work_dir}" "${DESKTOP_LIST}" | ||||
|  | ||||
|         install_packages "${livefs}" | ||||
|  | ||||
|         copy_overlay "${LIVE_OVERLAY}" "${livefs}" | ||||
|  | ||||
|         configure_live_image "${livefs}" | ||||
|  | ||||
|         umount_overlay | ||||
|  | ||||
|         clean_up_image "${livefs}" | ||||
|  | ||||
|         msg "Done [Live installation] (livefs)" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| make_bootfs() { | ||||
|     if [[ ! -e ${work_dir}/bootfs.lock ]]; then | ||||
|         msg "Prepare [/iso/boot]" | ||||
|         local boot="${iso_root}/boot" | ||||
|  | ||||
|         prepare_dir "${boot}" | ||||
|  | ||||
|         cp ${work_dir}/rootfs/boot/vmlinuz* ${boot}/vmlinuz-${ARCH} | ||||
|  | ||||
|         local bootfs="${work_dir}/bootfs" | ||||
|  | ||||
|         mount_overlay "${bootfs}" "${work_dir}" "${DESKTOP_LIST}" | ||||
|  | ||||
|         prepare_initcpio "${bootfs}" | ||||
|         prepare_initramfs "${bootfs}" | ||||
|  | ||||
|         cp ${bootfs}/boot/initramfs.img ${boot}/initramfs-${ARCH}.img | ||||
|         prepare_boot_extras "${bootfs}" "${boot}" | ||||
|  | ||||
|         umount_overlay | ||||
|  | ||||
|         rm -R ${bootfs} | ||||
|         : > ${work_dir}/bootfs.lock | ||||
|         msg "Done [/iso/boot]" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| make_grub(){ | ||||
|     if [[ ! -e ${work_dir}/grub.lock ]]; then | ||||
|         msg "Prepare [/iso/boot/grub]" | ||||
|  | ||||
|         prepare_grub "${work_dir}/rootfs" "${work_dir}/livefs" "${iso_root}" | ||||
|  | ||||
|         configure_grub "${iso_root}" | ||||
|  | ||||
|         : > ${work_dir}/grub.lock | ||||
|         msg "Done [/iso/boot/grub]" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| compress_images(){ | ||||
|     local timer=$(get_timer) | ||||
|     run_safe "make_iso" | ||||
|     user_own "${iso_dir}" "-R" | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer}" | ||||
| } | ||||
|  | ||||
| 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 | ||||
|         load_pkgs "${LIVE_LIST}" "${INITSYS}" | ||||
|         run_safe "make_livefs" | ||||
|     fi | ||||
|     run_safe "make_bootfs" | ||||
|     run_safe "make_grub" | ||||
|  | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer}" | ||||
| } | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -34,19 +37,6 @@ delete_repo(){ | ||||
|         -H  "accept: application/json" | ||||
| } | ||||
| 
 | ||||
| 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^^}" ;; | ||||
|     esac | ||||
| } | ||||
| 
 | ||||
| load_team_id(){ | ||||
|     local org="$1" tree="$2" id=0 | ||||
| 
 | ||||
							
								
								
									
										170
									
								
								lib/pkg/subrepo.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								lib/pkg/subrepo.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,170 @@ | ||||
| #!/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. | ||||
|  | ||||
| get_local_head(){ | ||||
|     echo $(git log --pretty=%H ...refs/heads/master^ | head -n 1) | ||||
| } | ||||
|  | ||||
| get_remote_head(){ | ||||
|     echo $(git ls-remote origin -h refs/heads/master | cut -f1) | ||||
| } | ||||
|  | ||||
| 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^^}" ;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
| subrepo_push(){ | ||||
|     local pkg="$1" | ||||
|     msg2 "Update (%s)" "$pkg" | ||||
|     git subrepo push "$pkg" | ||||
| } | ||||
|  | ||||
| subrepo_config(){ | ||||
|     local pkg="$1" org="$2" | ||||
|     local gitname=$(get_compliant_name "$pkg") | ||||
|     local url=gitea@"${GIT_DOMAIN}":"$org"/"$gitname".git | ||||
|     msg2 "Update .gitrepo (%s) [%s]" "$pkg" "$url" | ||||
|     git subrepo config "$pkg" remote "$url" | ||||
| } | ||||
|  | ||||
| subrepo_clean(){ | ||||
|     local pkg="$1" | ||||
|     msg2 "Clean (%s)" "$pkg" | ||||
|     git subrepo clean "$pkg" | ||||
| } | ||||
|  | ||||
| subrepo_pull(){ | ||||
|     local pkg="$1" | ||||
|     git subrepo pull "$pkg" | ||||
| } | ||||
|  | ||||
| subrepo_clone(){ | ||||
|     local pkg="$1" org="$2" | ||||
|     local gitname=$(get_compliant_name "$pkg") | ||||
|     msg2 "Getting package repo [%s] from org (%s)" "$pkg" "$org/$gitname" | ||||
|     git subrepo clone gitea@"${GIT_DOMAIN}":"$org"/"$gitname".git "$pkg" | ||||
| } | ||||
|  | ||||
| clone_tree(){ | ||||
|     local timer=$(get_timer) url="$1" tree="$2" | ||||
|  | ||||
|     msg "Cloning (%s) ..." "$tree" | ||||
|  | ||||
|     git clone $url/$tree.git | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer}" | ||||
| } | ||||
|  | ||||
| has_changes(){ | ||||
|     local head_l="$1" head_r="$2" | ||||
|     if [[ "$head_l" == "$head_r" ]]; then | ||||
|         msg2 "remote changes: no" | ||||
|         return 1 | ||||
|     else | ||||
|         msg2 "remote changes: yes" | ||||
|         return 0 | ||||
|     fi | ||||
| } | ||||
|  | ||||
| pull_tree(){ | ||||
|     local tree="$1" | ||||
|     local local_head=${2:-$(get_local_head)} | ||||
|     local remote_head=$(get_remote_head) | ||||
|  | ||||
|     msg "Checking (%s)" "${tree}" | ||||
|     if $(has_changes "${local_head}" "${remote_head}");then | ||||
|         git pull origin master | ||||
|     fi | ||||
| } | ||||
|  | ||||
| push_tree(){ | ||||
|     local tree="$1" | ||||
|     msg "Update (%s)" "${tree}" | ||||
|     git push origin master | ||||
| } | ||||
|  | ||||
| write_jenkinsfile(){ | ||||
|     local pkg="$1" | ||||
|     local jenkins=$pkg/Jenkinsfile | ||||
|  | ||||
|     echo "@Library('artix-ci') import org.artixlinux.RepoPackage" > $jenkins | ||||
|     echo '' >> $jenkins | ||||
|     echo 'PackagePipeline(new RepoPackage(this))' >> $jenkins | ||||
|     echo '' >> $jenkins | ||||
|  | ||||
|     git add $jenkins | ||||
| } | ||||
|  | ||||
| write_agentyaml(){ | ||||
|     local pkg="$1" | ||||
|     local agent=$pkg/.artixlinux/agent.yaml label='master' | ||||
|     [[ -d $pkg/.artixlinux ]] || mkdir $pkg/.artixlinux | ||||
|  | ||||
|     echo '%YAML 1.2' > $agent | ||||
|     echo '---' >> $agent | ||||
|     echo '' >> $agent | ||||
|     echo "label: $label" >> $agent | ||||
|     echo '' >> $agent | ||||
|  | ||||
|     git add $agent | ||||
| } | ||||
|  | ||||
| commit_jenkins_files(){ | ||||
|     local pkg="$1" | ||||
|  | ||||
|     write_jenkinsfile "$pkg" | ||||
|     write_agentyaml "$pkg" | ||||
|  | ||||
|     git commit -m "add jenkinsfile & .artixlinux/agent.yaml" | ||||
| } | ||||
|  | ||||
| config_tree(){ | ||||
|     local tree="$1" | ||||
|     cd $tree | ||||
|         git config --bool pull.rebase true | ||||
|         git config commit.gpgsign true | ||||
|         if [[ -n "${GPGKEY}" ]];then | ||||
|             git config user.signingkey "${GPGKEY}" | ||||
|         else | ||||
|             warning "No GPGKEY configured in makepkg.conf!" | ||||
|         fi | ||||
|     cd .. | ||||
| } | ||||
|  | ||||
| subrepo_new(){ | ||||
|     local pkg="$1" team="$2" | ||||
|     local dest=${TREE_DIR_ARTIX}/$team/$pkg/trunk | ||||
|  | ||||
|     cd ${TREE_DIR_ARTIX}/$team | ||||
|  | ||||
|     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" | ||||
| } | ||||
| @@ -1,5 +1,8 @@ | ||||
| #!/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. | ||||
| @@ -9,12 +12,12 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| 
 | ||||
| get_local_head(){ | ||||
|     echo $(git log --pretty=%H ...refs/heads/$1^ | head -n 1) | ||||
| } | ||||
| 
 | ||||
| get_remote_head(){ | ||||
|     echo $(git ls-remote origin -h refs/heads/$1 | cut -f1) | ||||
| get_compliant_name(){ | ||||
|     local gitname="$1" | ||||
|     case $gitname in | ||||
|         *+) gitname=${gitname//+/plus} | ||||
|     esac | ||||
|     echo $gitname | ||||
| } | ||||
| 
 | ||||
| patch_pkg(){ | ||||
| @@ -66,14 +69,6 @@ patch_pkg(){ | ||||
|     esac | ||||
| } | ||||
| 
 | ||||
| get_compliant_name(){ | ||||
|     local gitname="$1" | ||||
|     case $gitname in | ||||
|         *+) gitname=${gitname//+/plus} | ||||
|     esac | ||||
|     echo $gitname | ||||
| } | ||||
| 
 | ||||
| find_tree(){ | ||||
|     local tree="$1" pkg="$2" | ||||
|     local result=$(find $tree -mindepth 2 -maxdepth 2 -type d -name "$pkg") | ||||
| @@ -82,10 +77,10 @@ find_tree(){ | ||||
| } | ||||
| 
 | ||||
| find_repo(){ | ||||
|     local pkg="$1" unst="$2" stag="$3" repo= | ||||
|     local repos=(core extra testing community community-testing mulitilib multilib-testing) | ||||
|     local pkg="$1" stag="$2" unst="$3" repo= | ||||
|     local repos=(core extra testing community community-testing multilib multilib-testing) | ||||
| 
 | ||||
|     $stag && repos+=(staging community-staging mulitilib-staging) | ||||
|     $stag && repos+=(staging community-staging multilib-staging) | ||||
|     $unst && repos+=(gnome-unstable kde-unstable) | ||||
| 
 | ||||
|     for r in ${repos[@]};do | ||||
| @@ -103,24 +98,6 @@ get_import_path(){ | ||||
|     echo $import_path | ||||
| } | ||||
| 
 | ||||
| clone_tree(){ | ||||
|     local timer=$(get_timer) host_tree="$1" | ||||
|     git clone $host_tree.git | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer}" | ||||
| } | ||||
| 
 | ||||
| pull_tree(){ | ||||
|     local branch="master" | ||||
|     local local_head=$(get_local_head "$branch") | ||||
|     local remote_head=$(get_remote_head "$branch") | ||||
|     if [[ "${local_head}" == "${remote_head}" ]]; then | ||||
|         msg2 "remote changes: no" | ||||
|     else | ||||
|         msg2 "remote changes: yes" | ||||
|         git pull origin "$branch" | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| pkgver_equal() { | ||||
|     if [[ $1 = *-* && $2 = *-* ]]; then | ||||
|         # if both versions have a pkgrel, then they must be an exact match | ||||
							
								
								
									
										25
									
								
								lib/util-base.sh.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								lib/util-base.sh.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| #!/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. | ||||
|  | ||||
| CHROOTVERSION=@chroot_version@ | ||||
|  | ||||
| . @datadir@/makepkg/util.sh | ||||
|  | ||||
| DATADIR=${DATADIR:-'@datadir@/artools'} | ||||
| LIBDIR=${LIBDIR:-'@libdir@/artools'} | ||||
| SYSCONFDIR=${SYSCONFDIR:-'@sysconfdir@/artools'} | ||||
|  | ||||
| for baselib in ${LIBDIR}/base/*.sh; do | ||||
|     . $baselib | ||||
| done | ||||
| @@ -1,84 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # 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. | ||||
|  | ||||
| write_users_conf(){ | ||||
|     local conf="$1/users.conf" | ||||
|     msg2 "Writing %s ..." "${conf##*/}" | ||||
|     echo "---" > "$conf" | ||||
|     echo "defaultGroups:" >> "$conf" | ||||
|     local IFS=',' | ||||
|     for g in ${ADDGROUPS[@]};do | ||||
|         echo "    - $g" >> "$conf" | ||||
|     done | ||||
|     unset IFS | ||||
|     echo "autologinGroup:  autologin" >> "$conf" | ||||
|     echo "doAutologin:     false" >> "$conf" | ||||
|     echo "sudoersGroup:    wheel" >> "$conf" | ||||
|     echo "setRootPassword: true" >> "$conf" | ||||
|     echo "availableShells: /bin/bash, /bin/zsh" >> "$conf" # only used in new 'users' module | ||||
|  | ||||
| #     echo "passwordRequirements:" >> "$conf" | ||||
| #     echo "    minLength: -1" >> "$conf" | ||||
| #     echo "    maxLength: -1" >> "$conf" | ||||
| #     echo "    libpwquality:" >> "$conf" | ||||
| #     echo "        - minlen=8" >> "$conf" | ||||
| #     echo "        - minclass=80" >> "$conf" | ||||
| } | ||||
|  | ||||
| write_servicescfg_conf(){ | ||||
|     local init="$2" | ||||
|     local conf="$1"/services-"$init".conf | ||||
|     msg2 "Writing %s ..." "${conf##*/}" | ||||
|     echo '---' >  "$conf" | ||||
|     case "$init" in | ||||
|         'runit') | ||||
|             echo 'svDir: /etc/runit/sv' >> "$conf" | ||||
|             echo '' >> "$conf" | ||||
|             echo 'runsvDir: /etc/runit/runsvdir' >> "$conf" | ||||
|             echo '' >> "$conf" | ||||
|             echo 'services:' >> "$conf" | ||||
|             echo "    enabled:" >> "$conf" | ||||
|             for svc in ${SERVICES[@]};do | ||||
|                 echo "      - name: $svc" >> "$conf" | ||||
|                 echo '        runlevel: default' >> "$conf" | ||||
|             done | ||||
|         ;; | ||||
|         'openrc') | ||||
|             echo 'initdDir: /etc/init.d' >> "$conf" | ||||
|             echo '' >> "$conf" | ||||
|             echo 'runlevelsDir: /etc/runlevels' >> "$conf" | ||||
|             echo '' >> "$conf" | ||||
|             echo 'services:' >> "$conf" | ||||
|             for svc in ${SERVICES[@]};do | ||||
|                 echo "      - name: $svc" >> "$conf" | ||||
|                 echo '        runlevel: default' >> "$conf" | ||||
|             done | ||||
|         ;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
| write_postcfg_conf(){ | ||||
|     local conf="$1/postcfg.conf" init="$2" | ||||
|     sed -e "s|openrc|$init|" -i "$conf" | ||||
| } | ||||
|  | ||||
| configure_calamares(){ | ||||
|     local mods="$1/etc/calamares/modules" init="$2" | ||||
|     if [[ -d "$mods" ]];then | ||||
|         info "Configuring [Calamares]" | ||||
|         write_users_conf "$mods" | ||||
|         write_servicescfg_conf "$mods" "$init" | ||||
|         write_postcfg_conf "$mods" "$init" | ||||
|         local name=services-"$init" | ||||
|         sed -e "s|services-openrc|$name|" -i "$1"/etc/calamares/settings.conf | ||||
|         info "Done configuring [Calamares]" | ||||
|     fi | ||||
| } | ||||
							
								
								
									
										556
									
								
								lib/util-iso.sh
									
									
									
									
									
								
							
							
						
						
									
										556
									
								
								lib/util-iso.sh
									
									
									
									
									
								
							| @@ -1,556 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # 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. | ||||
|  | ||||
| import ${LIBDIR}/util-chroot.sh | ||||
| import ${LIBDIR}/util-iso-grub.sh | ||||
| import ${LIBDIR}/util-iso-yaml.sh | ||||
| import ${LIBDIR}/util-iso-profile.sh | ||||
|  | ||||
| track_img() { | ||||
|     info "mount: [%s]" "$2" | ||||
|     mount "$@" && IMG_ACTIVE_MOUNTS=("$2" "${IMG_ACTIVE_MOUNTS[@]}") | ||||
| } | ||||
|  | ||||
| mount_img() { | ||||
|     IMG_ACTIVE_MOUNTS=() | ||||
|     mkdir -p "$2" | ||||
|     track_img "$1" "$2" | ||||
| } | ||||
|  | ||||
| umount_img() { | ||||
|     if [[ -n ${IMG_ACTIVE_MOUNTS[@]} ]];then | ||||
|         info "umount: [%s]" "${IMG_ACTIVE_MOUNTS[@]}" | ||||
|         umount "${IMG_ACTIVE_MOUNTS[@]}" | ||||
|         unset IMG_ACTIVE_MOUNTS | ||||
|         rm -r "$1" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| track_fs() { | ||||
|     info "overlayfs mount: [%s]" "$5" | ||||
|     mount "$@" && FS_ACTIVE_MOUNTS=("$5" "${FS_ACTIVE_MOUNTS[@]}") | ||||
| } | ||||
|  | ||||
| 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" | ||||
|     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" | ||||
|         ;; | ||||
|     esac | ||||
|     track_fs -t overlay overlay -olowerdir="$lower",upperdir="$upper",workdir="${mnt_dir}/work" "$upper" | ||||
| } | ||||
|  | ||||
| umount_overlay(){ | ||||
|     if [[ -n ${FS_ACTIVE_MOUNTS[@]} ]];then | ||||
|         info "overlayfs umount: [%s]" "${FS_ACTIVE_MOUNTS[@]}" | ||||
|         umount "${FS_ACTIVE_MOUNTS[@]}" | ||||
|         unset FS_ACTIVE_MOUNTS | ||||
|         rm -rf "${mnt_dir}/work" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| error_function() { | ||||
|     if [[ -p $logpipe ]]; then | ||||
|         rm "$logpipe" | ||||
|     fi | ||||
|     local func="$1" | ||||
|     # first exit all subshells, then print the error | ||||
|     if (( ! BASH_SUBSHELL )); then | ||||
|         error "A failure occurred in %s()." "$func" | ||||
|         plain "Aborting..." | ||||
|     fi | ||||
|     umount_overlay | ||||
|     umount_img | ||||
|     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 | ||||
|     set -E | ||||
|     restoretrap=$(trap -p ERR) | ||||
|     trap 'error_function $func' ERR | ||||
|  | ||||
|     if ${log};then | ||||
|         run_log "$func" | ||||
|     else | ||||
|         "$func" | ||||
|     fi | ||||
|  | ||||
|     eval $restoretrap | ||||
|     set +E | ||||
|     set +e | ||||
| } | ||||
|  | ||||
| trap_exit() { | ||||
|     local sig=$1; shift | ||||
|     error "$@" | ||||
|     umount_overlay | ||||
|     trap -- "$sig" | ||||
|     kill "-$sig" "$$" | ||||
| } | ||||
|  | ||||
| prepare_traps(){ | ||||
|     for sig in TERM HUP QUIT; do | ||||
|         trap "trap_exit $sig \"$(gettext "%s signal caught. Exiting...")\" \"$sig\"" "$sig" | ||||
|     done | ||||
|     trap 'trap_exit INT "$(gettext "Aborted by user! Exiting...")"' INT | ||||
| #     trap 'trap_exit USR1 "$(gettext "An unknown error has occurred. Exiting...")"' ERR | ||||
| } | ||||
|  | ||||
| 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_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 | ||||
| } | ||||
|  | ||||
| set_xdm(){ | ||||
|     if [[ -f $1/etc/conf.d/xdm ]];then | ||||
|         local conf='DISPLAYMANAGER="'${DISPLAYMANAGER}'"' | ||||
|         sed -i -e "s|^.*DISPLAYMANAGER=.*|${conf}|" $1/etc/conf.d/xdm | ||||
|     fi | ||||
| } | ||||
|  | ||||
| configure_hosts(){ | ||||
|     sed -e "s|localhost.localdomain|localhost.localdomain ${HOST_NAME}|" -i $1/etc/hosts | ||||
| } | ||||
|  | ||||
| configure_logind(){ | ||||
|     local conf=$1/etc/$2/logind.conf | ||||
|     if [[ -e $conf ]];then | ||||
|         msg2 "Configuring logind ..." | ||||
|         sed -i 's/#\(HandleSuspendKey=\)suspend/\1ignore/' "$conf" | ||||
|         sed -i 's/#\(HandleLidSwitch=\)suspend/\1ignore/' "$conf" | ||||
|         sed -i 's/#\(HandleHibernateKey=\)hibernate/\1ignore/' "$conf" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| 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}" | ||||
| } | ||||
|  | ||||
| configure_system(){ | ||||
|     local mnt="$1" | ||||
|     case ${INITSYS} in | ||||
|         'openrc' | 'runit') | ||||
|             configure_logind "$mnt" "elogind" | ||||
|         ;; | ||||
|     esac | ||||
|     echo ${HOST_NAME} > $mnt/etc/hostname | ||||
| } | ||||
|  | ||||
| clean_iso_root(){ | ||||
|     local dest="$1" | ||||
|     msg "Deleting isoroot [%s] ..." "${dest##*/}" | ||||
|     rm -rf --one-file-system "$dest" | ||||
| } | ||||
|  | ||||
| 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 | ||||
|     fi | ||||
|     path=$mnt/var/lib/pacman/sync | ||||
|     if [[ -d $path ]];then | ||||
|         find "$path" -type f -delete &> /dev/null | ||||
|     fi | ||||
|     path=$mnt/var/cache/pacman/pkg | ||||
|     if [[ -d $path ]]; then | ||||
|         find "$path" -type f -delete &> /dev/null | ||||
|     fi | ||||
|     path=$mnt/var/log | ||||
|     if [[ -d $path ]]; then | ||||
|         find "$path" -type f -delete &> /dev/null | ||||
|     fi | ||||
|     path=$mnt/var/tmp | ||||
|     if [[ -d $path ]];then | ||||
|         find "$path" -mindepth 1 -delete &> /dev/null | ||||
|     fi | ||||
|     path=$mnt/tmp | ||||
|     if [[ -d $path ]];then | ||||
|         find "$path" -mindepth 1 -delete &> /dev/null | ||||
|     fi | ||||
|  | ||||
|     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 | ||||
|     fi | ||||
|     if [[ -f "$mnt/etc/machine-id" ]]; then | ||||
|         rm $mnt/etc/machine-id | ||||
|     fi | ||||
| } | ||||
|  | ||||
| configure_live_image(){ | ||||
|     local fs="$1" | ||||
|     msg "Configuring [livefs]" | ||||
|     configure_hosts "$fs" | ||||
|     configure_system "$fs" | ||||
|     configure_services "$fs" | ||||
|     configure_calamares "$fs" "${INITSYS}" | ||||
|     write_live_session_conf "$fs" | ||||
|     msg "Done configuring [livefs]" | ||||
| } | ||||
|  | ||||
| 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 -R root "$idir" | ||||
|     cd ${OLDPWD} | ||||
| } | ||||
|  | ||||
| make_checksum(){ | ||||
|     local idir="$1" file="$2" | ||||
|     msg2 "Creating sha512sum ..." | ||||
|     cd $idir | ||||
|     sha512sum $file.sfs > $file.sha512 | ||||
|     cd ${OLDPWD} | ||||
| } | ||||
|  | ||||
| # $1: image path | ||||
| make_sfs() { | ||||
|     local src="$1" | ||||
|     if [[ ! -e "${src}" ]]; then | ||||
|         error "The path %s does not exist" "${src}" | ||||
|         retrun 1 | ||||
|     fi | ||||
|     local timer=$(get_timer) dest=${iso_root}/artix/${ARCH} | ||||
|     local name=${1##*/} | ||||
|     local sfs="${dest}/${name}.sfs" | ||||
|     mkdir -p ${dest} | ||||
|     msg "Generating SquashFS image for %s" "${src}" | ||||
|     if [[ -f "${sfs}" ]]; then | ||||
|         local has_changed_dir=$(find ${src} -newer ${sfs}) | ||||
|         msg2 "Possible changes for %s ..." "${src}"  >> /tmp/buildiso.debug | ||||
|         msg2 "%s" "${has_changed_dir}" >> /tmp/buildiso.debug | ||||
|         if [[ -n "${has_changed_dir}" ]]; then | ||||
|             msg2 "SquashFS image %s is not up to date, rebuilding..." "${sfs}" | ||||
|             rm "${sfs}" | ||||
|         else | ||||
|             msg2 "SquashFS image %s is up to date, skipping." "${sfs}" | ||||
|             return | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     if ${persist};then | ||||
|         local size=32G | ||||
|         local mnt="${mnt_dir}/${name}" | ||||
|         msg2 "Creating ext4 image of %s ..." "${size}" | ||||
|         truncate -s ${size} "${src}.img" | ||||
|         local ext4_args=() | ||||
|         ext4_args+=(-O ^has_journal,^resize_inode -E lazy_itable_init=0 -m 0) | ||||
|         mkfs.ext4 ${ext4_args[@]} -F "${src}.img" &>/dev/null | ||||
|         tune2fs -c 0 -i 0 "${src}.img" &> /dev/null | ||||
|         mount_img "${work_dir}/${name}.img" "${mnt}" | ||||
|         msg2 "Copying %s ..." "${src}/" | ||||
|         cp -aT "${src}/" "${mnt}/" | ||||
|         umount_img "${mnt}" | ||||
|  | ||||
|     fi | ||||
|  | ||||
|     msg2 "Creating SquashFS image, this may take some time..." | ||||
|     local mksfs_args=() | ||||
|     if ${persist};then | ||||
|         mksfs_args+=(${work_dir}/${name}.img) | ||||
|     else | ||||
|         mksfs_args+=(${src}) | ||||
|     fi | ||||
|  | ||||
|     mksfs_args+=(${sfs} -noappend) | ||||
|  | ||||
|     local highcomp="-b 256K -Xbcj x86" comp='xz' | ||||
|  | ||||
|     mksfs_args+=(-comp ${comp} ${highcomp}) | ||||
|  | ||||
|     mksquashfs "${mksfs_args[@]}" | ||||
|  | ||||
|     make_checksum "${dest}" "${name}" | ||||
|     ${persist} && rm "${src}.img" | ||||
|  | ||||
|     if [[ -n ${GPG_KEY} ]];then | ||||
|         make_sig "${dest}" "${name}" | ||||
|     fi | ||||
|  | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer_start}" | ||||
| } | ||||
|  | ||||
| assemble_iso(){ | ||||
|     msg "Creating ISO image..." | ||||
|     local mod_date=$(date -u +%Y-%m-%d-%H-%M-%S-00  | sed -e s/-//g) | ||||
|  | ||||
|     xorriso -as mkisofs \ | ||||
|         --modification-date=${mod_date} \ | ||||
|         --protective-msdos-label \ | ||||
|         -volid "${iso_label}" \ | ||||
|         -appid "$(get_osname) Live/Rescue CD" \ | ||||
|         -publisher "$(get_osname) <$(get_disturl)>" \ | ||||
|         -preparer "Prepared by artools/${0##*/}" \ | ||||
|         -r -graft-points -no-pad \ | ||||
|         --sort-weight 0 / \ | ||||
|         --sort-weight 1 /boot \ | ||||
|         --grub2-mbr ${iso_root}/boot/grub/i386-pc/boot_hybrid.img \ | ||||
|         -partition_offset 16 \ | ||||
|         -b boot/grub/i386-pc/eltorito.img \ | ||||
|         -c boot.catalog \ | ||||
|         -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \ | ||||
|         -eltorito-alt-boot \ | ||||
|         -append_partition 2 0xef ${iso_root}/efi.img \ | ||||
|         -e --interval:appended_partition_2:all:: -iso_mbr_part_type 0x00 \ | ||||
|         -no-emul-boot \ | ||||
|         -iso-level 3 \ | ||||
|         -o ${iso_dir}/${iso_file} \ | ||||
|         ${iso_root}/ | ||||
| } | ||||
|  | ||||
| # Build ISO | ||||
| make_iso() { | ||||
|     msg "Start [Build ISO]" | ||||
|     touch "${iso_root}/.artix" | ||||
|     for sfs_dir in $(find "${work_dir}" -maxdepth 1 -type d); do | ||||
|         if [[ "${sfs_dir}" != "${work_dir}" ]]; then | ||||
|             make_sfs "${sfs_dir}" | ||||
|         fi | ||||
|     done | ||||
|  | ||||
|     msg "Making bootable image" | ||||
|     # Sanity checks | ||||
|     [[ ! -d "${iso_root}" ]] && return 1 | ||||
|     if [[ -f "${iso_dir}/${iso_file}" ]]; then | ||||
|         msg2 "Removing existing bootable image..." | ||||
|         rm -rf "${iso_dir}/${iso_file}" | ||||
|     fi | ||||
|     assemble_iso | ||||
|     msg "Done [Build ISO]" | ||||
| } | ||||
|  | ||||
| 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 | ||||
| } | ||||
|  | ||||
| install_packages(){ | ||||
|     local fs="$1" | ||||
|     setarch "${ARCH}" mkchroot \ | ||||
|         "${mkchroot_args[@]}" "${fs}" "${packages[@]}" | ||||
| } | ||||
|  | ||||
| copy_overlay(){ | ||||
|     local src="$1" dest="$2" | ||||
|     if [[ -e "$src" ]];then | ||||
|         msg2 "Copying [%s] ..." "${src##*/}" | ||||
|         cp -LR "$src"/* "$dest" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| make_rootfs() { | ||||
|     if [[ ! -e ${work_dir}/rootfs.lock ]]; then | ||||
|         msg "Prepare [Base installation] (rootfs)" | ||||
|         local rootfs="${work_dir}/rootfs" | ||||
|  | ||||
|         prepare_dir "${rootfs}" | ||||
|  | ||||
|         install_packages "${rootfs}" | ||||
|  | ||||
|         copy_overlay "${ROOT_OVERLAY}" "${rootfs}" | ||||
|  | ||||
|         clean_up_image "${rootfs}" | ||||
|  | ||||
|         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)" | ||||
|         local livefs="${work_dir}/livefs" | ||||
|  | ||||
|         prepare_dir "${livefs}" | ||||
|  | ||||
|         mount_overlay "${livefs}" "${work_dir}" "${DESKTOP_LIST}" | ||||
|  | ||||
|         install_packages "${livefs}" | ||||
|  | ||||
|         copy_overlay "${LIVE_OVERLAY}" "${livefs}" | ||||
|  | ||||
|         configure_live_image "${livefs}" | ||||
|  | ||||
|         umount_overlay | ||||
|  | ||||
|         clean_up_image "${livefs}" | ||||
|  | ||||
|         msg "Done [Live installation] (livefs)" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| make_bootfs() { | ||||
|     if [[ ! -e ${work_dir}/bootfs.lock ]]; then | ||||
|         msg "Prepare [/iso/boot]" | ||||
|         local boot="${iso_root}/boot" | ||||
|  | ||||
|         prepare_dir "${boot}" | ||||
|  | ||||
|         cp ${work_dir}/rootfs/boot/vmlinuz* ${boot}/vmlinuz-${ARCH} | ||||
|  | ||||
|         local bootfs="${work_dir}/bootfs" | ||||
|  | ||||
|         mount_overlay "${bootfs}" "${work_dir}" "${DESKTOP_LIST}" | ||||
|  | ||||
|         prepare_initcpio "${bootfs}" | ||||
|         prepare_initramfs "${bootfs}" | ||||
|  | ||||
|         cp ${bootfs}/boot/initramfs.img ${boot}/initramfs-${ARCH}.img | ||||
|         prepare_boot_extras "${bootfs}" "${boot}" | ||||
|  | ||||
|         umount_overlay | ||||
|  | ||||
|         rm -R ${bootfs} | ||||
|         : > ${work_dir}/bootfs.lock | ||||
|         msg "Done [/iso/boot]" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| make_grub(){ | ||||
|     if [[ ! -e ${work_dir}/grub.lock ]]; then | ||||
|         msg "Prepare [/iso/boot/grub]" | ||||
|  | ||||
|         prepare_grub "${work_dir}/rootfs" "${work_dir}/livefs" "${iso_root}" | ||||
|  | ||||
|         configure_grub "${iso_root}" | ||||
|  | ||||
|         : > ${work_dir}/grub.lock | ||||
|         msg "Done [/iso/boot/grub]" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| compress_images(){ | ||||
|     local timer=$(get_timer) | ||||
|     run_safe "make_iso" | ||||
|     user_own "${iso_dir}" "-R" | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer}" | ||||
| } | ||||
|  | ||||
| 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 | ||||
|         load_pkgs "${LIVE_LIST}" "${INITSYS}" | ||||
|         run_safe "make_livefs" | ||||
|     fi | ||||
|     run_safe "make_bootfs" | ||||
|     run_safe "make_grub" | ||||
|  | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer}" | ||||
| } | ||||
							
								
								
									
										17
									
								
								lib/util-iso.sh.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								lib/util-iso.sh.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| #!/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. | ||||
|  | ||||
| for isolib in ${LIBDIR}/iso/*.sh; do | ||||
|     . $isolib | ||||
| done | ||||
| @@ -1,53 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # 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. | ||||
|  | ||||
| subrepo_push(){ | ||||
|     local pkg="$1" | ||||
|     git subrepo push "$pkg" --clean | ||||
| } | ||||
|  | ||||
| subrepo_pull(){ | ||||
|     local pkg="$1" | ||||
|     git subrepo pull "$pkg" | ||||
| } | ||||
|  | ||||
| subrepo_clone(){ | ||||
|     local pkg="$1" org="$2" | ||||
|     local gitname=$(get_compliant_name "$pkg") | ||||
|     msg2 "Getting package repo [%s] from org (%s)" "$pkg" "$org/$gitname" | ||||
|     git subrepo clone gitea@"${GIT_DOMAIN}":"$org"/"$gitname".git "$pkg" | ||||
| } | ||||
|  | ||||
| write_jenkinsfile(){ | ||||
|     local jenkins=Jenkinsfile | ||||
|     echo '@Library(["PackagePipeline", "RepoPackage"]) import org.artixlinux.RepoPackage' > $jenkins | ||||
|     echo '' >> $jenkins | ||||
|     echo 'PackagePipeline(new RepoPackage(this))' >> $jenkins | ||||
|     echo '' >> $jenkins | ||||
| } | ||||
|  | ||||
| write_agentyaml(){ | ||||
|     local agent=.artixlinux/agent.yaml label='master' | ||||
|     [[ -d .artixlinux ]] || mkdir .artixlinux | ||||
|     echo '%YAML 1.2' > $agent | ||||
|     echo '---' >> $agent | ||||
|     echo '' >> $agent | ||||
|     echo "label: $label" >> $agent | ||||
|     echo '' >> $agent | ||||
| } | ||||
|  | ||||
| commit_jenkins_files(){ | ||||
|     write_jenkinsfile | ||||
|     write_agentyaml | ||||
|     git add Jenkinsfile | ||||
|     git add .artixlinux | ||||
|     git commit -m "add jenkinsfile & .artixlinux/agent.yaml" | ||||
| } | ||||
							
								
								
									
										17
									
								
								lib/util-pkg.sh.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								lib/util-pkg.sh.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| #!/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. | ||||
|  | ||||
| for pkglib in ${LIBDIR}/pkg/*.sh; do | ||||
|     . $pkglib | ||||
| done | ||||
		Reference in New Issue
	
	Block a user