Compare commits

..

26 Commits

Author SHA1 Message Date
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
6 changed files with 162 additions and 18 deletions
+46 -17
View File
@@ -14,8 +14,12 @@ $ENV{FEATURES} = $ENV{FEATURES}
my $equo_install_atoms = $ENV{EQUO_INSTALL_ATOMS} // 1;
my $equo_install_version = $ENV{EQUO_INSTALL_VERSION} // 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 $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};
@@ -60,23 +64,34 @@ sub calculate_missing {
my $package = shift;
my $depth = shift;
my @Installed_Packages = @{+shift};
my @Available_Packages = @{+shift};
# 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 @Installed_Packages = qx/equo q --quiet list installed/;
chomp(@Installed_Packages);
say "[$package] Getting the package dependencies and the installed packages";
my @dependencies = package_deps( $package, $depth, 1 );
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
my %installed_packs =
map { ( split( /\s/, $_ ) )[3] => 1 } @Installed_Packages;
my %available_packs = map { $_ => 1 } available_packages();
map { $_ => 1 } @Installed_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
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;
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;
}
@@ -157,8 +172,15 @@ auto-sync = no' > /etc/portage/repos.conf/local.conf
system("mkdir -p /usr/portage/distfiles/git3-src");
# sync portage and overlays
system("layman -S;emerge --sync");
unless($skip_portage_sync == 1){
# sync portage and overlays
system("layman -S");
if($webrsync == 1){
system("emerge-webrsync");
} else {
system("emerge --sync");
}
}
# preparing for MOAR automation
qx|eselect profile set $profile|;
@@ -174,8 +196,10 @@ if ($use_equo && $entropy_repository eq "weekly" ) {
qx|equo repo enable sabayon-limbo|;
}
system("equo repo mirrorsort sabayonlinux.org;equo up && equo u")
if $use_equo; # Better don't be behind
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;
@@ -185,11 +209,14 @@ my @packages = @ARGV;
if ($use_equo) {
my @packages_deps;
my @Installed_Packages = qx/equo q list installed --quiet/;
my @Available_Packages = available_packages();
chomp(@Installed_Packages);
foreach my $p (@packages) {
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;
push( @packages_deps, package_deps( $p, 2, 0 ) )
push( @packages_deps, package_deps( $p, $dep_scan_depth, 0 ) )
if $equo_install_version;
say "[$p] Done"
}
@@ -197,11 +224,13 @@ if ($use_equo) {
say "", "[install] Installing missing dependencies with equo", @packages_deps, "";
if ($equo_split_install) {
system("equo i --bdeps $_") for (@packages_deps,@equo_install);
system("equo rm --nodeps $_") for (@equo_remove);
if (@equo_remove > 0){
system("equo rm --nodeps $_") for (@equo_remove);
}
}
else {
system("equo i --bdeps @packages_deps @equo_install");
system("equo rm --nodeps @equo_remove");
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);
}
}
+5
View File
@@ -22,17 +22,22 @@ 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"
+1 -1
View File
@@ -101,7 +101,7 @@ echo "docker $DOCKER_OPTS ${docker_env[@]} ${docker_volumes[@]} $DOCKER_IMAGE /
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 $SAB_WORKSPACE/entropy_artifacts"
echo "The Sabayon repository files are in $OUTPUT_DIR"
echo "Now you can upload its content where you want"
echo ""
+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())