Compare commits

...

48 Commits

Author SHA1 Message Date
mudler 55bb3cc44e enabling package signing 2016-03-18 14:33:12 +01:00
Ettore Di Giacinto 502b85b84b [createrepo] adding KEYS env variable 2016-03-18 00:23:47 +01:00
mudler c17228fc05 [builder] reverting virtual exclusion, prevents building and end in an infinite loop 2016-03-15 11:05:19 +01:00
mudler a4ce1e8300 suppressing useless output 2016-03-06 20:43:35 +01:00
mudler 67a689f217 [builder sabayon-buildpackages] renaming SKIP_SYNC in SKIP_PORTAGE_SYNC 2016-03-06 20:37:02 +01:00
mudler 2c38ae1c0c [builder sabayon-buildpackages] adding SKIP_SYNC and WEBRSYNC to control portage sync 2016-03-06 20:04:52 +01:00
mudler f35a2e14cd [builder] dumb fix to virtual's dependencies exclusion 2016-03-06 19:54:24 +01:00
mudler 23d9c86cae [builder] minor changes, fix to virtual's dependencies exclusion 2016-03-06 19:42:59 +01:00
Ettore Di Giacinto c7d05296f9 Merge pull request #5 from optiz0r/feature_handle_virtual_dependencies
Don't install dependencies brought in by virtual packages
2016-03-06 19:41:22 +01:00
Ben Roberts 1c29cba964 Don't install dependencies brought in by virtual packages
When calculating the missing dependencies for an ebuild to be installed
by entropy, it's necessary to walk two levels deep minimum to handle meta
packages and split ebuilds. This has a nasty side effect for virtual packages
since all the potential candidates that could satisfy the virtual are
included. This means for anything that has a dependency on virtual/jdk, every
possible jdk is installed side-by-side. For anything that depends on
virtual/mta, every possible mta is installed one by one (because these conflict
and substitute each other, each subsequent install uninstalls the previous
package which is a massive waste of time, bandwidth and effort).

This commit walks through the dependency list looking for any virtual packages.
For each one, the first-level dependencies of the virtual are collected. Only
dependencies of the target package which are not also dependencies of the virtual
are installed. This means only one package that satisfies the virtual will end up
being installed.
2016-03-06 17:35:53 +00:00
mudler 5895b63ef6 [builder] moving @Installed_Packages chomp to a more logic part 2016-03-06 17:00:55 +01:00
mudler 90121cd3b8 [builder] fix, force shift to be evaluated in expression context inside dereference 2016-03-06 16:59:33 +01:00
mudler caf7e76b9b [sabayon-buildpackages] read DEPENDENCY_SCAN_DEPTH env variable and propagating to builder #4 2016-03-06 13:39:36 +01:00
mudler 42dab39689 [builder] checking if installation of packages is required at all #3 2016-03-06 13:24:54 +01:00
mudler aebe2c8783 [builder] Speed up Available/Installed Packages computation #3 2016-03-06 13:13:55 +01:00
mudler f37168a9e8 [builder] enabling depth override with DEPENDENCY_SCAN_DEPTH env variable #4 2016-03-06 13:03:14 +01:00
Ettore Di Giacinto c40be91df5 Merge pull request #1 from optiz0r/bugfix_dont_reinstall_deps
Fix equo query to prevent dependencies being reinstalled
2016-03-06 12:38:59 +01:00
Ettore Di Giacinto aa31b5865b Merge pull request #2 from optiz0r/feature_disable_mirrorsort
Allow disabling mirrorsort with EQUO_MIRRORSORT=0 env var
2016-03-06 12:33:30 +01:00
Ben Roberts cea7504964 Allow disabling mirrorsort with EQUO_MIRRORSORT=0 env var
When doing repeated testing, the mirrorsort can add unwanted delay.
This commit adds support for setting EQUO_MIRRORSORT=0 to disable this
and use the default sort order while testing.
It preserves the previous behaviour and defaults to 1.
2016-03-05 22:52:20 +00:00
Ben Roberts 3d51d160c5 Remove workaround for equery output not being quiet as requested 2016-03-05 22:47:49 +00:00
Ben Roberts cbd7a010ba Fix equo query to prevent dependencies being reinstalled
Call to equo query puts arg '--quiet' in the wrong place, receiving
prettified output which doesn't match string comparisons against
package names, leading to all dependencies being reinstalled every
time. This commit puts the --quiet arg in to correct place so that
only missing dependencies are installed.
2016-03-05 20:17:19 +00:00
mudler c3e313ef60 add sabayon-tbz2truncate 2016-03-03 00:43:00 +01:00
mudler 0f1f702c66 add sabayon-tbz2extract and sabayon-xpakextract 2016-03-02 21:19:12 +01:00
mudler c9effe3053 portage should be mounted before the other caches directories 2016-03-02 17:21:08 +01:00
mudler 20056cb0d5 [sabayon-buildpackages] adding PORTAGE_CACHE env variable 2016-03-02 14:07:50 +01:00
mudler 1076f1c2e3 ENTROPY_DOWNLOADED_PACKAGES defaults to entropy defaults 2016-02-28 15:48:54 +01:00
mudler f29cd8dabc [sabayon-buildpackages] enabling mounting of ENTROPY_DOWNLOADED_PACKAGES, but must be in complete form (localdirectory:containerdirectory) since it's arch-dependent 2016-02-28 13:52:41 +01:00
mudler a228567ab9 [sabayon-createrepo] dumb fix 2016-02-27 12:11:44 +01:00
mudler 26389080f2 calling equo rm if necessary 2016-02-26 23:49:40 +01:00
mudler 59ef11dc13 [sabayon-buildpackages] now with REMOTE_OVERLAY you can specify a git repository to clone instead of a local one 2016-02-25 23:00:50 +01:00
mudler aa11986503 [sabayon-buildpackages] adding DISTFILES env 2016-02-25 21:48:17 +01:00
mudler a37db57b82 entrypoint in createrepo is forced 2016-02-24 22:11:48 +01:00
mudler 88fb0d890a adding DOCKER_OPTS 2016-02-24 22:06:28 +01:00
mudler 1d14348bd8 adding --remove to remove packages with equo before the build 2016-02-24 17:52:33 +01:00
mudler 4af1209a33 fix OUTPUT_DIR instead WORKSPACE 2016-02-24 14:47:25 +01:00
mudler a13f89ee22 adding tools to remove packages and cleanup 2016-02-23 22:50:27 +01:00
mudler fae9e91583 adding brokenlibs checker scripts 2016-02-22 16:37:54 +01:00
mudler c7abf2e24b Adding sabayon-entropypreservedlibs, enabling ENTROPY_REPO environment to define which repo enable before upgrade in the builder script 2016-02-21 23:27:27 +01:00
Ettore Di Giacinto b07d658d88 [script/builder] default repo is main 2016-02-19 22:42:39 +01:00
mudler 18148617ea [builder] disabling quiet build as default emerge options 2016-02-15 00:01:28 +01:00
mudler 11f56726d5 [createrepo] using custom image for eit usage 2016-02-12 11:21:00 +01:00
mudler ff9fb250a2 try to start docker if not running (it will save a lot of pandas) 2016-02-09 01:05:48 +01:00
Ettore Di Giacinto aa5e41c073 Update README.md 2016-02-08 22:27:21 +01:00
mudler 68cb54c5d0 Added more Env variable for customization, now directory structure is created on user behalf if there is actually a need 2016-02-08 22:25:57 +01:00
mudler 087e3203e4 createrepo now accepts as argument the folder where to look for tbz2s, enhanced output 2016-02-08 15:12:07 +01:00
mudler c354cdc708 make.conf now can be swapped in builder script 2016-02-08 14:21:00 +01:00
mudler c29a3032d2 adding DOCKER_PULL_IMGE environment variable, if set to 1 it will update the image before running 2016-02-08 14:09:30 +01:00
mudler 10483f6d93 using array for docker env and volumes 2016-02-08 12:56:19 +01:00
14 changed files with 620 additions and 84 deletions
+1 -2
View File
@@ -25,5 +25,4 @@ install:
install -m 0755 builder $(DESTDIR)/$(USBINDIR)/ install -m 0755 builder $(DESTDIR)/$(USBINDIR)/
install -d $(DESTDIR)/$(UBINDIR) install -d $(DESTDIR)/$(UBINDIR)
install -m 0755 sabayon-buildpackages $(DESTDIR)/$(UBINDIR)/ install -m 0755 sabayon-* $(DESTDIR)/$(UBINDIR)/
install -m 0755 sabayon-createrepo $(DESTDIR)/$(UBINDIR)/
+40 -34
View File
@@ -8,8 +8,6 @@ You can install it in sabayon with:
sudo equo i sabayon-devkit sudo equo i sabayon-devkit
` `
# Building package in a clean environment
## Prerequisites ## Prerequisites
* docker installed in the machine (`sudo equo i docker`), and the daemon started (`sudo systemctl start docker`) * docker installed in the machine (`sudo equo i docker`), and the daemon started (`sudo systemctl start docker`)
@@ -17,7 +15,7 @@ sudo equo i sabayon-devkit
Packages can be built in a clean environment with docker by running `sabayon-buildpackages`. Packages can be built in a clean environment with docker by running `sabayon-buildpackages`.
*`sabayon-buildpackages` is just a script wrapper around the `builder` perl script which is placed inside a docker container.* *`sabayon-buildpackages` and ``sabayon-createrepo are just a script wrapper around the development docker container.*
## Define your workspace ## Define your workspace
@@ -43,24 +41,10 @@ If you want, you can define the workspace directory with the variable environmen
`SAB_WORKSPACE=/whatever sabayon-createrepo` `SAB_WORKSPACE=/whatever sabayon-createrepo`
## Build your packages
`sabayon-buildpackages` accepts the same arguments as the builder:
sabayon-buildpackages app-text/tree
sabayon-buildpackages plasma-meta --layman kde
sabayon-buildpackages app-foo/foobar --equo foo-misc/foobar --layman foo --layman bar foo
* --layman foobar -- tells the script to add the "foobar" overlay from layman
* --equo foo-misc/foobar -- tells the script to install "foo-misc/foobar" before compiling
* The arguments are the packages that you want compile, they can be also in the complete form *e.g. =foo-bar/misc-1.2*
## Folder structure ## Folder structure
This is the folder structure that will be automatically created: This is the folder structure of your workspace by default, but you can tweak part of it to your tastes with Environment variables:
` `
@@ -71,28 +55,48 @@ This is the folder structure that will be automatically created:
myproject/specs/ myproject/specs/
` `
* myproject/portage\_artifacts/ -- will contain the portage artifacts, they will be consumed in the next steps * myproject/portage\_artifacts/ -- Created when `sabayon-buildpackages` is started. It contains the portage artifacts, they will be consumed in the next steps
* myproject/entropy\_artifacts/ -- will contain the entropy output, our Sabayon repository for the **.tbz2** packages that where in **myproject/portage_artifacts/** * myproject/entropy\_artifacts/ -- Created when `sabayon-createrepo` is started. It contains the entropy repository files.
* myproject/local_overlay/ -- is the location of your personal overlay (if necessary) * myproject/local_overlay/ -- is the location of your personal overlay (if necessary)
* myproject/specs -- contain custom files for uses, envs, masks, unmasks and keywords for package compilation options * myproject/specs -- Create it to customize the building process. It can contain custom files for make.conf, uses, envs, masks, unmasks and keywords for package compilation options
the `specs` folder is structured like this: the `specs` folder is structured like this and it's merely optional.
- custom.unmask: will contain your custom unmasks as long as you create those files they are used:
- custom.mask: will contain your custom masks
- custom.use: will contain your custom use flags - custom.unmask: that's the place for custom unmasks
- custom.env: will contain your custom env specifications - custom.mask: contain your custom masks
- custom.keywords: will contain your custom keywords - custom.use: contain your custom use flags
- custom.env: contain your custom env specifications
- custom.keywords: contain your custom keywords
- make.conf: it will replace the make.conf on the container with yours.
you can override the Architecture folder in which files are placed specifying in the *SAB_ARCH* environment variable. Default is "intel" (can be *armarch* as for now) you can override the Architecture folder in which files are placed specifying in the *SAB_ARCH* environment variable. Default is "intel" (can be *armarch* as for now)
**Note: the portage_artifacts can also contain tbz2 files generated with other methods, if you already have your desired packages already compiled, you can just use `sabayon-createrepo`**
# Building package in a clean environment
`sabayon-buildpackages` accepts the same arguments as the builder:
sabayon-buildpackages app-text/tree
sabayon-buildpackages plasma-meta --layman kde
DOCKER_PULL_IMAGE=1 sabayon-buildpackages app-foo/foobar --equo foo-misc/foobar --layman foo --layman bar foo
* --layman foobar -- tells the script to add the "foobar" overlay from layman
* --equo foo-misc/foobar -- tells the script to install "foo-misc/foobar" before compiling
Environment variables:
- DOCKER_PULL_IMAGE -- tells the script to update the docker image before compiling, enable it with 1, disable with 0
- OUTPUT_DIR -- optional, default to "portage_artifacts" in your current working directory, it is the path where emerge generated tbz2 are stored (absolute path)
- LOCAL_OVERLAY -- optional, you can specify the path to your local overlay (absolute path)
The arguments are the packages that you want compile, they can be also in the complete form *e.g. =foo-bar/misc-1.2*
# Create Sabayon repository from \*.tbz2 in a clean environment # Create Sabayon repository from \*.tbz2 in a clean environment
## Prerequisites
* docker installed in the machine (`sudo equo i docker`), and the daemon started (`sudo systemctl start docker`)
* if you don't want to run that as root, the user where are you running the script must be in the docker group (`sudo gpasswd -a $USER docker`)
You can create Sabayon repositories from packages built with emerge in a clean environment with docker by running `sabayon-createrepo`. You can create Sabayon repositories from packages built with emerge in a clean environment with docker by running `sabayon-createrepo`.
The script will use a docker container to inject packages from *portage_artifacts/* in your project folder, the output will be available in *entropy_artifacts/*. The script will use a docker container to inject packages from *portage_artifacts/* in your project folder, the output will be available in *entropy_artifacts/*.
@@ -103,8 +107,10 @@ Example:
REPOSITORY_NAME=mytest REPOSITORY_DESCRIPTION="My Wonderful Repository" sabayon-createrepo REPOSITORY_NAME=mytest REPOSITORY_DESCRIPTION="My Wonderful Repository" sabayon-createrepo
* REPOSITORY_NAME -- is your repository name id * REPOSITORY_NAME -- optional, is your repository name id
* REPOSITORY_DESCRIPTION -- is your repository description * REPOSITORY_DESCRIPTION -- optional, is your repository description
* PORTAGE_ARTIFACTS -- optional if you use the tools in the same dir, you can specify where portage artifacts (\*.tbz2 files) are (absolute path required)
* OUTPUT_DIR -- optional, you can specify where the entropy repository will be stored
You can also put your .tbz2 file externally built inside `entropy_artifacts/` in your workspace folder (you can create it if not already present) and run `sabayon-createrepo` to generate a repository from them. You can also put your .tbz2 file externally built inside `entropy_artifacts/` in your workspace folder (you can create it if not already present) and run `sabayon-createrepo` to generate a repository from them.
+68 -19
View File
@@ -7,18 +7,25 @@ my $jobs = $ENV{BUILDER_JOBS} // 1;
my $use_equo = $ENV{USE_EQUO} // 1; my $use_equo = $ENV{USE_EQUO} // 1;
my $preserved_rebuild = $ENV{PRESERVED_REBUILD} // 0; my $preserved_rebuild = $ENV{PRESERVED_REBUILD} // 0;
my $emerge_defaults_args = $ENV{EMERGE_DEFAULTS_ARGS} my $emerge_defaults_args = $ENV{EMERGE_DEFAULTS_ARGS}
// "--accept-properties=-interactive --verbose --oneshot --nospinner --quiet-build=y --complete-graph --buildpkg"; // "--accept-properties=-interactive --verbose --oneshot --complete-graph --buildpkg";
$ENV{FEATURES} = $ENV{FEATURES} $ENV{FEATURES} = $ENV{FEATURES}
// "parallel-fetch protect-owned compressdebug splitdebug -userpriv"; // "parallel-fetch protect-owned compressdebug splitdebug -userpriv";
my $equo_install_atoms = $ENV{EQUO_INSTALL_ATOMS} // 1; my $equo_install_atoms = $ENV{EQUO_INSTALL_ATOMS} // 1;
my $equo_install_version = $ENV{EQUO_INSTALL_VERSION} // 0; my $equo_install_version = $ENV{EQUO_INSTALL_VERSION} // 0;
my $equo_split_install = $ENV{EQUO_SPLIT_INSTALL} // 0; my $equo_split_install = $ENV{EQUO_SPLIT_INSTALL} // 0;
my $equo_mirrorsort = $ENV{EQUO_MIRRORSORT} // 1;
my $entropy_repository = $ENV{ENTROPY_REPOSITORY} // "main"; # Can be weekly, main, testing
my $artifacts_folder = $ENV{ARTIFACTS_DIR}; my $artifacts_folder = $ENV{ARTIFACTS_DIR};
my $dep_scan_depth = $ENV{DEPENDENCY_SCAN_DEPTH} // 2;
my $skip_portage_sync = $ENV{SKIP_PORTAGE_SYNC} // 0;
my $webrsync = $ENV{WEBRSYNC} // 0;
my $make_conf = $ENV{MAKE_CONF};
my @overlays; my @overlays;
GetOptions( 'layman|overlay:s{,}' => \@overlays, 'equo|install:s{,}' => \@equo_install ); GetOptions( 'layman|overlay:s{,}' => \@overlays, 'equo|install:s{,}' => \@equo_install,'equorm|remove:s{,}' => \@equo_remove );
if ( @ARGV == 0 ) { if ( @ARGV == 0 ) {
help(); help();
@@ -57,23 +64,36 @@ sub calculate_missing {
my $package = shift; my $package = shift;
my $depth = shift; my $depth = shift;
my @Installed_Packages = @{+shift};
my @Available_Packages = @{+shift};
# Getting the package dependencies and the installed packages # Getting the package dependencies and the installed packages
say "[$package] Getting the package dependencies and the installed packages"; say "[$package] Getting the package dependencies and the installed packages";
my @Packages = package_deps( $package, $depth, 1 ); my @dependencies = package_deps( $package, $depth, 1 );
my @Installed_Packages = qx/equo q --quiet list installed/;
chomp(@Installed_Packages); # XXX: Endless loop as for now.
say "[$package] Getting the package dependencies and the installed packages"; # my %install_dependencies = map { $_ => 1 } @dependencies;
# # Look for any virtuals and remove its immediate dependencies to avoid
# # installing multiple conflicting packages one by one
# my @virtual_deps;
# for my $dep (@dependencies) {
# push(@virtual_deps, package_deps( $dep, 1, 1 )) if ( $dep =~ /^virtual\// );
# }
# for my $dep (@virtual_deps) {
# $install_dependencies{$dep} = 0 if ( $dep !~ /^virtual\// );
# }
# @dependencies = grep { $install_dependencies{$_} } @dependencies;
#taking only the 4th column of output as key of the hashmap #taking only the 4th column of output as key of the hashmap
my %installed_packs = my %installed_packs =
map { ( split( /\s/, $_ ) )[3] => 1 } @Installed_Packages; map { $_ => 1 } @Installed_Packages;
my %available_packs = map { $_ => 1 } available_packages(); my %available_packs = map { $_ => 1 } @Available_Packages;
# removing from packages the one that are already installed and keeping only the available in the entropy repositories # removing from packages the one that are already installed and keeping only the available in the entropy repositories
my @to_install = grep( defined $available_packs{$_}, my @to_install = grep( defined $available_packs{$_},
uniq( grep( !defined $installed_packs{$_}, @Packages ) ) ); uniq( grep( !defined $installed_packs{$_}, @dependencies ) ) );
@to_install=grep { length } @to_install; @to_install=grep { length } @to_install;
say "[$package] packages that will be installed with equo: @to_install" if @to_install>0; # say "[$package] packages that will be installed with equo: @to_install" if @to_install>0;
return @to_install; return @to_install;
} }
@@ -154,36 +174,65 @@ auto-sync = no' > /etc/portage/repos.conf/local.conf
system("mkdir -p /usr/portage/distfiles/git3-src"); system("mkdir -p /usr/portage/distfiles/git3-src");
# sync portage and overlays unless($skip_portage_sync == 1){
system("layman -S;emerge --sync"); # sync portage and overlays
system("layman -S");
if($webrsync == 1){
system("emerge-webrsync");
} else {
system("emerge --sync");
}
}
# preparing for MOAR automation # preparing for MOAR automation
qx|eselect profile set $profile|; qx|eselect profile set $profile|;
qx{ls /usr/portage/licenses -1 | xargs -0 > /etc/entropy/packages/license.accept} qx{ls /usr/portage/licenses -1 | xargs -0 > /etc/entropy/packages/license.accept}
; #HAHA ; #HAHA
system("equo repo mirrorsort sabayonlinux.org;equo up && equo u")
if $use_equo; # Better don't be behind if ($use_equo && $entropy_repository eq "weekly" ) {
qx|equo repo disable sabayonlinux.org|;
qx|equo repo enable sabayon-weekly|;
} elsif( $use_equo && $entropy_repository eq "testing") {
qx|equo repo disable sabayon-weekly|;
qx|equo repo enable sabayonlinux.org|;
qx|equo repo enable sabayon-limbo|;
}
if ($use_equo) {
system("equo repo mirrorsort sabayonlinux.org") if $equo_mirrorsort;
system("equo up && equo u")
}
system("cp -rf $make_conf /etc/portage/make.conf") if $make_conf;
qx|echo 'ACCEPT_LICENSE="*"' >> /etc/portage/make.conf|; #just plain evil qx|echo 'ACCEPT_LICENSE="*"' >> /etc/portage/make.conf|; #just plain evil
my @packages = @ARGV; my @packages = @ARGV;
if ($use_equo) { if ($use_equo) {
my @packages_deps; my @packages_deps;
my @Installed_Packages = qx/equo q list installed --quiet/;
my @Available_Packages = available_packages();
chomp(@Installed_Packages);
foreach my $p (@packages) { foreach my $p (@packages) {
say "[$p] Getting the package dependencies which aren't already installed on the system.. ''"; say "[$p] Getting the package dependencies which aren't already installed on the system.. ";
push( @packages_deps, calculate_missing( $p , 2) ) push( @packages_deps, calculate_missing( $p , $dep_scan_depth,\@Installed_Packages,\@Available_Packages) )
if $equo_install_atoms; if $equo_install_atoms;
push( @packages_deps, package_deps( $p, 2, 0 ) ) push( @packages_deps, package_deps( $p, $dep_scan_depth, 0 ) )
if $equo_install_version; if $equo_install_version;
say "[$p] Done ''" say "[$p] Done"
} }
@packages_deps = grep { defined() and length() } @packages_deps; #cleaning @packages_deps = grep { defined() and length() } @packages_deps; #cleaning
say "", "[install] Installing missing dependencies with equo", @packages_deps, ""; say "", "[install] Installing missing dependencies with equo", @packages_deps, "";
if ($equo_split_install) { if ($equo_split_install) {
system("equo i --bdeps $_") for (@packages_deps,@equo_install); system("equo i --bdeps $_") for (@packages_deps,@equo_install);
if (@equo_remove > 0){
system("equo rm --nodeps $_") for (@equo_remove);
}
} }
else { else {
system("equo i --bdeps @packages_deps @equo_install"); system("equo i --bdeps @packages_deps @equo_install") if ( @packages_deps > 0 or @equo_install > 0);
system("equo rm --nodeps @equo_remove") if (@equo_remove > 0);
} }
} }
+26
View File
@@ -0,0 +1,26 @@
#!/bin/bash
PACKAGES=()
bin=$1
. /sbin/sabayondevkit-functions.sh
[ -z "$bin" ] && die "No Arg given"
# Getting linked libraries
for i in $(ldd $1 | cut -d \( -f1 | cut -d \> -f2 | grep "/" | xargs echo)
do
package=$(equo q belongs -q $i)
[ -z "$package" ] && die "borked: $i"
PACKAGES+=($package)
done
# Unique and ordered
U_PACKAGES=$(echo "${PACKAGES[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')
if [ "${#PACKAGES}" -ne 0 ]; then
for i in ${U_PACKAGES[@]}
do
echo " $i"
done
fi
+63 -15
View File
@@ -3,6 +3,14 @@ set -e
SAB_WORKSPACE="${SAB_WORKSPACE:-$PWD}" SAB_WORKSPACE="${SAB_WORKSPACE:-$PWD}"
DOCKER_IMAGE="${DOCKER_IMAGE:-sabayon/builder-amd64}" DOCKER_IMAGE="${DOCKER_IMAGE:-sabayon/builder-amd64}"
SAB_ARCH="${SAB_ARCH:-intel}" SAB_ARCH="${SAB_ARCH:-intel}"
DOCKER_PULL_IMAGE="${DOCKER_PULL_IMAGE:-0}"
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}"
TEMPDIR=$(mktemp -d)
. /sbin/sabayondevkit-functions.sh . /sbin/sabayondevkit-functions.sh
if [ $# -eq 0 ] if [ $# -eq 0 ]
@@ -11,21 +19,61 @@ if [ $# -eq 0 ]
exit 1 exit 1
fi fi
docker_env=(-e "LC_ALL=en_US.UTF-8")
docker_volumes=( -v "$OUTPUT_DIR:/usr/portage/packages" )
[ -z "$PORTAGE_CACHE" ] || docker_volumes+=(-v "$PORTAGE_CACHE:/usr/portage")
[ -z "$BUILDER_PROFILE" ] || docker_env+=(-e "BUILDER_PROFILE=$BUILDER_PROFILE")
[ -z "$BUILDER_JOBS" ] || docker_env+=(-e "BUILDER_JOBS=$BUILDER_JOBS")
[ -z "$USE_EQUO" ] || docker_env+=(-e "USE_EQUO=$USE_EQUO")
[ -z "$PRESERVED_REBUILD" ] || docker_env+=(-e "PRESERVED_REBUILD=$PRESERVED_REBUILD")
[ -z "$EQUO_INSTALL_ATOMS" ] || docker_env+=(-e "EQUO_INSTALL_ATOMS=$EQUO_INSTALL_ATOMS")
[ -z "$DEPENDENCY_SCAN_DEPTH" ] || docker_env+=(-e "DEPENDENCY_SCAN_DEPTH=$DEPENDENCY_SCAN_DEPTH")
[ -z "$EMERGE_DEFAULTS_ARGS" ] || docker_env+=(-e "EMERGE_DEFAULTS_ARGS=$EMERGE_DEFAULTS_ARGS")
[ -z "$EQUO_INSTALL_VERSION" ] || docker_env+=(-e "EQUO_INSTALL_VERSION=$EQUO_INSTALL_VERSION")
[ -z "$EQUO_SPLIT_INSTALL" ] || docker_env+=(-e "EQUO_SPLIT_INSTALL=$EQUO_SPLIT_INSTALL")
[ -z "$ARTIFACTS_DIR" ] || docker_env+=(-e "ARTIFACTS_DIR=$ARTIFACTS_DIR")
[ -z "$ENTROPY_REPOSITORY" ] || docker_env+=(-e "ENTROPY_REPOSITORY=$ENTROPY_REPOSITORY")
[ -z "$SKIP_PORTAGE_SYNC" ] || docker_env+=(-e "SKIP_PORTAGE_SYNC=$SKIP_PORTAGE_SYNC")
[ -z "$WEBRSYNC" ] || docker_env+=(-e "WEBRSYNC=$WEBRSYNC")
[ -z "$DISTFILES" ] || docker_volumes+=(-v "$DISTFILES:/usr/portage/distfiles")
[ -z "$ENTROPY_DOWNLOADED_PACKAGES" ] || docker_volumes+=(-v "$ENTROPY_DOWNLOADED_PACKAGES:/var/lib/entropy/client/packages")
if [ -n "$REMOTE_OVERLAY" ]; then
git clone "$REMOTE_OVERLAY" "$TEMPDIR"
LOCAL_OVERLAY=$TEMPDIR
fi
function cleanup {
rm -rf "$TEMPDIR"
}
trap cleanup EXIT
[ -d "$LOCAL_OVERLAY" ] && docker_volumes+=(-v "$LOCAL_OVERLAY:/usr/local/portage")
if [ -e $MAKE_CONF ]; then
echo "You specified a make.conf. I hope you know what are you doing"
docker_volumes+=(-v "$MAKE_CONF:/etc/portage/make.conf.custom") # file make.conf.custom is in the docker container
docker_env+=(-e "MAKE_CONF=/etc/portage/make.conf.custom") # tell to the builder where is our custom make.conf
fi
check_docker_requirements check_docker_requirements
[ -d "$SAB_WORKSPACE"/specs ] || mkdir "$SAB_WORKSPACE"/specs/ [ $DOCKER_PULL_IMAGE -eq 1 ] && docker pull $DOCKER_IMAGE
[ -e "$SAB_WORKSPACE"/specs/custom.mask ] || touch "$SAB_WORKSPACE"/specs/custom.mask
[ -e "$SAB_WORKSPACE"/specs/custom.unmask ] || touch "$SAB_WORKSPACE"/specs/custom.unmask
[ -e "$SAB_WORKSPACE"/specs/custom.use ] || touch "$SAB_WORKSPACE"/specs/custom.use
[ -e "$SAB_WORKSPACE"/specs/custom.env ] || touch "$SAB_WORKSPACE"/specs/custom.env
[ -e "$SAB_WORKSPACE"/specs/custom.keywords ] || touch "$SAB_WORKSPACE"/specs/custom.keywords
docker run --rm \ if [ -d "$SAB_WORKSPACE"/specs ]; then
-v "$SAB_WORKSPACE"/local_overlay:/usr/local/portage \
-v "$SAB_WORKSPACE"/portage_artifacts:/usr/portage/packages \ [ -e "$SAB_WORKSPACE"/specs/custom.mask ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/custom.mask:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.mask/99-custom.mask")
-v "$SAB_WORKSPACE"/specs/custom.unmask:/opt/sabayon-build/conf/"$SAB_ARCH"/portage/package.unmask/custom.unmask \ [ -e "$SAB_WORKSPACE"/specs/custom.unmask ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/custom.unmask:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.unmask/99-custom.unmask")
-v "$SAB_WORKSPACE"/specs/custom.mask:/opt/sabayon-build/conf/"$SAB_ARCH"/portage/package.mask/custom.mask \ [ -e "$SAB_WORKSPACE"/specs/custom.use ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/custom.use:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.use/99-custom.use")
-v "$SAB_WORKSPACE"/specs/custom.use:/opt/sabayon-build/conf/"$SAB_ARCH"/portage/package.use/custom.use \ [ -e "$SAB_WORKSPACE"/specs/custom.env ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/custom.env:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.env/99-custom.env")
-v "$SAB_WORKSPACE"/specs/custom.env:/opt/sabayon-build/conf/"$SAB_ARCH"/portage/package.env/custom.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")
-v "$SAB_WORKSPACE"/specs/custom.keywords:/opt/sabayon-build/conf/"$SAB_ARCH"/portage/package.keywords/custom.keywords \
-ti $DOCKER_IMAGE $@ fi
echo "Spawning the package builder container for '$@'."
echo ""
echo "docker run $DOCKER_OPTS ${docker_env[@]} ${docker_volumes[@]} $DOCKER_IMAGE $@"
docker run $DOCKER_OPTS "${docker_env[@]}" "${docker_volumes[@]}" $DOCKER_IMAGE $@
+26
View File
@@ -0,0 +1,26 @@
#!/bin/bash
. /sbin/sabayondevkit-functions.sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# the temp directory used, within $DIR
WORK_DIR=`mktemp -d -p "$DIR"`
# deletes the temp directory
function cleanup {
rm -rf "$WORK_DIR"
}
# register the cleanup function to be called on the EXIT signal
trap cleanup EXIT
tbz=$1
[ -z "$tbz" ] && die "No Arg given"
tar xjf "$tbz" -C "$WORK_DIR"
for file in $(find "$WORK_DIR" | xargs echo)
do
[ -f "$file" ] && /usr/bin/sabayon-brokenlibs "$file"
done
+63 -11
View File
@@ -7,9 +7,36 @@ entropysrv=$(mktemp)
createrepo=$(mktemp) createrepo=$(mktemp)
REPOSITORY_NAME="${REPOSITORY_NAME:-default}" REPOSITORY_NAME="${REPOSITORY_NAME:-default}"
REPOSITORY_DESCRIPTION="${REPOSITORY_DESCRIPTION:-My Sabayon repository}" REPOSITORY_DESCRIPTION="${REPOSITORY_DESCRIPTION:-My Sabayon repository}"
DOCKER_IMAGE="${DOCKER_IMAGE:-sabayon/builder-amd64}" DOCKER_IMAGE="${DOCKER_IMAGE:-sabayon/eit-amd64}"
PORTAGE_ARTIFACTS="${PORTAGE_ARTIFACTS:-$SAB_WORKSPACE/portage_artifacts}"
OUTPUT_DIR="${OUTPUT_DIR:-$SAB_WORKSPACE/entropy_artifacts}"
DOCKER_OPTS="${DOCKER_OPTS:--ti --rm}"
args=("$@")
EDITOR=cat EDITOR=cat
docker_env=(-e "EDITOR=$EDITOR"
-e "REPOSITORY=$REPOSITORY_NAME"
-e "LC_ALL=en_US.UTF-8")
docker_volumes=(
-v "$OUTPUT_DIR:/sabayon/artifacts"
-v "$createrepo:/sabayon/bin/create_repo.sh"
-v "$entropysrv:/etc/entropy/server.conf"
)
[ -z "$PUBKEY" ] || docker_volumes+=(-v "$PUBKEY:/etc/entropy/mykeys/key.pub")
[ -z "$PRIVATEKEY" ] || docker_volumes+=(-v "$PRIVATEKEY:/etc/entropy/mykeys/private.key")
if [ $# -eq 0 ]
then
docker_volumes+=(-v "$PORTAGE_ARTIFACTS:/usr/portage/packages" )
else
echo "Packages directory: ${args[0]}"
docker_volumes+=(-v "${args[0]}:/usr/portage/packages" )
fi
check_docker_requirements check_docker_requirements
echo "Repository: $REPOSITORY_NAME" echo "Repository: $REPOSITORY_NAME"
@@ -22,15 +49,13 @@ cat >$createrepo <<EOF
set -e set -e
built_pkgs=\$(find /usr/portage/packages -name "*.tbz2" | xargs) built_pkgs=\$(find /usr/portage/packages -name "*.tbz2" | xargs)
repo="\${REPOSITORY:-default}" repo="\${REPOSITORY:-default}"
equo i entropy-server
mkdir -p /sabayon/artifacts mkdir -p /sabayon/artifacts
[[ -z "\${built_pkgs}" ]] && echo "ouch no pkgs found" && exit 2 [[ -z "\${built_pkgs}" ]] && echo "ERROR: no tbz2s found" && exit 2
if [ -d "/sabayon/artifacts/standard" ]; then if [ -d "/sabayon/artifacts/standard" ]; then
eit unlock \$repo || true eit unlock \$repo || true
eit pull --quick $repo || true eit pull --quick \$repo || true
#eit sync \$repo #eit sync \$repo
else else
echo "Yes" | eit init --quick \$repo echo "Yes" | eit init --quick \$repo
@@ -38,6 +63,10 @@ fi
echo "Yes" | eit inject \${built_pkgs} || { echo "ouch unable to inject" && exit 3; } echo "Yes" | eit inject \${built_pkgs} || { echo "ouch unable to inject" && exit 3; }
echo "Yes Yes Yes" | eit commit --quick echo "Yes Yes Yes" | eit commit --quick
[ -f "/etc/entropy/mykeys/key.pub" ] && [ -f "/etc/entropy/mykeys/private.key" ] &&\
eit key import \$repo /etc/entropy/mykeys/private.key /etc/entropy/mykeys/key.pub && eit key sign \$repo
eit push --quick --force eit push --quick --force
EOF EOF
@@ -68,11 +97,34 @@ default-repository = $REPOSITORY_NAME
repository=$REPOSITORY_NAME|$REPOSITORY_DESCRIPTION|file:///sabayon/artifacts repository=$REPOSITORY_NAME|$REPOSITORY_DESCRIPTION|file:///sabayon/artifacts
EOF EOF
docker run --rm --entrypoint /bin/bash -e REPOSITORY=$REPOSITORY_NAME -e EDITOR=cat -e LC_ALL=en_US.UTF-8 \ function cleanup {
-v "$SAB_WORKSPACE"/entropy_artifacts:/sabayon/artifacts \ rm -rf $createrepo
-v $createrepo:/sabayon/bin/create_repo.sh \ rm -rf $entropysrv
-v $entropysrv:/etc/entropy/server.conf \ }
-v "$SAB_WORKSPACE"/portage_artifacts:/usr/portage/packages \
-ti $DOCKER_IMAGE /sabayon/bin/create_repo.sh || true trap cleanup EXIT
echo "docker $DOCKER_OPTS ${docker_env[@]} ${docker_volumes[@]} $DOCKER_IMAGE /sabayon/bin/create_repo.sh"
docker run $DOCKER_OPTS --entrypoint /bin/bash "${docker_env[@]}" "${docker_volumes[@]}" $DOCKER_IMAGE /sabayon/bin/create_repo.sh || true
if [ -d "$OUTPUT_DIR/standard" ]; then
echo "The Sabayon repository files are in $OUTPUT_DIR"
echo "Now you can upload its content where you want"
echo ""
echo "Here it is the repository file how will look like "
echo "(if you plan to upload it to a webserver, modify the URI accordingly)"
echo "
[$REPOSITORY_NAME]
desc = $REPOSITORY_DESCRIPTION
repo=file://$OUTPUT_DIR#bz2
enabled = true
pkg = file://$OUTPUT_DIR
"
else
echo "Something failed :("
fi
rm -rf $createrepo rm -rf $createrepo
rm -rf $entropysrv rm -rf $entropysrv
+93
View File
@@ -0,0 +1,93 @@
#!/bin/bash
set -e
. /sbin/sabayondevkit-functions.sh
SAB_WORKSPACE="${SAB_WORKSPACE:-$PWD}"
entropysrv=$(mktemp)
createrepo=$(mktemp)
REPOSITORY_NAME="${REPOSITORY_NAME:-default}"
REPOSITORY_DESCRIPTION="${REPOSITORY_DESCRIPTION:-My Sabayon repository}"
DOCKER_IMAGE="${DOCKER_IMAGE:-sabayon/eit-amd64}"
PORTAGE_ARTIFACTS="${PORTAGE_ARTIFACTS:-$SAB_WORKSPACE/portage_artifacts}"
OUTPUT_DIR="${OUTPUT_DIR:-$SAB_WORKSPACE/entropy_artifacts}"
args=("$@")
EDITOR=cat
docker_env=(-e "EDITOR=$EDITOR"
-e "REPOSITORY=$REPOSITORY_NAME"
-e "LC_ALL=en_US.UTF-8")
docker_volumes=(
-v "$OUTPUT_DIR:/sabayon/artifacts"
-v "$createrepo:/sabayon/bin/create_repo.sh"
-v "$entropysrv:/etc/entropy/server.conf"
-v "$PORTAGE_ARTIFACTS:/usr/portage/packages" )
check_docker_requirements
echo "Repository: $REPOSITORY_NAME"
echo "Repository Description: $REPOSITORY_DESCRIPTION"
echo "Remove: ${args[@]}"
# Creating the building script on-the-fly
cat >$createrepo <<EOF
#!/bin/bash
set -e
repo="\${REPOSITORY:-default}"
if [ -d "/sabayon/artifacts/standard" ]; then
eit unlock \$repo || true
eit pull --quick $repo || true
#eit sync \$repo
else
echo "ouch no repository there" && exit 3;
fi
eit clean --quick || { echo "ouch unable to remove" && exit 3; }
eit vacuum --quick || { echo "ouch unable to remove" && exit 3; }
echo "Yes Yes Yes" | eit commit --quick
eit push --quick --force
EOF
chmod +x $createrepo
# Creating the entropy repository configuration on-the-fly
cat >$entropysrv <<EOF
# expiration-days = <internal value>
community-mode = enable
weak-package-files = disable
database-format = bz2
# sync-speed-limit =
# server-basic-languages = en_US C
# disabled-eapis = 1,2
# expiration-based-scope = disable
# nonfree-packages-directory-support = disable
rss-feed = disable
changelog = disable
rss-name = packages.rss
rss-base-url = http://packages.sabayon.org/?quicksearch=
rss-website-url = http://www.sabayon.org/
max-rss-entries = 10000
# max-rss-light-entries = 100
rss-light-name = updates.rss
managing-editor =
broken-reverse-deps = disable
default-repository = $REPOSITORY_NAME
repository=$REPOSITORY_NAME|$REPOSITORY_DESCRIPTION|file:///sabayon/artifacts
EOF
function cleanup {
rm -rf $createrepo
rm -rf $entropysrv
}
trap cleanup EXIT
echo "docker run --rm --entrypoint /bin/bash ${docker_env[@]} ${docker_volumes[@]} -ti $DOCKER_IMAGE /sabayon/bin/create_repo.sh"
docker run --rm --entrypoint /bin/bash "${docker_env[@]}" "${docker_volumes[@]}" -ti $DOCKER_IMAGE /sabayon/bin/create_repo.sh || true
+91
View File
@@ -0,0 +1,91 @@
#!/bin/bash
set -e
. /sbin/sabayondevkit-functions.sh
SAB_WORKSPACE="${SAB_WORKSPACE:-$PWD}"
entropysrv=$(mktemp)
createrepo=$(mktemp)
REPOSITORY_NAME="${REPOSITORY_NAME:-default}"
REPOSITORY_DESCRIPTION="${REPOSITORY_DESCRIPTION:-My Sabayon repository}"
DOCKER_IMAGE="${DOCKER_IMAGE:-sabayon/eit-amd64}"
PORTAGE_ARTIFACTS="${PORTAGE_ARTIFACTS:-$SAB_WORKSPACE/portage_artifacts}"
OUTPUT_DIR="${OUTPUT_DIR:-$SAB_WORKSPACE/entropy_artifacts}"
args=("$@")
EDITOR=cat
docker_env=(-e "EDITOR=$EDITOR"
-e "REPOSITORY=$REPOSITORY_NAME"
-e "LC_ALL=en_US.UTF-8")
docker_volumes=(
-v "$OUTPUT_DIR:/sabayon/artifacts"
-v "$createrepo:/sabayon/bin/create_repo.sh"
-v "$entropysrv:/etc/entropy/server.conf"
-v "$PORTAGE_ARTIFACTS:/usr/portage/packages" )
check_docker_requirements
echo "Repository: $REPOSITORY_NAME"
echo "Repository Description: $REPOSITORY_DESCRIPTION"
echo "Remove: ${args[@]}"
# Creating the building script on-the-fly
cat >$createrepo <<EOF
#!/bin/bash
set -e
repo="\${REPOSITORY:-default}"
if [ -d "/sabayon/artifacts/standard" ]; then
eit unlock \$repo || true
eit pull --quick $repo || true
#eit sync \$repo
else
echo "ouch no repository there" && exit 3;
fi
echo "Yes" | eit rm --from \$repo ${args[@]} || { echo "ouch unable to remove" && exit 3; }
echo "Yes Yes Yes" | eit commit --quick
eit push --quick --force
EOF
chmod +x $createrepo
# Creating the entropy repository configuration on-the-fly
cat >$entropysrv <<EOF
# expiration-days = <internal value>
community-mode = enable
weak-package-files = disable
database-format = bz2
# sync-speed-limit =
# server-basic-languages = en_US C
# disabled-eapis = 1,2
# expiration-based-scope = disable
# nonfree-packages-directory-support = disable
rss-feed = disable
changelog = disable
rss-name = packages.rss
rss-base-url = http://packages.sabayon.org/?quicksearch=
rss-website-url = http://www.sabayon.org/
max-rss-entries = 10000
# max-rss-light-entries = 100
rss-light-name = updates.rss
managing-editor =
broken-reverse-deps = disable
default-repository = $REPOSITORY_NAME
repository=$REPOSITORY_NAME|$REPOSITORY_DESCRIPTION|file:///sabayon/artifacts
EOF
function cleanup {
rm -rf $createrepo
rm -rf $entropysrv
}
trap cleanup EXIT
echo "docker run --rm --entrypoint /bin/bash ${docker_env[@]} ${docker_volumes[@]} -ti $DOCKER_IMAGE /sabayon/bin/create_repo.sh"
docker run --rm --entrypoint /bin/bash "${docker_env[@]}" "${docker_volumes[@]}" -ti $DOCKER_IMAGE /sabayon/bin/create_repo.sh || true
+34
View File
@@ -0,0 +1,34 @@
#!/usr/bin/perl
# Author: mudler@sabayonlinux.org, skullbocks@sabayonlinux.org
use strict;
use DBI;
use feature 'say';
my $arch = $ENV{ARCH} // "amd64";
my $dbh = DBI->connect(
"dbi:SQLite:dbname=/var/lib/entropy/client/database/$arch/equo.db",
"", "", { RaiseError => 1 },
) or die $DBI::errstr;
my $to_build = {};
my $sth = $dbh->prepare(
"SELECT DISTINCT baseinfo.category, baseinfo.name, baseinfo.version FROM baseinfo JOIN needed_libs ON baseinfo.idpackage = needed_libs.idpackage JOIN preserved_libs ON needed_libs.soname = preserved_libs.library"
);
$sth->execute();
my $row;
while ( $row = $sth->fetchrow_arrayref() ) {
$to_build->{"@$row[0]/@$row[1]-@$row[2]"}++;
}
$sth->finish();
my $to_install = join( " ", keys %{$to_build} );
if ( $to_install ne "" ) {
say "Those packages seems to request libs no longer available: $to_install";
}
else {
say "No packages request outdated libs";
}
$dbh->disconnect();
+39
View File
@@ -0,0 +1,39 @@
#!/usr/bin/python
# mudler <mudler@sabayon.org>
# Edit: create a truncated tbz2 with just data
import os
import sys
from portage import xpak
def usage():
sys.stderr.write("usage: %s <tbz2_file>\n" % os.path.basename(sys.argv[0]))
def main():
if len(sys.argv) != 2:
usage()
return 1
input_file = sys.argv[1]
if not os.path.isfile(input_file):
usage()
return 1
output_file = input_file
if output_file.endswith('.tbz2'):
output_file = output_file[:-5]
output_file += '.truncated'
t = xpak.tbz2(input_file)
t.scan()
f = open(input_file, 'rb')
data = f.read(os.stat(input_file).st_size - t.xpaksize)
f.close()
f = open(output_file, 'wb')
f.write(data)
f.close()
return 0
if __name__ == '__main__':
sys.exit(main())
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/python
# mudler <mudler@sabayon.org>
# Edit: truncate a tbz2 with just data
import os
import sys
from portage import xpak
def usage():
sys.stderr.write("usage: %s <tbz2_file>\n" % os.path.basename(sys.argv[0]))
def main():
if len(sys.argv) != 2:
usage()
return 1
input_file = sys.argv[1]
if not os.path.isfile(input_file):
usage()
return 1
t = xpak.tbz2(input_file)
t.scan()
f = open(input_file, 'r+')
f.seek(-t.xpaksize, os.SEEK_END)
f.truncate()
f.close()
return 0
if __name__ == '__main__':
sys.exit(main())
+39
View File
@@ -0,0 +1,39 @@
#!/usr/bin/python
import os
import sys
from portage import xpak
def usage():
sys.stderr.write("usage: %s <tbz2_file>\n" % os.path.basename(sys.argv[0]))
def main():
if len(sys.argv) != 2:
usage()
return 1
input_file = sys.argv[1]
if not os.path.isfile(input_file):
usage()
return 1
output_file = input_file
if output_file.endswith('.tbz2'):
output_file = output_file[:-5]
output_file += '.xpak'
t = xpak.tbz2(input_file)
t.scan()
f = open(input_file, 'rb')
f.seek(-t.xpaksize, 2)
data = f.read()
f.close()
f = open(output_file, 'wb')
f.write(data)
f.close()
return 0
if __name__ == '__main__':
sys.exit(main())
+3 -1
View File
@@ -4,9 +4,11 @@ check_docker_requirements(){
if [ "$(id -u)" != "0" ]; then 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)" 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 fi
ps aux | grep -q '[d]ocker' || echo "--> Be sure to have the docker daemon running (sudo systemctl start docker)" 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
} }
die() { echo "$@" 1>&2 ; exit 1; }
build() { build() {
local SEARCH=$1 local SEARCH=$1
local EMERGE_DEFAULT_ARGS=${2:---accept-properties=-interactive --verbose --oneshot --nospinner --quiet-build=y --quiet-fail --fail-clean=y --complete-graph --buildpkg} local EMERGE_DEFAULT_ARGS=${2:---accept-properties=-interactive --verbose --oneshot --nospinner --quiet-build=y --quiet-fail --fail-clean=y --complete-graph --buildpkg}