Compare commits

...

80 Commits

Author SHA1 Message Date
geaaru 4b5d3487c1 Merge pull request #24 from Sabayon/develop
New features
2019-11-06 14:43:02 +01:00
Daniele Rondina 2478662e00 builder: fix pkg version regex 2019-11-06 14:38:15 +01:00
Daniele Rondina 3e2a148a0b dynlink-scanner: qfile -e option is now -v 2019-10-27 13:38:51 +01:00
Daniele Rondina e569b59699 builder: Use last version or matching version for deps 2019-10-20 00:32:45 +02:00
Daniele Rondina 9f16462453 builder: Support previous implementation when dep_ignore_versions is disable 2019-10-07 17:33:50 +02:00
Daniele Rondina 8f5578b7f3 builder: review dependencies calculation
* Add support for env DEPENDENCY_IGNORE_VERSIONS for
  discard version of the packages to install as dependencies

* Add debugging log of installed equo repositories
2019-10-06 23:59:59 +02:00
Ettore Di Giacinto 1853c68b0d Merge pull request #23 from Sabayon/develop
Merge Develop
2019-09-11 20:31:26 +02:00
Ettore Di Giacinto 46204e0562 Merge pull request #21 from Sabayon/broken-links
Add sabayon-brokenlinks script
2019-09-11 20:30:15 +02:00
Daniele Rondina 460101a985 sabayon-brokenlinks: Use FORCE/--force instead of --force-manual 2019-09-11 11:45:37 +02:00
geaaru 7c059c3c9a Merge pull request #22 from gktrk/typo-fix
sabayondevkit-functions.sh: fix a typo, s/of/or/
2019-09-10 10:49:27 +02:00
Göktürk Yüksek e274ddffa3 sabayondevkit-functions.sh: fix a typo, s/of/or/ 2019-09-09 10:28:17 -04:00
Daniele Rondina e7aade22a0 sabayon-brokenlinks: Use USE_EQUO instead of GENTOO_TOOL env 2019-08-23 23:12:32 +02:00
Daniele Rondina d72e8c220b sabayon-brokenlinks: Minor fix on message 2019-08-23 15:02:25 +02:00
Daniele Rondina 280a665707 sabayon-brokenlinks: Add support for libs *.a 2019-08-23 14:59:19 +02:00
Daniele Rondina 631072d2a5 sabayon-brokenlinks: Use equo by default as tool 2019-08-21 18:41:32 +02:00
Daniele Rondina 4839c818de sabayon-brokenlinks: Review with cli arguments support 2019-08-13 15:33:11 +02:00
Daniele Rondina 11977d3afd sabayon-brokenlinks: Integrate automatic remove of broken links 2019-08-12 17:09:30 +02:00
Daniele Rondina 5972c0137f sabayon-brokenlinks: WIP 2019-08-09 19:45:05 +02:00
Ettore Di Giacinto 3be4345ae4 Merge pull request #19 from Sabayon/develop
builder: Add support for git portage tarball
2019-04-27 15:57:22 +02:00
Daniele Rondina 286533e74e builder: Use rsync instead of cp on copy git portage 2019-04-03 18:16:43 +02:00
Daniele Rondina a3f9796c6d builder: Add support for git portage tarball 2019-03-22 22:06:29 +01:00
Ettore Di Giacinto 1921cae295 Extract common func to setup perms, fix git3 perms 2018-09-26 20:14:13 +02:00
Ettore Di Giacinto 3322c5aa17 Make non fatal equo install deps 2018-07-28 18:14:35 +02:00
Ettore Di Giacinto 95ffe4d49d Add hook script function 2018-07-22 17:24:36 +02:00
Ettore Di Giacinto 59855f3bb1 Be quiet also on emerge --sync 2018-07-22 16:46:25 +02:00
Ettore Di Giacinto d151a77e51 Prefer long syntax option 2018-07-22 15:47:43 +02:00
Ettore Di Giacinto 8fda356c53 Also include summary in injected_targets 2018-07-21 21:38:42 +02:00
Ettore Di Giacinto 69ee6dfefa Add LICENSE 2018-07-21 18:33:06 +02:00
Ettore Di Giacinto 9be88688bc Do not die on failed enman commands
- Also print a short summary of compilation result
- Add KEEP_GOING env variable,
  if disabled a failure in split install makes the build fail
2018-07-21 18:33:06 +02:00
Ettore Di Giacinto 47aa0c3cbf Merge pull request #18 from Sabayon/fix-enman-add
Tuning enman repos management and add debug stuff
2018-06-24 12:40:26 +02:00
Geaaru 09f618043d Tuning enman repos management and add debug stuff 2018-06-15 10:28:23 +02:00
Ettore Di Giacinto 66284024a2 Use new eit options 2018-06-02 13:38:31 +02:00
Ettore Di Giacinto 64f8ee54a3 functions: make /opt/sabayon-build/ configurable 2018-02-15 00:07:41 +01:00
Ettore Di Giacinto 6cc8d3d7ae switch default profile 2018-02-03 22:56:16 +01:00
Ettore Di Giacinto 7512a7f184 push experimental sabayon-commit 2018-01-23 21:51:28 +01:00
Ettore Di Giacinto bdd6ffac8c Merge pull request #17 from geaaru/fix_builder_debug
[builder] Fix print of $remove_layman_overlay
2018-01-17 17:52:22 +01:00
Geaaru b42ef2feb7 [builder] Fix print of $remove_layman_overlay 2018-01-17 09:31:13 +01:00
Ettore Di Giacinto cf77609a7b Merge pull request #16 from geaaru/documentation
Add documentation
2018-01-15 18:42:33 +01:00
Geaaru dc05aace0b Add documentation 2018-01-15 15:45:13 +01:00
Ettore Di Giacinto 928d6da693 Refactorize and quote package when getting deps of package 2017-07-30 01:43:17 +02:00
Ettore Di Giacinto 5c927a25c6 Refactorizations 2017-07-30 01:26:11 +02:00
Ettore Di Giacinto 813148303c Add support for new options exposed in builder
- INTERNAL_BUILDER: swaps the builder supplied in the env var with the one executed in the container
- BUILDER_VERBOSE: enable verbose mode
- SHARE_WORKSPACE: enable sharing of the build directory with the container
- PRE_SCRIPT/POST_SCRIPT: absolute paths of scripts that have to be executed in the container
2017-07-30 01:18:37 +02:00
Ettore Di Giacinto 5a3be7c0f1 Add support for pre_script and post_script, executed before and after the build
Also add support for package major/minor syntax and verbose option
2017-07-30 01:17:03 +02:00
Ettore Di Giacinto 6fbd3f4f22 functions: remove sudo calls 2017-07-09 11:25:46 +02:00
Ettore Di Giacinto 0be7f76824 sabayon-buildpackages: add support for INTERNAL_BUILDER, swap the builder image with the local installed one 2017-07-09 11:25:28 +02:00
Ettore Di Giacinto 7b2adad931 builder: include also injected_packages in overlays detection 2017-06-18 12:58:21 +02:00
Ettore Di Giacinto 6283b34be8 builder: parse overlays also from package list 2017-06-18 12:26:07 +02:00
Ettore Di Giacinto 11812ff1a2 move QA checks on the bottom, enhance output display and fix depchecking when package contain overlay name 2017-06-05 21:13:30 +02:00
Ettore Di Giacinto e31a06cee3 add gitignore 2017-05-21 14:33:36 +02:00
Ettore Di Giacinto b91870c72d sabayon-buildpackages: add support for DETECT_OBSOLETE and TARGET_OVERLAY 2017-05-21 14:16:04 +02:00
Ettore Di Giacinto b1726fdb4d builder: add DETECT_OBSOLETE 2017-05-21 14:13:59 +02:00
Ettore Di Giacinto 6d0f26ceb7 sabayon-detectobsolete: more perlish 2017-03-29 14:46:34 +02:00
Ettore Di Giacinto 49ba945b63 builder: running emerge -C anyway 2017-03-29 14:19:39 +02:00
Ettore Di Giacinto f55338b552 sabayon-detectobsolete: utility to list possible obsolete packages in overlays 2017-03-29 14:19:39 +02:00
Ettore Di Giacinto 0c964e4b64 builder: PRETEND changes
move up the adjustment of emerge/equo arguments, avoid to copy artifacts when PRETEND mode is on
2017-03-22 14:40:27 +01:00
Ettore Di Giacinto 5f75f6e64b builder: do not emerge preserved rebuild if PRETEND is set 2017-03-20 11:19:17 +01:00
Ettore Di Giacinto 9fd7ce2582 builder: PRETEND avoids also package removals. 2017-03-20 11:17:59 +01:00
Ettore Di Giacinto a62baaf0ea builder: PRETEND, add -p to equo/emerge arguments 2017-03-19 11:50:09 +01:00
Ettore Di Giacinto bf78080418 Revert "builder: add PRETEND environment variable"
This reverts commit 575ec04147.
2017-03-18 13:54:12 +01:00
Ettore Di Giacinto 218dfa9dcd sabayon-buildpackages: add PRETEND support 2017-03-15 14:12:12 +01:00
Ettore Di Giacinto 575ec04147 builder: add PRETEND environment variable 2017-03-15 11:50:41 +01:00
Ben Roberts 903aa0fa0d add SYS_PTRACE capability to docker build, to prevent sandbox ptrace errors 2016-11-02 11:21:03 +00:00
Ettore Di Giacinto ada5793612 sabayondevkit-functions: set -e and make non-fatal commands return always true 2016-11-02 12:11:47 +01:00
Ettore Di Giacinto af32293577 fix syntax errors 2016-10-27 01:42:26 +02:00
Ben Roberts 411c142f00 Fixup perlisms 2016-10-24 10:48:36 +01:00
Ben Roberts 9446715e1a Attempt to only add/remove enman repos that need action
Since enman was changed to provide exit status 1 [1] if the requested
operation failed, builder attempting to re-add an already existing repo
caused the entire build to fail. Rather than run the command and hope
for the best, this commit changes builder to obtain a list of already
installed repositories, and only add/remove the requested repos that
aren't already in the correct state.

[1] Sabayon/enman@7f3a6c88
2016-10-24 09:16:35 +01:00
Ettore Di Giacinto 890206ba80 sabayondevkit-functions.sh: add -u as default emerge option to build_category_installed and build_obsolete 2016-10-11 14:48:01 +02:00
mudler 79567a647b sabayon-maint-helper: acquire lock before execution 2016-10-10 16:44:47 +02:00
Ettore Di Giacinto 0769169cc6 sabayondevkit-functions.sh: fix typo 2016-10-10 14:14:07 +02:00
mudler 03b7b4fd18 sabayon-maint-helper: fixes 2016-10-10 12:06:56 +02:00
mudler 39f437f0aa adding sabayon-maint-helper 2016-10-10 12:01:33 +02:00
Ben Roberts 4747e43752 Enable RSS feeds and changelogs on repos 2016-10-02 18:36:46 +01:00
Ettore Di Giacinto 2d1c16e76e builder: EQUO_SPLIT_INSTALL default is now 0 2016-09-22 00:05:52 +02:00
Ben Roberts 4dbbc6b34a Strip out package itself from package_deps
Package_deps returned the target package in the output which is not
strictly true (the package is not a dependency of itself really).
In calcuate_missing also means we install the package once using entropy
(if available), and then immediately replace it with portage,
which just wastes effort.

It breaks installation in the cases where the older equo version blocks the
new portage version (e.g. change of slot).

This should remove the target package from the list of packages to be
installed with entropy.
2016-09-13 22:08:43 +01:00
Ettore Di Giacinto 36999309c2 builder: adding checks to fix a broken layman configuration 2016-09-13 10:06:05 +02:00
Ettore Di Giacinto 1ef3938a96 builder: enhance debug of profile setting 2016-09-12 13:17:29 +02:00
Ben Roberts 9119c8c973 Merge branch 'prune_virtual_fixes' 2016-09-11 17:41:08 +01:00
Ben Roberts 632053fc2f Print the builder docker commandline to aid in debugging 2016-09-11 17:19:11 +01:00
Ben Roberts 6fc14f7605 Expose /vagrant from the buildbox into the docker container to aid in debugging 2016-09-11 17:18:49 +01:00
Ben Roberts 4268b06305 Fix virtual pruning by switching from state to global variable for package_deps cache 2016-09-11 17:18:20 +01:00
16 changed files with 1613 additions and 204 deletions
+1
View File
@@ -0,0 +1 @@
*.bak
+6
View File
@@ -0,0 +1,6 @@
Copyright authors:
------
Ettore Di Giacinto <mudler@gentoo.org> ( original author )
Ben Roberts <optiz0r@sabayon.org>
Daniele Rondina <geaaru@sabayon.org>
+178
View File
@@ -0,0 +1,178 @@
# Scripts
Devkit contains a list of scripts used by Sabayon for building process and
for manage package injection to repositories.
## List of files
* `depcheck`: a tool to report both undeclared and potentially-unused
runtime dependencies.
* `dynlink-scanner`: a tool for retrieve list of linked libraries used
by a package. Use try_dlopen execute binary.
* `sabayon-brokenlibs`: a tool for retrieve list of all dependencies
of a binary through equo and equery tools. Print list of dependencies.
This script depends on:
- equo
- equery
- sabayondevkit-functions.sh
* `sabayon-buildpackages`: Script for Spawning the package builder container.
This script depends on:
- sabayondevkit-functions.sh
* `sabayon-bz2brokenlibs`: Unpack bz2 tarball and execute sabayon-brokenlibs
to every files unpacked.
This script depends on:
- sabayondevkit-functions.sh
* `sabayon-createrepo`: Script for spawning container for commit packages to
a repository and create it if doesn't exists.
This script depends on:
- sabayondevkit-functions.sh
* `sabayon-createrepo-cleanup`: Script for spawning container for cleanup
expired packages from a repository.
This script depends on:
- sabayondevkit-functions.sh
* `sabayon-createrepo-remove`: Script for spawning container for remove a list
of packages from a repository.
This script depends on:
- sabayondevkit-functions.sh
* `sabayon-detectobsolete`: Perl script for found obsolete packages in an
overlay. Possible options are: --arch, --overlay and --verbose.
This script depends on:
- querypkg
* `sabayon-entropypreservedlibs`: Perl script for retrieve list of packages that has
dependencies to old libraries.
See also [here](https://wiki.sabayon.org/index.php?title=En:Sabayon_Devkit#sabayon-entropypreservedlibs)
* `sabayon-help-info`: Bash script for grabbing system information and post to
sabayon pastebin.
This script depends on:
- pastebunz
* `sabayon-maint-helper`: Script for builder boxes maintenance.
Possible options are:
- `--installed`: For upgrades all the packages installed in the box.
- `--obsolete`: Upgrade ONLY the packages that are listed obsolete
- `--all`: Tries to upgrade all packages
- `--category`: Tries to upgrade/install all packages present in a specified category.
This script depends on:
- sabayondevkit-functions.sh
* `sabayon-tbz2extract`: Python script for extract tbz2 package.
* `sabayon-tbz2truncate`: Python script for truncate tbz2 package
* `sabayon-xpakextract`: Python script for convert tbz2 in .xpak file
* `builder`: Perl script for build packages.
## Scripts Variables
### sabayon-createrepo
| Env Variable | Default | Description |
|--------------|---------|-------------|
| SAB_WORKSPACE | $PWD | Workspace directory |
| REPOSITORY_NAME | default | Name of the repository to create. |
| REPOSITORY_DESCRIPTION | My Sabayon repository | Description of the repository to create. |
| DOCKER_IMAGE | sabayon/eit-amd64 | Docker image to use on create repository |
| PORTAGE_ARTIFACTS | $SAB_WORKSPACE/portage_artifacts | Directory of the artifacts to insert on repository |
| OUTPUT_DIR | $SAB_WORKSPACE/entropy_artifacts | Output directory of the repository |
| DOCKER_OPTS | --ti --rm | Docker options to pass on run container. |
| PUBKEY | - | Define file to mount as volume to /etc/entropy/mykeys/key.pub |
| PRIVATEKEY | - | Define file to mount as volume to /etc/entropy/mykeys/private.key |
### sabayon-createrepo-cleanup
| Env Variable | Default | Description |
|--------------|---------|-------------|
| SAB_WORKSPACE | $PWD | Workspace directory |
| REPOSITORY_NAME | default | Name of the repository to clean. |
| REPOSITORY_DESCRIPTION | My Sabayon repository | Description of the repository to clean. |
| DOCKER_IMAGE | sabayon/eit-amd64 | Docker image to use on clean repository |
| OUTPUT_DIR | $SAB_WORKSPACE/entropy_artifacts | Directory of the repository |
| DOCKER_OPTS | --ti --rm | Docker options to pass on run container. |
| PUBKEY | - | Define file to mount as volume to /etc/entropy/mykeys/key.pub |
| PRIVATEKEY | - | Define file to mount as volume to /etc/entropy/mykeys/private.key |
### sabayon-createrepo-remove
| Env Variable | Default | Description |
|--------------|---------|-------------|
| SAB_WORKSPACE | $PWD | Workspace directory |
| REPOSITORY_NAME | default | Name of the repository where remove packages. |
| REPOSITORY_DESCRIPTION | My Sabayon repository | Description of the repository. |
| DOCKER_IMAGE | sabayon/eit-amd64 | Docker image to use on clean repository |
| OUTPUT_DIR | $SAB_WORKSPACE/entropy_artifacts | Directory of the repository |
| DOCKER_OPTS | --ti --rm | Docker options to pass on run container. |
| PUBKEY | - | Define file to mount as volume to /etc/entropy/mykeys/key.pub |
| PRIVATEKEY | - | Define file to mount as volume to /etc/entropy/mykeys/private.key |
### sabayon-buildpackages
| Env Variable | Default | Description |
|--------------|---------|-------------|
| SAB_WORKSPACE | $PWD | Workspace directory |
| DOCKER_IMAGE | sabayon/builder-amd64 | Docker image to use for compilation |
| SAB_ARCH | intel | Name of arch to use defined on build Sabayon project |
| DOCKER_PULL_IMAGE | 0 | If try to pull last image (1) or use local version |
| MAKE_CONF | $SAB_WORKSPACE/specs/make.conf | Path of make.conf custom to supply on compilation |
| OUTPUT_DIR | $SAB_WORKSPACE/portage_artifacts/ | Where are written portage artifacts compiled |
| LOCAL_OVERLAY | $SAB_WORKSPACE/local_overlay/ | Directory to use for supply local overlay as volume of the image on compilation |
| ENTROPY_REPOSITORY | main | Sabayon repository to use: weekly, main or testing |
| DOCKER_OPTS | --ti --rm --cap-add=SYS_PTRACE | Options to use on running Docker image |
| PORTAGE_CACHE | - | If present permit to supply host portage directory to container |
| BUILDER_PROFILE | - | Permit to choice Gentoo Profile to use |
| EMERGE_SPLIT_INSTALL | - | Possible values are 0/1. |
| BUILDER_JOBS | 1 | Define number of jobs for emerge phase. |
| USE_EQUO | 1 | Use equo for install and align compilation environment. |
| PRESERVED_REBUILD | 0 | Execute (emerge @preserve-rebuild) |
| EQUO_INSTALL_ATOMS | 1 | Try to install existing dependencies from equo repositories |
| DEPENDENCY_SCAN_DEPTH | 2 | Define depth level for dependencies calculation |
| FEATURES | "parallel-fetch protect-owned compressdebug splitdebug -userpriv" | Override Gentoo FEATURES variable |
| EMERGE_DEFAULTS_ARGS | "--accept-properties=-interactive --verbose --oneshot --complete-graph --buildpkg" | Override default emerge options |
| EQUO_INSTALL_VERSION | 0 | |
| EQUO_SPLIT_INSTALL | 0 | |
| ARTIFACTS_DIR | - | Additional directory where copy artifacts |
| ENTROPY_REPOSITORY | main | Choice repository to use. Values: main, weekly, testing |
| SKIP_PORTAGE_SYNC | 0 | Skip portage sync before compilation |
| EQUO_MIRRORSORT | 1 | Execute equo mirrorsort before compilation |
| WEBRSYNC | 0 | Use webrsync instead of defult rsync |
| ENMAN_REPOSITORIES | - | Define list of enman repositories to add |
| REMOVE_ENMAN_REPOSITORIES | - | Define list of enman repositories to remove |
| DISTFILES | - | Permit to mount volume to /usr/portage/distfiles directory and speedup download phase if packages are already available |
| INTERNAL_BUILDER | - | Define a host builder to use instead of docker builder binary |
| ENTROPY_DOWNLOADED_PACKAGES | - | Mount volume to /var/lib/entropy/client/packages to use caching on download equo packages |
| DISTCC_HOSTS | - | Override Gentoo DISTCC_HOSTS variable to use DISTCC |
| PRUNE_VIRTUALS | 0 | Prune virtuals packages to avoid conflicts. |
| REPOSITORY_NAME | - | Add single enman repository (for compilation of scr repository itself) |
| ENMAN_ADD_SELF | 0 | If add with enman repository define on REPOSITORY_NAME variable |
| EQUO_MASKS | - | Define a list of packages to mask with equo mask command |
| EQUO_UNMASKS | - | Define a list of packages to unmask with equo unmask command |
| EMERGE_REMOVE | - | Define a list of packages to remove with emerge -C command before compilation |
| REMOTE_OVERLAY | - | Define a list of overlay to add before compilation |
| REMOVE_LAYMAN_OVERLAY | - | Define a list of overlays to remove before compilation |
| REMOTE_REMOTE_OVERLAY | - | Define a list of files under /etc/portage to remove |
| QA_CHECKS | - | Execute quality check on packages. repoman, dynlink-scanner and depcheck |
| REMOTE_CONF_PORTDIR | - | If defined permit to define a git repository to clone under /etc/portage directory. |
| REMOTE_PORTDIR | - | If defined permit to define a git repository to clone under /usr/portage directory. |
| ETP_NOCACHE | - | Define ETP_NOCACHE variable on environment |
| PRETEND | 0 | If set to 1 append -p option to emerge commands. |
| BUILDER_VERBOSE | 0 | If set to 1 add verbose to builder program. |
| DETECT_OBSOLETE | 0 | Execute script sabayon-detectobsolete to target overlay to found obsolete ebuilds. |
| TARGET_OVERLAY | - | Define overlay where execute sabayon-detectobsolete script. Require DETECT_OBSOLETE variable set to 1. |
| LOCAL_OVERLAY | - | Define a directory to mount as volume to /usr/local/local_portage |
| SHARE_WORKSPACE | - | If defined mount volume defined on SAB_WORKSPACE variable to /devkit-workspace |
| PRE_SCRIPT | - | Mount a custom script to /pre-script execute before compilation |
| POST_SCRIPT | - | Mount a custom script to /post-script execute after packages compilation |
| MAKE_CONF | - | If defined mount defined file to /etc/portage/make.conf.custom and define variable MAKE_CONF to bet to mounted path. |
+528 -167
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -46,5 +46,5 @@ for cpv in `portageq match $ROOT/ $1`; do
# For each file that belongs to package
# run dynlink-scanner --linking-deps <file> to obtain its linking dependencies
# Assign all linking deps to packages and print package names
qfile -eR $ROOT `portageq contents $ROOT/ $cpv | xargs -r -L 1 "$0" --linking-deps` | cut -f1 -d' ' | sort -u
qfile -vR $ROOT `portageq contents $ROOT/ $cpv | xargs -r -L 1 "$0" --linking-deps` | cut -f1 -d' ' | sort -u
done
+14
View File
@@ -1,4 +1,18 @@
#!/bin/bash
# Copyright 2016-2018 See AUTHORS file
#
# 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, either version 3 of the License, or
# (at your option) any later version.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
PACKAGES=()
bin=$1
+462
View File
@@ -0,0 +1,462 @@
#!/bin/bash
# Authors: Sabayon Team 2019
set -e
# Accepted values: x86_64, armv7l
export SAB_ARCH="${SAB_ARCH:-}"
export DRY_RUN=${DRY_RUN:-0}
export DEBUG="${DEBUG:-}"
export FORCE="${FORCE:-0}"
export USE_EQUO="${USE_EQUO:-1}"
declare -a MANUALLY_REMOVED_LINKS
declare -a BROKEN_LINKS2REMOVE
log() {
local with_dashes=$1
shift || true
[ "$with_dashes" != 1 ] || \
echo "==============================================================="
echo "$@"
[ "$with_dashes" != 1 ] || \
echo "==============================================================="
}
summary() {
local msg="SAB_ARCH = ${SAB_ARCH}
EXAMINED_LIBDIRS = ${EXAMINED_LIBDIRS}
DRY_RUN = ${DRY_RUN}
USE_EQUO = ${USE_EQUO}
FORCE = ${FORCE}"
log 1 "$msg"
}
check_arch() {
if [ -z "${SAB_ARCH}" ] ; then
SAB_ARCH=$(uname -m)
fi
[[ "${SAB_ARCH}" != "x86_64" && "${SAB_ARCH}" != "armv7l" ]] && {
log 1 "Unsupported arch ${SAB_ARCH}."
exit 1
}
export SAB_ARCH
}
search_pkg() {
local basename=$1
# passed by reference
local -n p="$2"
local -n libdir="$3"
local lib="$4"
local l=""
local ll=""
# Try to search for package
if [ "${USE_EQUO}" = "0" ] ; then
p=$(equery -N -q -C belongs ${lib}/$basename --early-out || true)
else
p=$(equo q belongs ${lib}/${basename} -q || true)
fi
if [ -z "$p" ] ; then
for l in "/usr/lib64" "/usr/lib32" "/usr/lib" ; do
if [ "$lib" = "$l" ] ; then
ll="${l/\/usr\///}"
break
fi
done
if [ -n "${ll}" ] ; then
if [ "${USE_EQUO}" = "0" ] ; then
p=$(equery -N -q -C belongs ${ll}/$basename --early-out || true)
else
p=$(equo q belongs ${ll}/${basename} -q || true)
fi
fi
fi
if [ -z "$p" ] ; then
libdir=""
fi
}
detect_libs_dir() {
local libs=""
if [ -n "$SCANDIR" ] ; then
libs=$SCANDIR
else
if [ "${SAB_ARCH}" = "x86_64" ] ; then
if [ -d "/usr/lib32" ] ; then
libs="/usr/lib32 /lib32"
fi
if [ -d "/usr/lib64" ] ; then
libs="$libs /usr/lib64 /lib64"
fi
else
if [ -d "/usr/lib" ] ; then
libs="/usr/lib /lib"
fi
fi
if [ -z "$libs" ] ; then
log 0 "Error on detect libraries directories."
exit 1
fi
fi
EXAMINED_LIBDIRS=$libs
export EXAMINED_LIBDIRS
}
examine_libs() {
local lib=""
local file=""
local broken_files=""
log 1 "The exam could be long sorry for the wait."
for lib in ${EXAMINED_LIBDIRS} ; do
broken_files=""
log 1 "Checking directory $lib..."
broken_files=$(find $lib -type l -and -xtype l -and -name *.so* -or -name *.a -and -type l -and -xtype l 2>/dev/null || true )
[ -z "$DEBUG" ] || {
find $lib -type l -and -xtype l -and -name *.so* -or -name *.a -and -type l -and -xtype l || true
}
for file in ${broken_files} ; do
examine_file "${file}" "${lib}"
done
done
}
examine_file() {
local f=$1
local res=""
local libdir=$2
local is_present_pkg=1
local pkg=""
[ -z "$DEBUG" ] || log 1 "Analyze file $f"
local base=$(basename $1)
local targetlink=$(readlink $f)
local link2remove=false
local link2fix=false
local newlibdir=""
local tmp=""
local current_link=""
log 1 "Broken link $f => $targetlink"
# Check if file is without revision (es. libudev.so)
res=$(perl -e "if ('$base' =~ /(.so|.a$)/) { print '1' }")
if [ -n "$res" ] ; then
#
#echo "BASE = $base"
search_pkg "$base" pkg newlibdir "$lib"
if [ -z "$pkg" ] ; then
MANUALLY_REMOVED_LINKS+=( "$f" )
return
else
if [ -n "$newlibdir" ] ; then
log 0 "Link $base available under $newlibdir. I remove it."
link2remove=true
fi
fi
if [ "${USE_EQUO}" = "0" ] ; then
res=$(qlist -IC $pkg 2>/dev/null | grep $f | wc -l)
else
res=$(equo q files $pkg -q | grep $f | wc -l)
fi
if [ "$res" = 1 ] ; then
link2fix=true
echo "Link $f related to existing package. Try to reinstall $pkg."
else
MANUALLY_REMOVED_LINKS+=( "$f" )
fi
log 0 "Link $f of the package $pkg"
else
# Check if file has only one revision number (es. libudev.so.0)
res=$(perl -e "if ('$base' =~ /(.so[.][\d]+$)/) { print '1' }")
if [ -n "$res" ] ; then
search_pkg "$base" pkg newlibdir "$lib"
if [ -z "$pkg" ] ; then
# Try to search package with .so
base=$(echo "$base" | awk 'match($0, /.so/) { print substr($0, 0, RSTART+2) }')
search_pkg "$base" pkg newlibdir "$lib"
if [ -z "$pkg" ] ; then
log 0 "No package found for link $f."
MANUALLY_REMOVED_LINKS+=( "$f" )
return
fi
if [ -n "$newlibdir" ] ; then
log 0 "Link $base available under $newlibdir. I remove it."
link2remove=true
else
# POST: we have a broken link or old link
current_link=$(readlink $lib/$base)
log 0 "Link $f related to package $pkg (with an updated version $current_link). I remove it."
link2remove=true
fi
else
log 0 "Link $f of the package $pkg"
if [ -n "$newlibdir" ] ; then
log 0 "Link $base available under $newlibdir. I remove it."
link2remove=true
else
# Check new
if [ "${USE_EQUO}" = "0" ] ; then
res=$(qlist -IC $pkg 2>/dev/null | grep $f | wc -l)
else
res=$(equo q files $pkg -q | grep $f | wc -l)
fi
if [ "$res" = 1 ] ; then
link2fix=true
echo "Link $f related to existing package. Try to reinstall $pkg."
else
MANUALLY_REMOVED_LINKS+=( "$f" )
fi
fi
fi
else
# Check if file has only one revision number (es. libudev.so.0.63)
res=$(perl -e "if ('$base' =~ /(.so[.][\d]+[.][\d]+$)/) { print '1' }")
if [ -n "$res" ] ; then
search_pkg "$base" pkg newlibdir "$lib"
if [ -z "$pkg" ] ; then
base=$(echo "$base" | awk 'match($0, /.so[.][0-9]+/) { print substr($0, 0, RSTART+RLENGTH-1) }')
search_pkg "$base" pkg newlibdir "$lib"
if [ -z "$pkg" ] ; then
log 0 "No package found for link $f."
MANUALLY_REMOVED_LINKS+=( "$f" )
return
fi
if [ -n "$newlibdir" ] ; then
log 0 "Link $base available under $newlibdir. I remove it."
link2remove=true
else
current_link=$(readlink $lib/$base)
log 0 "Link $f related to package $pkg (with an updated version $current_link). I remove it."
link2remove=true
fi
else
log 0 "Link $f of the package $pkg"
if [ -n "$newlibdir" ] ; then
log 0 "Link $base available under $newlibdir. I remove it."
link2remove=true
else
# Check new
if [ "${USE_EQUO}" = "0" ] ; then
res=$(qlist -IC $pkg 2>/dev/null | grep $f | wc -l)
else
res=$(equo q files $pkg -q | grep $f | wc -l)
fi
if [ "$res" = 1 ] ; then
link2fix=true
echo "Link $f related to existing package. Try to reinstall $pkg."
else
MANUALLY_REMOVED_LINKS+=( "$f" )
fi
fi
fi
else
echo "Link $f not supported".
MANUALLY_REMOVED_LINKS+=( "$f" )
fi
fi
fi
if [ $link2remove = true ] ; then
BROKEN_LINKS2REMOVE+=( "$f" )
fi
}
rm_broken_links() {
for l in ${BROKEN_LINKS2REMOVE[@]} ; do
if [ "$DRY_RUN" = 0 ]; then
rm -vf ${l}
else
echo "rm -vf ${l}"
fi
done
}
print_links2remove() {
for l in ${MANUALLY_REMOVED_LINKS[@]} ; do
if [ "$FORCE" = 1 ] ; then
if [ "$DRY_RUN" = 0 ] ; then
rm -vf ${l}
else
echo "force: rm -vf ${l}"
fi
else
echo "rm -vf ${l}"
fi
done
}
parse_args() {
help_message() {
echo "Sabayon Broken Links analyzer.
Sabayon Team (2019)
$0 [opts]
Available options:
-h|--help This message.
--dry-run Dry run execution.
--force Force remove of the links to remove manually.
--scandir Define a specific directory to analyze
--gentoo Use gentoo tool instead of equo.
-d|--debug Enable debug stuff.
Environment variables:
DRY_RUN To use instead of --dry-run option. Values: 0 or 1.
DEBUG Enable debug output.
USE_EQUO To use instead of --gentoo option.
FORCE To use instead of --force.
"
}
local short_opts="hd"
local long_opts="help dry-run force debug scandir: gentoo"
$(set -- $(getopt -u -q -a -o "$short_opts" -l "$long_opts" -- "$@"))
while [ $# -gt 0 ] ; do
case "$1" in
-h|--help)
help_message
exit 1
;;
-d|--debug)
DEBUG=1
;;
--force)
FORCE=1
;;
--dry-run)
DRY_RUN=1
;;
--scandir)
SCANDIR="$2"
shift
;;
--gentoo)
USE_EQUO=0
;;
--)
;;
*)
echo "Invalid parameter $1."
exit 1
;;
esac
shift
done
unset -f help_message
}
main() {
parse_args "$@"
log 1 "sabayon-brokenlinks: Examine system broken links"
check_arch
detect_libs_dir
summary
if [[ "$(id -u)" != "0" && "${DRY_RUN}" != "1" ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
parse_args
unset -f parse_args
if [ "${USE_EQUO}" = "0" ] ; then
which equery 2>&1 >/dev/null || {
echo "equery tool is needed. Please install app-portage/gentoolkit."
exit 1
}
which qlist 2>&1 >/dev/null || {
echo "qlist tool is needed. Please install app-portage/portage-utils."
exit 1
}
fi
examine_libs
if [ ${#BROKEN_LINKS2REMOVE[@]} -gt 0 ] ; then
log 1 "Remove Broken Links!"
rm_broken_links
fi
if [ ${#MANUALLY_REMOVED_LINKS[@]} -gt 0 ] ; then
if [ "${FORCE}" = 1 ] ; then
log 1 "Hereinafter, links removed with force:"
else
log 1 "Hereinafter, links to manually remove:"
fi
print_links2remove
fi
echo "All Done."
}
main $@
+28 -3
View File
@@ -1,4 +1,20 @@
#!/bin/bash
# Copyright 2016-2018 See AUTHORS file
#
# 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, either version 3 of the License, or
# (at your option) any later version.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
set -e
SAB_WORKSPACE="${SAB_WORKSPACE:-$PWD}"
DOCKER_IMAGE="${DOCKER_IMAGE:-sabayon/builder-amd64}"
@@ -8,7 +24,7 @@ MAKE_CONF="${MAKE_CONF:-$SAB_WORKSPACE/specs/make.conf}"
OUTPUT_DIR="${OUTPUT_DIR:-$SAB_WORKSPACE/portage_artifacts/}"
LOCAL_OVERLAY="${LOCAL_OVERLAY:-$SAB_WORKSPACE/local_overlay}"
ENTROPY_REPOSITORY="${ENTROPY_REPOSITORY:-main}" # Can be weekly, main, testing
DOCKER_OPTS="${DOCKER_OPTS:--ti --rm}"
DOCKER_OPTS="${DOCKER_OPTS:--ti --rm --cap-add=SYS_PTRACE}"
. /sbin/sabayondevkit-functions.sh
@@ -41,6 +57,7 @@ docker_volumes=( -v "$OUTPUT_DIR:/usr/portage/packages" )
[ -z "$ENMAN_REPOSITORIES" ] || docker_env+=(-e "ENMAN_REPOSITORIES=$ENMAN_REPOSITORIES")
[ -z "$REMOVE_ENMAN_REPOSITORIES" ] || docker_env+=(-e "REMOVE_ENMAN_REPOSITORIES=$REMOVE_ENMAN_REPOSITORIES")
[ -z "$DISTFILES" ] || docker_volumes+=(-v "$DISTFILES:/usr/portage/distfiles")
[ -z "$INTERNAL_BUILDER" ] || docker_volumes+=(-v "$INTERNAL_BUILDER:/usr/sbin/builder")
[ -z "$ENTROPY_DOWNLOADED_PACKAGES" ] || docker_volumes+=(-v "$ENTROPY_DOWNLOADED_PACKAGES:/var/lib/entropy/client/packages")
[ -z "$DISTCC_HOSTS" ] || docker_env+=(-e "DISTCC_HOSTS=$DISTCC_HOSTS")
[ -z "${PRUNE_VIRTUALS}" ] || docker_env+=(-e "PRUNE_VIRTUALS=$PRUNE_VIRTUALS")
@@ -56,7 +73,14 @@ docker_volumes=( -v "$OUTPUT_DIR:/usr/portage/packages" )
[ -z "$REMOTE_CONF_PORTDIR" ] || docker_env+=(-e "REMOTE_CONF_PORTDIR=$REMOTE_CONF_PORTDIR")
[ -z "$REMOTE_PORTDIR" ] || docker_env+=(-e "REMOTE_PORTDIR=$REMOTE_PORTDIR")
[ -z "$ETP_NOCACHE" ] || docker_env+=(-e "ETP_NOCACHE=$ETP_NOCACHE")
[ -z "$PRETEND" ] || docker_env+=(-e "PRETEND=$PRETEND")
[ -z "$BUILDER_VERBOSE" ] || docker_env+=(-e "BUILDER_VERBOSE=$BUILDER_VERBOSE")
[ -z "$DETECT_OBSOLETE" ] || docker_env+=(-e "DETECT_OBSOLETE=$DETECT_OBSOLETE")
[ -z "$TARGET_OVERLAY" ] || docker_env+=(-e "TARGET_OVERLAY=$TARGET_OVERLAY")
[ -d "$LOCAL_OVERLAY" ] && docker_volumes+=(-v "$LOCAL_OVERLAY:/usr/local/local_portage")
[ -z "$SHARE_WORKSPACE" ] || docker_volumes+=(-v "$SAB_WORKSPACE:/devkit-workspace")
[ -z "$PRE_SCRIPT" ] || docker_volumes+=(-v "$PRE_SCRIPT:/pre-script")
[ -z "$POST_SCRIPT" ] || docker_volumes+=(-v "$POST_SCRIPT:/post-script")
if [ -e $MAKE_CONF ]; then
echo "You specified a make.conf. I hope you know what are you doing"
@@ -76,11 +100,12 @@ if [ -d "$SAB_WORKSPACE"/specs ]; then
[ -e "$SAB_WORKSPACE"/specs/custom.env ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/custom.env:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.env")
[ -e "$SAB_WORKSPACE"/specs/custom.keywords ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/custom.keywords:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.keywords/99-custom.keywords")
[ -d "$SAB_WORKSPACE"/specs/env ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/env/:/opt/sabayon-build/conf/$SAB_ARCH/portage/env/")
[ -d "/vagrant" ] && docker_volumes+=(-v "/vagrant:/vagrant")
fi
echo "Spawning the package builder container for '$@'."
echo ""
#echo "docker run $DOCKER_OPTS ${docker_env[@]} ${docker_volumes[@]} $DOCKER_IMAGE $@"
echo "docker run $DOCKER_OPTS \"${docker_env[@]}\" \"${docker_volumes[@]}\" $DOCKER_IMAGE $@"
docker run $DOCKER_OPTS "${docker_env[@]}" "${docker_volumes[@]}" $DOCKER_IMAGE $@
docker run $DOCKER_OPTS "${docker_env[@]}" "${docker_volumes[@]}" $DOCKER_IMAGE "$@"
+15
View File
@@ -1,5 +1,20 @@
#!/bin/bash
# Copyright 2016-2018 See AUTHORS file
#
# 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, either version 3 of the License, or
# (at your option) any later version.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. /sbin/sabayondevkit-functions.sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+95
View File
@@ -0,0 +1,95 @@
#!/usr/bin/perl
# Copyright 2016-2018 See AUTHORS file
#
# 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, either version 3 of the License, or
# (at your option) any later version.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
use feature 'say';
use Cwd;
use File::Temp;
my $current_git_directory = qx|git rev-parse --show-toplevel 2>/dev/null|;
chomp $current_git_directory;
my $cwd = getcwd;
chdir($current_git_directory);
my $commit_message_tmpfile = File::Temp->new();
my @changed_files = qx|git status -s|;
my $n_changed_files = scalar @changed_files;
die "No files changed. Exiting." if $n_changed_files <= 0;
my %atoms = ();
sub _build_git_repo {
my ($file_name) = @_;
my $commit_message;
if ( $file_name
=~ /conf\/(home|intel|arm(arch|hfp|v6l|vtl))\/(entropy|portage|repo)\/(.*)/
)
{
$commit_message = "$1/$4: ";
}
elsif ( $filename eq
"conf/noarch/entropy/packages/packages.server.dep_blacklist" )
{
$commit_message = "dep_blacklist: ";
}
elsif ( $filename eq
"conf/noarch/entropy/packages/packages.server.dep_rewrite" )
{
$commit_message = "dep_rewrite: ";
}
if ($commit_message) {
print $commit_message_tmpfile $commit_message;
system( "git commit -eF " . $commit_message_tmpfile->filename );
unlink($commit_message_tmpfile) if -e $commit_message_tmpfile;
}
}
sub _overlay_git_repo {
die "If you are in the overlay, call me in the ebuild dir"
if $current_git_directory eq getcwd;
chdir($cwd);
die "I'm not pleased.. but you could force with --force"
if ( _system("repoman") && $ARGV[0] ne "--force" );
_system("repoman commit $ARGV[0]");
}
sub _system {
my $prog = shift;
my $rv = system( {$prog} $prog => @_ );
if ( $rv == -1 ) { say("Can't launch $prog: $!"); return 1; }
elsif ( my $s = $rv & 127 ) {
say("$prog died from signal $s");
return 1;
}
elsif ( my $e = $rv >> 8 ) { say("$prog exited with code $e"); return 1; }
return 0;
}
foreach my $file (@changed_files) {
chomp $file;
my @words = split( ' ', $file, 2 );
next if $words[0] eq "??"; # allow "dangling" files
my $file_name = $words[1];
if ( $file_name =~ /conf\/(intel|arm|noarch)/ ) {
_build_git_repo($file_name);
}
elsif ( $file_name =~ /\.ebuild/ ) {
_overlay_git_repo($file_name);
}
}
+20 -4
View File
@@ -1,4 +1,20 @@
#!/bin/bash
# Copyright 2016-2018 See AUTHORS file
#
# 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, either version 3 of the License, or
# (at your option) any later version.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
set -e
. /sbin/sabayondevkit-functions.sh
@@ -68,8 +84,8 @@ fi
eit key import \$repo /etc/entropy/mykeys/private.key /etc/entropy/mykeys/key.pub && { eit key sign \$repo || true; } && { echo "=== Repository key imported successfully ==="; }
echo "=== Injecting packages ==="
echo "Yes" | eit inject \${built_pkgs} || { echo "ouch unable to inject" && exit 3; }
echo "Yes Yes Yes" | eit commit --quick
eit inject --quick \${built_pkgs} || { echo "ouch unable to inject" && exit 3; }
eit commit --quick
echo "=== Pushing built packages locally ==="
eit push --quick --force
@@ -88,8 +104,8 @@ database-format = bz2
# disabled-eapis = 1,2
# expiration-based-scope = disable
# nonfree-packages-directory-support = disable
rss-feed = disable
changelog = disable
rss-feed = enable
changelog = enable
rss-name = packages.rss
rss-base-url = http://packages.sabayon.org/?quicksearch=
rss-website-url = http://www.sabayon.org/
+16
View File
@@ -1,4 +1,20 @@
#!/bin/bash
# Copyright 2016-2018 See AUTHORS file
#
# 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, either version 3 of the License, or
# (at your option) any later version.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
set -e
. /sbin/sabayondevkit-functions.sh
+16
View File
@@ -1,4 +1,20 @@
#!/bin/bash
# Copyright 2016-2018 See AUTHORS file
#
# 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, either version 3 of the License, or
# (at your option) any later version.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
set -e
. /sbin/sabayondevkit-functions.sh
+65
View File
@@ -0,0 +1,65 @@
#!/usr/bin/perl
# mudler <mudler@sabayon.org>
# this tool requires querypkg
use Getopt::Long;
use strict;
use warnings;
my $arch;
my $verbose;
my $overlay;
GetOptions(
"arch=s" => \$arch,
"overlay=s" => \$overlay,
"verbose" => \$verbose
) or die("Error in command line arguments\n");
die("You should at least supply an overlay with --overlay") if !$overlay;
# Input: Overlay absolute path
# Output: array with package names (category/name)
sub get_packages {
keys %{
{ map {
s/$overlay\/|\.ebuild//g;
$_ = join( '/', ( split( /\//, $_ ) )[ 0, 1 ] );
$_ => 1
} glob( $_[0] . "/*/*/*.ebuild" )
}
};
}
# Input: package (category/name)
# Output: returns 1 if obsolete and can be removed
sub obsolete_package($$) {
my $package = $_[0];
my $arch = $_[1];
my $l_arch = ( defined $arch and $arch ne "" ? "--arch $arch" : "" );
print "querypkg -q $l_arch $package --show spm_repo\n" if $verbose;
my @out = `querypkg -q $l_arch $package --show spm_repo`;
chomp(@out);
return 1 if "@out" eq "";
foreach my $l (@out) {
print " >> $l\n" if $verbose;
return 1 if ( $l =~ /$package.*\{spm_repo\:gent.*/ );
}
return 0;
}
my @packages = get_packages($overlay);
my @obsoletes;
foreach my $p (@packages) {
print "[$p] Checking if there is a version in the repositories.... ";
print "\n" if $verbose;
if ( obsolete_package( $p, $arch ) ) {
print " OBSOLETE! \n";
push( @obsoletes, $p );
}
else {
print " ok \n";
}
}
print "\n";
print "Obsoletes found:\n\n";
print "$_\n" for @obsoletes;
+110
View File
@@ -0,0 +1,110 @@
#!/bin/bash
# Copyright 2016-2018 See AUTHORS file
#
# 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, either version 3 of the License, or
# (at your option) any later version.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
set -e
. /sbin/sabayondevkit-functions.sh
help_msg() {
echo "
sabayon-maint-helper:
Script for builder boxes maintenance.
-h|--help This message.
--installed Upgrades all the packages installed in the box.
--obsolete Upgrades ONLY the packages that are listed obsolete in eix-test-obsolete.
--all Tries to upgrade all package without any euristics
--category Tries to upgrade/install all the packages in the specified category
e.g. sabayon-maint-helper 'app-office'
Some options could be set also as environment variables:
EMERGE_DEFAULT_ARGS Default emerge options
NOTE: This script MUST be execute as root.
"
}
parse_args() {
local short_opts="h"
local long_opts="help arch: host-arch: unprivileged stagingdir: image-descr: image:"
$(set -- $(getopt -u -q -a -o "$short_opts" -l "$long_opts" -- "$@"))
while [ $# -gt 0 ] ; do
case "$1" in
-h|--help)
help_msg
exit 1
;;
--installed)
echo "Trying to upgrade all the installed packages"
rebuild_all
;;
--obsolete)
echo "Upgrading the packages that are marked as obsolete"
build_obsolete
;;
--all)
echo "Upgrading/Installing everything available to install"
build_all_availables
;;
--category)
echo "Upgrading/Installing everything inside the '$2' category"
build_category_installed "$2"
shift
;;
--)
help_msg
exit 1
;;
*)
echo "Invalid parameter $1."
exit 1
;;
esac
shift
done
return 0
}
main() {
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
[ -z "$@" ] && help_msg && exit 1
(
echo "Acquiring lock"
flock -x -w 10 200 || ( echo "Failed acquiring lock in 10 seconds" && exit 1 )
parse_args "$@"
) 200>/var/lock/.repomaint
}
main "$@"
+58 -29
View File
@@ -1,59 +1,88 @@
#!/bin/bash
set -e
export BUILD_DIR="${BUILD_DIR:-/opt/sabayon-build/}"
check_docker_requirements(){
if [ "$(id -u)" != "0" ]; then
groups | grep -q docker || echo "--> If you are not running the script as root, your user should be in the docker group to use it. (sudo gpasswd -a $USER docker)"
fi
ps aux | grep -q '[d]ocker' || echo "--> Be sure to have the docker daemon running (sudo systemctl start docker) of configure it to run on boot (sudo systemctl enable docker). Trying to start it anyway" && sudo systemctl start docker || true
ps aux | grep -q '[d]ocker' || echo "--> Be sure to have the docker daemon running (sudo systemctl start docker) or configure it to run on boot (sudo systemctl enable docker). Trying to start it anyway" && systemctl start docker || true
}
die() { echo "$@" 1>&2 ; exit 1; }
build() {
local SEARCH=$1
local EMERGE_DEFAULT_ARGS=${2:---accept-properties=-interactive --verbose --oneshot --nospinner --noreplace --quiet-build=y --quiet-fail --fail-clean=y --complete-graph --buildpkg}
for i in $(EIX_LIMIT=0 eix --only-names --pure-packages "$SEARCH/" | xargs echo | uniq);
do
echo "Building $i"
emerge $EMERGE_DEFAULT_ARGS -o $i && \
emerge $EMERGE_DEFAULT_ARGS $i
done
build_sync() {
layman -S
emerge --sync
eix-update
pushd "${BUILD_DIR}"
git stash
git fetch --all || true
git checkout master || true
git reset --hard origin/master || true
popd
}
build_installed() {
build_category() {
local SEARCH=$1
local EMERGE_DEFAULT_ARGS=${2:---accept-properties=-interactive --newuse --noreplace --changed-use --update --verbose --oneshot --nospinner --quiet-build=y --quiet-fail --fail-clean=y --complete-graph --buildpkg}
build_sync
for i in $(EIX_LIMIT=0 eix --only-names --pure-packages "$SEARCH/" | xargs echo | uniq);
do
echo "Building $i"
emerge ${EMERGE_DEFAULT_ARGS:---accept-properties=-interactive --verbose --oneshot --nospinner --noreplace --quiet-build=y --quiet-fail --fail-clean=y --complete-graph --buildpkg} $i || true
done
}
build_obsolete() {
build_sync
for i in $(EIX_LIMIT=0 eix-test-obsolete | grep '\[U\]' | awk '{ print $2 }' | xargs echo | uniq);
do
echo "Build $i"
emerge ${EMERGE_DEFAULT_ARGS:---accept-properties=-interactive -u --verbose --oneshot --nospinner --quiet-build=y --quiet-fail --fail-clean=y --complete-graph --buildpkg --noreplace} $i || true
done
}
build_category_installed() {
local SEARCH=$1
build_sync
for i in $(EIX_LIMIT=0 eix -I --only-names --pure-packages "$SEARCH/" | xargs echo | uniq);
do
echo "Building $i"
emerge $EMERGE_DEFAULT_ARGS $i
emerge ${EMERGE_DEFAULT_ARGS:---accept-properties=-interactive -u --newuse --noreplace --changed-use --update --verbose --oneshot --nospinner --quiet-build=y --quiet-fail --fail-clean=y --complete-graph --buildpkg} $i || true
done
}
build_all_availables() {
for i in $(cat /usr/portage/profiles/categories | xargs echo | uniq);
do
build "$i/"
done
for i in $(cat /usr/portage/profiles/categories | xargs echo | uniq);
do
build_category "$i/"
done
}
rebuild_all() {
for i in $(cat /usr/portage/profiles/categories | xargs echo | uniq);
do
build_installed "$i/"
build_category_installed "$i/"
done
}
build_sync() {
emerge-webrsync || exit 1
emerge --sync
layman -S
eix-update || exit 1
pushd /opt/sabayon-build/
git stash
git fetch --all
git checkout master
git reset --heard origin/master
popd
get_category() {
local CATEGORY=$1
local PACKS
for i in $(EIX_LIMIT=0 eix --only-names --pure-packages "$CATEGORY/" | xargs echo | uniq);
do
PACKS+="$i "
done
echo $PACKS
}
get_all_availables() {
local RES
for i in $(cat /usr/portage/profiles/categories | xargs echo | uniq);
do
RES+="$(get_category $i) "
done
echo $RES
}