From 1ba64c22602bdf5c53565083c13c67a4583e32ff Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sat, 8 Dec 2012 13:11:18 -0500 Subject: Add /usr/share/libretools/conf.sh, use /etc/libretools.d/chroot.conf Use it for librechroot, libremakepkg, libremkchroot --- Makefile | 4 +- src/chroot-tools/chroot.conf | 7 +++ src/chroot-tools/librechroot | 5 +- src/chroot-tools/libremakepkg | 45 ++++----------- src/chroot-tools/libremakepkg.gpl2 | 4 +- src/chroot-tools/libremkchroot | 5 +- src/lib/Makefile | 2 + src/lib/conf.sh | 115 +++++++++++++++++++++++++++++++++++++ src/libretools.conf | 23 ++------ 9 files changed, 152 insertions(+), 58 deletions(-) create mode 100644 src/chroot-tools/chroot.conf create mode 100644 src/lib/Makefile create mode 100644 src/lib/conf.sh diff --git a/Makefile b/Makefile index 4e255ef..f3b9749 100644 --- a/Makefile +++ b/Makefile @@ -16,12 +16,12 @@ docdir=$(datarootdir)/doc ################################################################################ # these are directories -pseudo-packages=abslibre-tools chroot-tools fullpkg mips64el-tools pr-tools toru +pseudo-packages=abslibre-tools chroot-tools fullpkg lib mips64el-tools pr-tools toru # these are the resulting packages packages=libretools libretools-pr libretools-mips64el # and which directories they contains -libretools=abslibre-tools chroot-tools fullpkg toru misc +libretools=abslibre-tools lib chroot-tools fullpkg toru misc libretools-pr=pr-tools libretools-mips64el=mips64el-tools diff --git a/src/chroot-tools/chroot.conf b/src/chroot-tools/chroot.conf new file mode 100644 index 0000000..cd5c71d --- /dev/null +++ b/src/chroot-tools/chroot.conf @@ -0,0 +1,7 @@ +## The directory where the chroots are stored +CHROOTDIR=/var/lib/archbuild +## Extra packages to have installed on the chroot (besides base base-devel and sudo) +CHROOTEXTRAPKG=(distcc ccache tsocks libretools) +## The meaning of this changes based on the version of libretools+devtools +## do NOT set it to 'root' +CHROOT=default diff --git a/src/chroot-tools/librechroot b/src/chroot-tools/librechroot index 52a3bdf..0770ad6 100755 --- a/src/chroot-tools/librechroot +++ b/src/chroot-tools/librechroot @@ -20,7 +20,10 @@ # You should have received a copy of the GNU General Public License # along with Parabola. If not, see . -. /etc/libretools.conf +. /usr/share/libretools/conf.sh +load_conf_libretools_chroot + +. "$(which libremessages)" # This file (librechroot) is GPLv3+, but I would like to use some code # modified from devtools' "makechrootpkg", which is GPLv2. diff --git a/src/chroot-tools/libremakepkg b/src/chroot-tools/libremakepkg index ec7adbd..c66f5cc 100755 --- a/src/chroot-tools/libremakepkg +++ b/src/chroot-tools/libremakepkg @@ -20,7 +20,10 @@ # You should have received a copy of the GNU General Public License # along with Parabola. If not, see . -. /etc/libretools.conf +. /usr/share/libretools/conf.sh +load_conf_libretools_chroot + +. "$(which libremessages)" shopt -s nullglob @@ -54,34 +57,6 @@ trap_exit() { exit 1 } -## -# Usage: makepkg_conf_get SETTING [DEFAULT] -## -makepkg_conf_get() { - local setting=$1 - if [[ -f $LIBREHOME/.makepkg.conf ]]; then - eval $(grep "^$setting=" "$LIBREHOME/.makepkg.conf") - fi - if [[ -z ${!setting:-} ]]; then - eval $(grep "^$setting=" "/etc/makepkg.conf") - fi - if [[ -z ${!setting:-} && -n ${2:-} ]]; then - eval "$setting='$2'" - fi -} - -chroot_makepkg_conf_get() { - local setting=$1 - eval $(grep "^$setting=" "$copydir/etc/makepkg.conf") -} - -chroot_makepkg_conf_set() { - local key=$1 - local val=$2 - sed -i "/^$key=/d" "$copydir/etc/makepkg.conf" - echo "$key='$val'" >> "$copydir/etc/makepkg.conf" -} - # Functions that check for issues with the build ############################### libre_check_pkgbuild() { @@ -172,16 +147,18 @@ main() { trap 'trap_exit "(libremakepkg): Aborted by user! Exiting..."' INT trap 'trap_exit "(libremakepkg): An unknown error has occurred. Exiting..."' ERR - makepkg_conf_get SRCDEST . - makepkg_conf_get PKGDEST . + SRCDEST="$(get_conf_makepkg SRCDEST .)" + PKGDEST="$(get_conf_makepkg PKGDEST .)" # OK, we're starting now ############################################### lock_open_write 9 "$copydir" "Locking chroot '$CHROOTCOPY'" - # Set target CARCH as it might be used within the PKGBUILD to select correct sources - chroot_makepkg_conf_get CARCH - export CARCH + # Set target CARCH as it might be used within the PKGBUILD to select + # correct sources + MAKEPKG_CONF=$copydir/etc/makepkg.conf + export CARCH="$(get_conf_makepkg CARCH)" + unset MAKEPKG_CONF $NOCHROOT || chroot_init diff --git a/src/chroot-tools/libremakepkg.gpl2 b/src/chroot-tools/libremakepkg.gpl2 index 3f66589..50bb48e 100755 --- a/src/chroot-tools/libremakepkg.gpl2 +++ b/src/chroot-tools/libremakepkg.gpl2 @@ -25,8 +25,8 @@ chroot_init() { mkdir -p "$copydir/srcdest" mkdir -p "$copydir/build" - chroot_makepkg_conf_set PKGDEST /pkgdest - chroot_makepkg_conf_set SRCDEST /srcdest + MAKEPKG_CONF=$copydir/etc/makepkg.conf set_conf_makepkg PKGDEST /pkgdest + MAKEPKG_CONF=$copydir/etc/makepkg.conf set_conf_makepkg SRCDEST /srcdest cat > "$copydir/etc/sudoers.d/nobody-pacman" <. -. /etc/libretools.conf +. /usr/share/libretools/conf.sh +load_conf_libretools_chroot + +. "$(which libremessages)" cmd=${0##*/} diff --git a/src/lib/Makefile b/src/lib/Makefile new file mode 100644 index 0000000..0c69ba3 --- /dev/null +++ b/src/lib/Makefile @@ -0,0 +1,2 @@ +libre_datadir=$(datadir)/libretools +include ../../common.mk diff --git a/src/lib/conf.sh b/src/lib/conf.sh new file mode 100644 index 0000000..7693ee5 --- /dev/null +++ b/src/lib/conf.sh @@ -0,0 +1,115 @@ +#!/bin/bash + +INCLUDE_CONF_SH=conf.sh + +LIBREUSER="${SUDO_USER:-$USER}" +LIBREHOME="$(eval echo ~$LIBREUSER)" +if [[ -z ${XDG_CONFIG_HOME:-} ]]; then + export XDG_CONFIG_HOME="${LIBREHOME}/.config" +fi + +# Generic functions ############################################################ + +get_files() { + local slug=$1 + case $slug in + makepkg.conf) + if [[ $MAKEPKG_CONF != /etc/$slug && -r $MAKEPKG_CONF ]]; then + echo "$MAKEPKG_CONF" + else + echo /etc/$slug + echo "$LIBREHOME/.$slug" + fi + ;; + libretools.conf) + echo /etc/$slug + echo "$XDG_CONFIG_HOME/libretools/$slug" + ;; + *.conf) + echo /etc/libretools.d/$slug + echo "$XDG_CONFIG_HOME/libretools/$slug" + ;; + esac +} + +load_files() { + for file in $(get_files $1.conf); do + if [[ -r $file ]]; then + . "$file" + fi + done +} + +check_vars() { + local slug=$1 + shift + local ret=0 + for VAR in "$@"; do + if [[ -z ${!VAR} ]]; then + if [[ $(get_files $slug|wc -l) > 1 ]]; then + echo "Configure '$VAR' in one of:" + get_files $slug | sed 's/./ -> &/' + else + echo "Configure '$VAR' in $(get_files $slug)" + fi + ret=1 + fi >>/dev/stderr + done + if [[ $ret != 0 ]]; then + return 1 + fi +} + +# makepkg configuration ######################################################## + +[[ -n ${MAKEPKG_CONF:-} ]] || MAKEPKG_CONF=/etc/makepkg.conf + +load_conf_makepkg() { + load_files makepkg +} + +get_conf_makepkg() ( + set +euE + local setting=$1 + local default=$2 + load_conf_makepkg + printf '%s\n' "${!setting:-${default}}" +) + +set_conf_makepkg() { + local key=$1 + local val=$2 + for file in `get_files makepkg.conf|tac`; do + if [[ -w $file ]]; then + sed -i "/^\s*$key=/d" "$file" + echo "$key='$val'" >> "$file" + return 0 + fi + done + return 1 +} + + +# libretools configuration ##################################################### + +load_conf_libretools() { + load_files libretools + # TODO: checks +} + +load_conf_libretools_chroot() { + load_files chroot + if [[ -f /.arch-chroot ]]; then + # check_vars chroot CHROOTEXTRAPKG + : + else + # check_vars chroot CHROOTDIR CHROOT CHROOTEXTRAPKG + local ret=0 + check_vars chroot CHROOTDIR CHROOT || ret=$? + if [[ $CHROOT == root ]]; then + echo "Configured var CHROOT cannot equal 'root'" + ret=1 + fi + return $ret; + fi +} diff --git a/src/libretools.conf b/src/libretools.conf index 5e45350..9e17871 100644 --- a/src/libretools.conf +++ b/src/libretools.conf @@ -24,18 +24,6 @@ REPOS=('core' 'libre' 'extra' 'community' 'libre-testing' 'social' 'sugar' 'pcr' ## Used by `librestage` ARCHES=('i686' 'x86_64' 'mips64el' 'any') -################################################################################ -# chroot # -################################################################################ - -## The directory where the chroots are stored -CHROOTDIR=/var/lib/archbuild -## Extra packages to have installed on the chroot (besides base base-devel and sudo) -CHROOTEXTRAPKG=(distcc ccache tsocks) -## The meaning of this changes based on the version of libretools+devtools -## do NOT set it to 'root' -CHROOT=default - ################################################################################ # abslibre # ################################################################################ @@ -106,6 +94,8 @@ TORUPATH=/var/lib/libretools/toru # This probably shouldn't be in a .conf file... # ################################################################################ +if [[ -n ${INCLUDE_CONF_SH:-} ]]; then + LIBREUSER="${SUDO_USER:-$USER}" LIBREHOME="$(eval echo ~$LIBREUSER)" if [[ -z ${XDG_CONFIG_HOME:-} ]]; then @@ -116,22 +106,19 @@ if [[ -e "$XDG_CONFIG_HOME/libretools/libretools.conf" ]]; then fi ret=0 -for VAR in CHROOTDIR CHROOT PARABOLAHOST LIBREDESTDIR \ +for VAR in PARABOLAHOST LIBREDESTDIR \ BLACKLIST WORKDIR REPOS ARCHES ABSLIBREGIT \ COMMITCMD DIFFTOOL FULLBUILDCMD SIGEXT SIGID; do - if [[ -z ${!VAR} ]]; then echo "Configure $VAR var in /etc/libretools.conf" ret=1 fi done -if [[ $CHROOT == root ]]; then - echo "Configured var CHROOT cannot equal 'root'" - ret=1 -fi if [[ $ret != 0 ]]; then exit 1 fi unset ret . /usr/bin/libremessages + +fi -- cgit v1.2.2