From: root Date: Thu, 10 Mar 2016 17:20:16 +0000 (+0100) Subject: saving uncommitted changes in /etc prior to emerge run X-Git-Url: https://git.uhu-banane.net/?a=commitdiff_plain;h=532ffc9b94e4248aba53fdc6f29cb083308e5746;p=config%2Fuhu1%2Fetc.git saving uncommitted changes in /etc prior to emerge run --- diff --git a/.etckeeper b/.etckeeper index d9011aa..66d2c8f 100755 --- a/.etckeeper +++ b/.etckeeper @@ -910,6 +910,7 @@ maybe chmod 0755 'eselect/postgresql/slots/9.4' maybe chmod 0644 'eselect/postgresql/slots/9.4/base' maybe chmod 0644 'etc-update.conf' maybe chmod 0755 'etckeeper' +maybe chmod 0644 'etckeeper/._cfg0000_etckeeper.conf' maybe chmod 0755 'etckeeper/commit.d' maybe chmod 0755 'etckeeper/commit.d/10vcs-test' maybe chmod 0755 'etckeeper/commit.d/30bzr-add' @@ -1372,12 +1373,8 @@ maybe chmod 0644 'logwatch/.keep_sys-apps_logwatch-0' maybe chmod 0644 'lsb-release' maybe chmod 0755 'lvm' maybe chmod 0700 'lvm/archive' -maybe chmod 0600 'lvm/archive/vg00_00000.vg' -maybe chmod 0600 'lvm/archive/vg00_00001-682332803.vg' maybe chmod 0700 'lvm/backup' -maybe chmod 0600 'lvm/backup/vg00' maybe chmod 0700 'lvm/cache' -maybe chmod 0600 'lvm/cache/.cache' maybe chmod 0644 'lvm/lvm.conf' maybe chmod 0755 'lvm/profile' maybe chmod 0444 'lvm/profile/command_profile_template.profile' diff --git a/etckeeper/._cfg0000_etckeeper.conf b/etckeeper/._cfg0000_etckeeper.conf new file mode 100644 index 0000000..0a9c88b --- /dev/null +++ b/etckeeper/._cfg0000_etckeeper.conf @@ -0,0 +1,53 @@ +# The VCS to use. +#VCS="hg" +VCS="git" +#VCS="bzr" +#VCS="darcs" + +# Options passed to git commit when run by etckeeper. +GIT_COMMIT_OPTIONS="" + +# Options passed to hg commit when run by etckeeper. +HG_COMMIT_OPTIONS="" + +# Options passed to bzr commit when run by etckeeper. +BZR_COMMIT_OPTIONS="" + +# Options passed to darcs record when run by etckeeper. +DARCS_COMMIT_OPTIONS="-a" + +# Uncomment to avoid etckeeper committing existing changes +# to /etc automatically once per day. +#AVOID_DAILY_AUTOCOMMITS=1 + +# Uncomment the following to avoid special file warning +# (the option is enabled automatically by cronjob regardless). +#AVOID_SPECIAL_FILE_WARNING=1 + +# Uncomment to avoid etckeeper committing existing changes to +# /etc before installation. It will cancel the installation, +# so you can commit the changes by hand. +#AVOID_COMMIT_BEFORE_INSTALL=1 + +# The high-level package manager that's being used. +# (apt, pacman-g2, yum, dnf, zypper etc) +#HIGHLEVEL_PACKAGE_MANAGER=apt + +# Gentoo specific: +# For portage this is emerge +# For paludis this is cave +HIGHLEVEL_PACKAGE_MANAGER=emerge + +# The low-level package manager that's being used. +# (dpkg, rpm, pacman, pacman-g2, etc) +#LOWLEVEL_PACKAGE_MANAGER=dpkg + +# Gentoo specific: +# For portage this is qlist +# For paludis this is cave +LOWLEVEL_PACKAGE_MANAGER=qlist + +# To push each commit to a remote, put the name of the remote here. +# (eg, "origin" for git). Space-separated lists of multiple remotes +# also work (eg, "origin gitlab github" for git). +PUSH_REMOTE="" diff --git a/etckeeper/commit.d/99push b/etckeeper/commit.d/99push index 5aa8d21..b5418f7 100755 --- a/etckeeper/commit.d/99push +++ b/etckeeper/commit.d/99push @@ -1,9 +1,13 @@ #!/bin/sh if [ -n "$PUSH_REMOTE" ]; then if [ "$VCS" = git ] && [ -d .git ]; then - git push "$PUSH_REMOTE" master || true + for REMOTE in $PUSH_REMOTE; do + git push "$REMOTE" master || true + done elif [ "$VCS" = hg ] && [ -d .hg ]; then - hg push "$PUSH_REMOTE" || true + for REMOTE in $PUSH_REMOTE; do + hg push "$REMOTE" || true + done else echo "PUSH_REMOTE not yet supported for $VCS" >&2 fi diff --git a/etckeeper/list-installed.d/50list-installed b/etckeeper/list-installed.d/50list-installed index 1dcfda1..91718d4 100755 --- a/etckeeper/list-installed.d/50list-installed +++ b/etckeeper/list-installed.d/50list-installed @@ -1,14 +1,25 @@ #!/bin/sh -# Output to stdout a *sorted* list of all currently installed -# (or removed but still with config-files) packages, in the -# format "package version\n" (or something similar). -if [ "$LOWLEVEL_PACKAGE_MANAGER" = dpkg ]; then - dpkg-query -W -f '${Status}\t${Package} ${Version}\n' | \ - egrep '(ok installed|ok config-files)' | cut -f2,3 -elif [ "$LOWLEVEL_PACKAGE_MANAGER" = rpm ]; then - rpm -qa --qf "%|epoch?{%{epoch}}:{0}|:%{name}-%{version}-%{release}.%{arch}\n" | sort -elif [ "$LOWLEVEL_PACKAGE_MANAGER" = pacman ]; then - pacman -Q -elif [ "$LOWLEVEL_PACKAGE_MANAGER" = qlist ]; then - qlist -ICv +if [ "$1" = fmt ]; then + # If the list format changes, change the fmt + if [ "$LOWLEVEL_PACKAGE_MANAGER" = dpkg ]; then + echo 2 + else + echo "" + fi +else + # Output to stdout a *sorted* list of all currently installed + # (or removed but still with config-files) packages, in the + # format "package version\n" (or something similar). + if [ "$LOWLEVEL_PACKAGE_MANAGER" = dpkg ]; then + dpkg-query -W -f '${Status}\t${Package} ${Version} ${Architecture}\n' | \ + egrep '(ok installed|ok config-files)' | cut -f2,3 + elif [ "$LOWLEVEL_PACKAGE_MANAGER" = rpm ]; then + rpm -qa --qf "%|epoch?{%{epoch}}:{0}|:%{name}-%{version}-%{release}.%{arch}\n" | sort + elif [ "$LOWLEVEL_PACKAGE_MANAGER" = pacman ]; then + pacman -Q + elif [ "$LOWLEVEL_PACKAGE_MANAGER" = qlist ]; then + qlist -ICv + elif [ "$LOWLEVEL_PACKAGE_MANAGER" = cave ]; then + cave print-packages -r installed + fi fi diff --git a/etckeeper/post-install.d/50vcs-commit b/etckeeper/post-install.d/50vcs-commit index 7710c4a..53138c8 100755 --- a/etckeeper/post-install.d/50vcs-commit +++ b/etckeeper/post-install.d/50vcs-commit @@ -1,12 +1,13 @@ #!/bin/sh set -e - + pl="/var/cache/etckeeper/packagelist" if etckeeper unclean; then message="committing changes in /etc after $HIGHLEVEL_PACKAGE_MANAGER run" - if [ -e $pl.pre-install ]; then + set +e + if [ -e $pl.pre-install ] && [ "$(cat $pl.fmt 2>/dev/null || true)" = "$(etckeeper list-installed fmt)" ]; then ( echo "$message" echo @@ -16,8 +17,12 @@ if etckeeper unclean; then else etckeeper commit "$(printf "$message")" fi + status=$? + set -e + + if [ "$status" != 0 ]; then + echo "warning: etckeeper failed to commit changes in /etc using $VCS" >&2 + fi fi -if [ -e $pl.pre-install ]; then - rm -f $pl.pre-install -fi +rm -f $pl.pre-install $pl.fmt diff --git a/etckeeper/pre-commit.d/20warn-problem-files b/etckeeper/pre-commit.d/20warn-problem-files index f7c7580..f28d5ac 100755 --- a/etckeeper/pre-commit.d/20warn-problem-files +++ b/etckeeper/pre-commit.d/20warn-problem-files @@ -6,14 +6,14 @@ exclude_internal () { } if [ "$VCS" = bzr ] || [ "$VCS" = darcs ]; then - special=$(find . -not -type d -not -type f -not -type l | exclude_internal) || true - hardlinks=$(find . -type f -not -links 1 | exclude_internal ) || true + special=$(find . ! -type d ! -type f ! -type l | exclude_internal) || true + hardlinks=$(find . -type f ! -links 1 | exclude_internal ) || true elif [ "$VCS" = hg ]; then - special=$(find . -not -type d -not -type f -not -type l | exclude_internal) || true - hardlinks=$(find . -type f -not -links 1 -exec hg status {} \; | exclude_internal ) || true + special=$(find . ! -type d ! -type f ! -type l | exclude_internal) || true + hardlinks=$(find . -type f ! -links 1 -exec hg status {} \; | exclude_internal ) || true elif [ "$VCS" = git ]; then - special=$(find . -not -type d -not -type f -not -type l -exec git ls-files --exclude-standard --cached --others {} \; | exclude_internal) || true - hardlinks=$(find . -type f -not -links 1 -exec git ls-files --exclude-standard --cached --others {} \; | exclude_internal) || true + special=$(find . ! -type d ! -type f ! -type l -exec git ls-files --exclude-standard --cached --others {} \; | exclude_internal) || true + hardlinks=$(find . -type f ! -links 1 -exec git ls-files --exclude-standard --cached --others {} \; | exclude_internal) || true else special="" fi diff --git a/etckeeper/pre-commit.d/30store-metadata b/etckeeper/pre-commit.d/30store-metadata index 9e2792f..edec06b 100755 --- a/etckeeper/pre-commit.d/30store-metadata +++ b/etckeeper/pre-commit.d/30store-metadata @@ -28,7 +28,7 @@ filter_ignore() { grep -Evf "$listfile" ;; git) - git ls-files --others --ignore --exclude-standard --directory > "$listfile" || true + (git ls-files -oi --exclude-standard; git ls-files -oi --exclude-standard --directory) | sort | uniq > "$listfile" || true sed 's/^\.\///' | grep -xFvf "$listfile" ;; esac diff --git a/etckeeper/pre-install.d/10packagelist b/etckeeper/pre-install.d/10packagelist index e5fefa8..fbd4ac3 100755 --- a/etckeeper/pre-install.d/10packagelist +++ b/etckeeper/pre-install.d/10packagelist @@ -2,3 +2,4 @@ # This list will be later used when committing. mkdir -p /var/cache/etckeeper/ etckeeper list-installed > /var/cache/etckeeper/packagelist.pre-install +etckeeper list-installed fmt > /var/cache/etckeeper/packagelist.fmt diff --git a/etckeeper/pre-install.d/50uncommitted-changes b/etckeeper/pre-install.d/50uncommitted-changes index d03d0e8..969d341 100755 --- a/etckeeper/pre-install.d/50uncommitted-changes +++ b/etckeeper/pre-install.d/50uncommitted-changes @@ -1,15 +1,6 @@ #!/bin/sh set -e -if [ "$1" = "fail-debconf" ]; then - . /usr/share/debconf/confmodule - db_subst etckeeper/commit_failed VCS "$VCS" - db_input critical etckeeper/commit_failed || true - db_go || true - db_reset etckeeper/commit_failed || true - exit 0 -fi - if etckeeper unclean; then if [ "$AVOID_COMMIT_BEFORE_INSTALL" = 1 ]; then echo "" >&2 @@ -19,11 +10,6 @@ if etckeeper unclean; then exit 1 fi if ! etckeeper commit "saving uncommitted changes in /etc prior to $HIGHLEVEL_PACKAGE_MANAGER run"; then - if [ -e /usr/share/debconf/confmodule ]; then - $0 fail-debconf - else - echo "error: etckeeper failed to commit changes in /etc using $VCS" - exit 1 - fi + echo "warning: etckeeper failed to commit changes in /etc using $VCS" >&2 fi fi diff --git a/etckeeper/uninit.d/50vcs-uninit b/etckeeper/uninit.d/50vcs-uninit index b61abfd..06317c5 100755 --- a/etckeeper/uninit.d/50vcs-uninit +++ b/etckeeper/uninit.d/50vcs-uninit @@ -21,9 +21,9 @@ if ! grep -q "$managed_by_etckeeper" "$file"; then exit 0 else realfile="$file" - if which tempfile >/dev/null 2>&1 || type -p tempfile >/dev/null 2>&1; then + if which tempfile >/dev/null 2>&1 || type tempfile >/dev/null 2>&1; then tempfile="tempfile" - elif which mktemp >/dev/null 2>&1 || type -p mktemp >/dev/null 2>&1; then + elif which mktemp >/dev/null 2>&1 || type mktemp >/dev/null 2>&1; then tempfile="mktemp" else echo "etckeeper warning: can't find tempfile or mktemp" >&2 @@ -32,7 +32,7 @@ else file=$($tempfile) otherentries= skipping= - while read line; do + while read -r line; do if echo "$line" | grep -q "$managed_by_etckeeper"; then if [ ! "$skipping" ]; then skipping=1 diff --git a/etckeeper/update-ignore.d/01update-ignore b/etckeeper/update-ignore.d/01update-ignore index 3b368e8..88243ea 100755 --- a/etckeeper/update-ignore.d/01update-ignore +++ b/etckeeper/update-ignore.d/01update-ignore @@ -99,9 +99,9 @@ writefile () { ignore "*.pacorig" ignore "*.pacsave" nl - elif [ "$LOWLEVEL_PACKAGE_MANAGER" = "qlist" ]; then + elif [ "$LOWLEVEL_PACKAGE_MANAGER" = "qlist" -o "$LOWLEVEL_PACKAGE_MANAGER" = "cave" ]; then comment "new and old versions of conffiles, stored by emerge" - ignore "*._cfg*" + ignore "._cfg*" nl fi @@ -149,6 +149,7 @@ writefile () { ignore "cups/subscriptions.conf" ignore "cups/subscriptions.conf.O" ignore "fake-hwclock.data" + ignore "check_mk/logwatch.state" nl comment "editor temp files" @@ -174,9 +175,9 @@ if [ -e "$file" ]; then fi fi realfile="$file" - if which tempfile >/dev/null 2>&1 || type -p tempfile >/dev/null 2>&1; then + if which tempfile >/dev/null 2>&1 || type tempfile >/dev/null 2>&1; then tempfile="tempfile" - elif which mktemp >/dev/null 2>&1 || type -p mktemp >/dev/null 2>&1; then + elif which mktemp >/dev/null 2>&1 || type mktemp >/dev/null 2>&1; then tempfile="mktemp" else echo "etckeeper warning: can't find tempfile or mktemp" >&2 @@ -184,7 +185,7 @@ if [ -e "$file" ]; then file=$($tempfile) ( skipping= - while read line; do + while read -r line; do if echo "$line" | grep -q "$managed_by_etckeeper"; then if [ ! "$skipping" ]; then skipping=1