Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5c927a25c6 | |||
| 813148303c | |||
| 5a3be7c0f1 | |||
| 6fbd3f4f22 | |||
| 0be7f76824 | |||
| 7b2adad931 | |||
| 6283b34be8 | |||
| 11812ff1a2 | |||
| e31a06cee3 | |||
| b91870c72d | |||
| b1726fdb4d | |||
| 6d0f26ceb7 | |||
| 49ba945b63 | |||
| f55338b552 | |||
| 0c964e4b64 | |||
| 5f75f6e64b | |||
| 9fd7ce2582 | |||
| a62baaf0ea | |||
| bf78080418 | |||
| 218dfa9dcd | |||
| 575ec04147 | |||
| 903aa0fa0d | |||
| ada5793612 |
@@ -0,0 +1 @@
|
||||
*.bak
|
||||
@@ -3,6 +3,7 @@
|
||||
use Getopt::Long;
|
||||
use v5.10;
|
||||
no feature "say";
|
||||
use Storable 'dclone';
|
||||
|
||||
my $profile = $ENV{BUILDER_PROFILE} // 3;
|
||||
my $jobs = $ENV{BUILDER_JOBS} // 1;
|
||||
@@ -40,6 +41,10 @@ my $remote_overlay = $ENV{REMOTE_OVERLAY};
|
||||
my $qualityassurance_checks = $ENV{QA_CHECKS} // 0;
|
||||
my $remote_conf_portdir = $ENV{REMOTE_CONF_PORTDIR};
|
||||
my $remote_portdir = $ENV{REMOTE_PORTDIR};
|
||||
my $pretend = $ENV{PRETEND} // 0;
|
||||
my $obsoleted = $ENV{DETECT_OBSOLETE} // 0;
|
||||
my $target_overlay = $ENV{TARGET_OVERLAY};
|
||||
my $verbose = $ENV{BUILDER_VERBOSE} // 0;
|
||||
|
||||
my $make_conf = $ENV{MAKE_CONF};
|
||||
|
||||
@@ -63,11 +68,16 @@ sub say { print join( "\n", @_ ) . "\n"; }
|
||||
|
||||
sub safe_call {
|
||||
my $cmd = shift;
|
||||
my $rt = system($cmd);
|
||||
my $rt = _system($cmd);
|
||||
my $return = $rt >> 8;
|
||||
exit($return) if ($rt);
|
||||
}
|
||||
|
||||
sub _system {
|
||||
say "Executing: @_" if $verbose;
|
||||
return system(@_);
|
||||
}
|
||||
|
||||
sub append_to_file {
|
||||
my ( $file_name, $package ) = @_;
|
||||
|
||||
@@ -88,6 +98,10 @@ sub append_to_file {
|
||||
close $fh_a;
|
||||
}
|
||||
|
||||
sub parse_overlays {
|
||||
map { $_ =~ s/.*?\:\://g; $_ } grep {/\:\:/} @{ dclone( \@_ ) };
|
||||
}
|
||||
|
||||
sub add_portage_repository {
|
||||
my $repo = $_[0];
|
||||
my $reponame;
|
||||
@@ -107,7 +121,7 @@ sub add_portage_repository {
|
||||
}
|
||||
$reponame = ( split( /\//, $repo ) )[-1] if !$reponame;
|
||||
$reponame =~ s/\.|//g; #clean
|
||||
system("mkdir -p /etc/portage/repos.conf/")
|
||||
_system("mkdir -p /etc/portage/repos.conf/")
|
||||
if ( !-d "/etc/portage/repos.conf/" );
|
||||
|
||||
say "==== Adding $reponame ====";
|
||||
@@ -119,7 +133,7 @@ sync-uri = $repo
|
||||
auto-sync = yes' > /etc/portage/repos.conf/$reponame.conf
|
||||
}; # Declaring the repo and giving priority
|
||||
|
||||
system("emaint sync -r $reponame");
|
||||
_system("emaint sync -r $reponame");
|
||||
}
|
||||
|
||||
# Input: package, depth, and atom. Package: sys-fs/foobarfs, Depth: 1 (depth of the package tree) , Atom: 1/0 (enable disable atom output)
|
||||
@@ -145,7 +159,7 @@ sub package_deps {
|
||||
@dependencies = uniq(
|
||||
sort
|
||||
grep {$_}
|
||||
map { $_ =~ s/\[.*\]|\s//g; &atom($_) if $atom; $_ }
|
||||
map { $_ =~ s/\[.*\]|\s//g; &abs_atom($_) if $atom; $_ }
|
||||
@dependencies
|
||||
);
|
||||
|
||||
@@ -226,8 +240,17 @@ sub calculate_missing {
|
||||
# Output: atom form (sys-fs/foobarfs)
|
||||
sub atom { s/-[0-9]{1,}.*$//; }
|
||||
|
||||
sub abs_atom { atom; s/^(\<|\>|=)+// }
|
||||
|
||||
# Same again as a function
|
||||
sub to_atom { my $p = shift; $p =~ s/-[0-9]{1,}.*$//; return $p; }
|
||||
sub to_atom { my $p = shift; local $_ = $p; atom; return $_; }
|
||||
|
||||
sub to_abs_atom {
|
||||
my $p = shift;
|
||||
$p = to_atom($p);
|
||||
$p =~ s/^(\<|\>|=)+//;
|
||||
return $p;
|
||||
}
|
||||
|
||||
# Input: Array
|
||||
# Output: array with unique elements
|
||||
@@ -235,8 +258,9 @@ sub uniq {
|
||||
keys %{ { map { $_ => 1 } @_ } };
|
||||
}
|
||||
|
||||
sub detect_useflags
|
||||
{ # Detect useflags defined as [-alsa,avahi] in atom, and fill $hash within the $target sub-hash
|
||||
# Detect useflags defined as [-alsa,avahi] in atom,
|
||||
# and fill $hash within the $target sub-hash
|
||||
sub detect_useflags {
|
||||
my ( $target, $packages ) = @_;
|
||||
my @packs = @{$packages};
|
||||
for my $i ( 0 .. $#packs ) {
|
||||
@@ -265,20 +289,20 @@ sub compile_packs {
|
||||
say "USEFLAGS: "
|
||||
. join( " ",
|
||||
@{ $per_package_useflags->{$target}->[$package_counter] } );
|
||||
$tmp_rt = system(
|
||||
$tmp_rt = _system(
|
||||
"USE=\""
|
||||
. join(
|
||||
" ",
|
||||
@{ $per_package_useflags->{$target}->[$package_counter]
|
||||
}
|
||||
)
|
||||
. "\" emerge $emerge_defaults_args -j $jobs $extra_arg $pack"
|
||||
. "\" emerge $emerge_defaults_args -j $jobs $extra_arg '$pack'"
|
||||
);
|
||||
}
|
||||
else {
|
||||
$tmp_rt =
|
||||
system(
|
||||
"emerge $emerge_defaults_args -j $jobs $extra_arg $pack");
|
||||
_system(
|
||||
"emerge $emerge_defaults_args -j $jobs $extra_arg '$pack'");
|
||||
}
|
||||
$package_counter++;
|
||||
|
||||
@@ -302,6 +326,17 @@ sub help {
|
||||
|
||||
say "****************************************************";
|
||||
|
||||
my $per_package_useflags;
|
||||
my @packages = @ARGV;
|
||||
my @injected_packages =
|
||||
$build_injected_args ? split( / /, $build_injected_args ) : ();
|
||||
my @parsed_overlays =
|
||||
grep { $_ !~ /gentoo/i } parse_overlays( @packages, @injected_packages );
|
||||
|
||||
say "Detected overlays: @parsed_overlays" if @parsed_overlays;
|
||||
|
||||
@overlays = uniq( @overlays, @parsed_overlays );
|
||||
|
||||
if ( @overlays > 0 ) {
|
||||
say "Overlay(s) to add";
|
||||
foreach my $overlay (@overlays) {
|
||||
@@ -315,44 +350,52 @@ say "\t* " . $_ for @ARGV;
|
||||
|
||||
say "[*] Syncing configurations files, Layman and Portage";
|
||||
|
||||
if ($pretend) {
|
||||
say "[*] PRETEND enabled, no real action will be performed.";
|
||||
say " Bear in mind that in such way the list of packages";
|
||||
say " that emerge will try to compile will be bigger";
|
||||
$equo_install_args .= " -p";
|
||||
$emerge_defaults_args .= " -p";
|
||||
}
|
||||
|
||||
# Syncronizing portage configuration and adding overlays
|
||||
system("echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen"); #be sure about that.
|
||||
|
||||
# If defined, fetch a remote /etc/portage
|
||||
if ( $remote_conf_portdir ne "" ) {
|
||||
system("rm -rf /etc/portage");
|
||||
system("git clone $remote_conf_portdir /etc/portage");
|
||||
system("chown -R portage:portage /etc/portage");
|
||||
system("chmod -R ug+w,a+rX /etc/portage");
|
||||
_system("rm -rf /etc/portage");
|
||||
_system("git clone $remote_conf_portdir /etc/portage");
|
||||
_system("chown -R portage:portage /etc/portage");
|
||||
_system("chmod -R ug+w,a+rX /etc/portage");
|
||||
}
|
||||
else {
|
||||
system("cd /etc/portage/;git checkout master; git stash; git pull");
|
||||
_system("cd /etc/portage/;git checkout master; git stash; git pull");
|
||||
}
|
||||
|
||||
# If defined, fetch a remote /usr/portage
|
||||
if ( $remote_portdir ne "" ) {
|
||||
system("rm -rf /usr/portage");
|
||||
system("git clone $remote_portdir /usr/portage");
|
||||
system("chown -R portage:portage /usr/portage");
|
||||
system("chmod -R ug+w,a+rX /usr/portage");
|
||||
_system("rm -rf /usr/portage");
|
||||
_system("git clone $remote_portdir /usr/portage");
|
||||
_system("chown -R portage:portage /usr/portage");
|
||||
_system("chmod -R ug+w,a+rX /usr/portage");
|
||||
}
|
||||
system("mkdir /var/lib/layman") if ( !-d "/var/lib/layman" );
|
||||
system("touch /var/lib/layman/make.conf && layman-updater -R")
|
||||
_system("mkdir /var/lib/layman") if ( !-d "/var/lib/layman" );
|
||||
_system("touch /var/lib/layman/make.conf && layman-updater -R")
|
||||
if ( !-e "/var/lib/layman/make.conf" );
|
||||
|
||||
system("echo 'y' | layman -f -a $_") for @overlays;
|
||||
_system("echo 'y' | layman -f -a $_") for @overlays;
|
||||
|
||||
my $reponame = "LocalOverlay";
|
||||
|
||||
# Setting up a local overlay if doesn't exists
|
||||
system(
|
||||
_system(
|
||||
"rm -rf /usr/local/portage;cp -rf /usr/local/local_portage /usr/local/portage"
|
||||
) if ( -d "/usr/local/local_portage" );
|
||||
|
||||
if ( !-f "/usr/local/portage/profiles/repo_name" ) {
|
||||
system("mkdir -p /usr/local/portage/{metadata,profiles}");
|
||||
system("echo 'LocalOverlay' > /usr/local/portage/profiles/repo_name");
|
||||
system(
|
||||
_system("mkdir -p /usr/local/portage/{metadata,profiles}");
|
||||
_system("echo 'LocalOverlay' > /usr/local/portage/profiles/repo_name");
|
||||
_system(
|
||||
"echo 'masters = gentoo' > /usr/local/portage/metadata/layout.conf");
|
||||
}
|
||||
else {
|
||||
@@ -362,8 +405,8 @@ else {
|
||||
chomp(@FILE);
|
||||
$reponame = $FILE[0];
|
||||
}
|
||||
system("chown -R portage:portage /usr/local/portage");
|
||||
system("chmod -R 755 /usr/local/portage");
|
||||
_system("chown -R portage:portage /usr/local/portage");
|
||||
_system("chmod -R 755 /usr/local/portage");
|
||||
|
||||
qx{
|
||||
echo '[$reponame]
|
||||
@@ -380,48 +423,48 @@ if ( $remote_overlay and $remote_overlay ne "" ) {
|
||||
if ( $remove_layman_overlay and $remove_layman_overlay ne "" ) {
|
||||
say "===== Removing overlays: $remove_remote_overlay =====";
|
||||
|
||||
system("layman -d $_") for ( split( / /, $remove_layman_overlay ) );
|
||||
_system("layman -d $_") for ( split( / /, $remove_layman_overlay ) );
|
||||
}
|
||||
if ( $remove_remote_overlay and $remove_remote_overlay ne "" ) {
|
||||
say "===== Removing overlays: $remove_remote_overlay =====";
|
||||
system( "rm -rfv /etc/portage/" . $_ . ".conf" )
|
||||
_system( "rm -rfv /etc/portage/" . $_ . ".conf" )
|
||||
for ( split( / /, $remote_overlay ) );
|
||||
}
|
||||
|
||||
system("mkdir -p /usr/portage/distfiles/git3-src");
|
||||
_system("mkdir -p /usr/portage/distfiles/git3-src");
|
||||
|
||||
unless ( $skip_portage_sync == 1 ) {
|
||||
|
||||
# sync portage and overlays
|
||||
system("layman -S");
|
||||
_system("layman -S");
|
||||
if ( $webrsync == 1 ) {
|
||||
system("emerge-webrsync");
|
||||
_system("emerge-webrsync");
|
||||
}
|
||||
else {
|
||||
system("emerge --sync");
|
||||
_system("emerge --sync");
|
||||
}
|
||||
}
|
||||
|
||||
# preparing for MOAR automation
|
||||
say "Setting new profile to $profile" if defined $profile;
|
||||
qx|eselect profile set $profile| if defined $profile;
|
||||
system("eselect profile list") if defined $profile;
|
||||
say "Setting new profile to $profile" if defined $profile;
|
||||
_system("eselect profile set $profile") if defined $profile;
|
||||
_system("eselect profile list") if defined $profile;
|
||||
|
||||
if ( $use_equo && $entropy_repository eq "weekly" ) {
|
||||
qx|equo repo disable sabayonlinux.org|;
|
||||
qx|equo repo enable sabayon-weekly|;
|
||||
_system("equo repo disable sabayonlinux.org");
|
||||
_system("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|;
|
||||
_system("equo repo disable sabayon-weekly");
|
||||
_system("equo repo enable sabayonlinux.org");
|
||||
_system("equo repo enable sabayon-limbo");
|
||||
}
|
||||
|
||||
if ($use_equo) {
|
||||
|
||||
say "Devkit version:";
|
||||
system("equo s -vq app-misc/sabayon-devkit");
|
||||
|
||||
_system("equo s -vq app-misc/sabayon-devkit");
|
||||
_system("enman list --installed -q");
|
||||
my $enman_list_output = qx|enman list --installed -q|;
|
||||
chomp($enman_list_output);
|
||||
my @installed_enman_repos = split( /\n/, $enman_list_output );
|
||||
@@ -444,25 +487,19 @@ if ($use_equo) {
|
||||
}
|
||||
}
|
||||
|
||||
system("enman add $repository_name")
|
||||
_system("enman add $repository_name")
|
||||
if ($enman_add_self
|
||||
and $repository_name
|
||||
and $repository_name ne "" );
|
||||
system("equo repo mirrorsort sabayonlinux.org") if $equo_mirrorsort;
|
||||
system("equo up && equo u");
|
||||
_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;
|
||||
_system("cp -rf $make_conf /etc/portage/make.conf") if $make_conf;
|
||||
|
||||
my $per_package_useflags;
|
||||
my @packages = @ARGV;
|
||||
my @injected_packages = ();
|
||||
if ($build_injected_args) {
|
||||
@injected_packages = split( / /, $build_injected_args );
|
||||
if (@injected_packages) {
|
||||
say "[*] Injected installs:";
|
||||
|
||||
say "\t* " . $_ for @injected_packages;
|
||||
|
||||
}
|
||||
|
||||
# Allow users to specify atoms as: media-tv/kodi[-alsa,avahi]
|
||||
@@ -520,49 +557,45 @@ if ($use_equo) {
|
||||
say "", "[install] Those dependencies will be installed with equo :",
|
||||
@packages_deps, "";
|
||||
if ($equo_split_install) {
|
||||
safe_call("equo i $equo_install_args --bdeps $_")
|
||||
safe_call("equo i $equo_install_args --bdeps '$_'")
|
||||
for ( @packages_deps, @equo_install )
|
||||
; ## bail out here, if installs fails. emerge will compile a LOT of stuff
|
||||
if ( @equo_remove > 0 ) {
|
||||
system("equo rm --nodeps $_") for (@equo_remove);
|
||||
if ( @equo_remove > 0 and !$pretend ) {
|
||||
say "Removing with equo: @equo_remove";
|
||||
_system("equo rm --nodeps '$_'") for (@equo_remove);
|
||||
}
|
||||
}
|
||||
else {
|
||||
safe_call(
|
||||
"equo i $equo_install_args --bdeps @packages_deps @equo_install")
|
||||
if ( @packages_deps > 0 or @equo_install > 0 )
|
||||
my @p = map {"'$_'"} ( @packages_deps, @equo_install );
|
||||
my @r = map {"'$_'"} @equo_remove;
|
||||
safe_call("equo i $equo_install_args --bdeps @p")
|
||||
if ( @p > 0 )
|
||||
; ## bail out here, if installs fails. emerge will compile a LOT of stuff
|
||||
system("equo rm --nodeps @equo_remove") if ( @equo_remove > 0 );
|
||||
}
|
||||
}
|
||||
|
||||
if ( $qualityassurance_checks == 1 ) {
|
||||
say "*** Repoman checks ***";
|
||||
for ( @packages, @injected_packages ) {
|
||||
say "*** QA checks for $_";
|
||||
system(
|
||||
"pushd \$(dirname \$(equery which $_ 2>/dev/null)); repoman; popd"
|
||||
);
|
||||
_system("equo rm --nodeps @r") if ( @r > 0 );
|
||||
}
|
||||
}
|
||||
|
||||
say "*** Ready to compile, finger crossed ***";
|
||||
|
||||
system("emerge --info")
|
||||
_system("emerge --info")
|
||||
; #always give detailed information about the building environment, helpful to debug
|
||||
|
||||
my $rt;
|
||||
|
||||
if ( $emerge_remove and $emerge_remove ne "" ) {
|
||||
system("emerge -C $_") for split( / /, $emerge_remove );
|
||||
say "Removing with emerge: $emerge_remove";
|
||||
_system("emerge -C '$_'") for split( / /, $emerge_remove );
|
||||
}
|
||||
|
||||
_system("chmod +x /pre-script;./pre-script") if -e "/pre-script";
|
||||
|
||||
if ($emerge_split_install) {
|
||||
compile_packs( "targets", @packages );
|
||||
$rt = 0; #consider the build good anyway, like a "keep-going"
|
||||
}
|
||||
else {
|
||||
$rt = system("emerge $emerge_defaults_args -j $jobs @packages");
|
||||
my @p = map {"'$_'"} @packages;
|
||||
$rt = _system("emerge $emerge_defaults_args -j $jobs @p");
|
||||
}
|
||||
|
||||
my $return = $rt >> 8;
|
||||
@@ -570,25 +603,38 @@ my $return = $rt >> 8;
|
||||
# best effort -B
|
||||
compile_packs( "injected_targets", @injected_packages );
|
||||
|
||||
if ($preserved_rebuild) {
|
||||
_system("chmod +x /post-script;./post-script") if -e "/post-script";
|
||||
|
||||
system("emerge -j $jobs --buildpkg \@preserved-rebuild");
|
||||
system("revdep-rebuild");
|
||||
if ( $preserved_rebuild and !$pretend ) {
|
||||
|
||||
_system("emerge -j $jobs --buildpkg \@preserved-rebuild");
|
||||
_system("revdep-rebuild");
|
||||
|
||||
}
|
||||
|
||||
if ( $qualityassurance_checks == 1 ) {
|
||||
say "*** Missing dependencies checks ***";
|
||||
for (@packages) {
|
||||
say "*** DEPEND for $_";
|
||||
system("dynlink-scanner $_");
|
||||
system("depcheck $_");
|
||||
say "*** Quality assurance ***";
|
||||
foreach my $pn ( map { abs_atom; $_ } ( @packages, @injected_packages ) )
|
||||
{
|
||||
say ">> Running repoman on $pn";
|
||||
_system(
|
||||
"pushd \$(dirname \$(equery which '$pn' 2>/dev/null)); repoman; popd"
|
||||
);
|
||||
$pn =~ s/\:\:.*//g;
|
||||
say ">> Detecting missing dependencies for $pn";
|
||||
_system("dynlink-scanner '$pn'");
|
||||
_system("depcheck '$pn'");
|
||||
}
|
||||
}
|
||||
|
||||
if ( $obsoleted and $target_overlay ) {
|
||||
say "*** Detecting obsoletes ***";
|
||||
_system("sabayon-detectobsolete --overlay ${target_overlay}");
|
||||
}
|
||||
|
||||
# Copy files to artifacts folder
|
||||
system(
|
||||
"mkdir -p $artifacts_folder;cp -rfv /usr/portage/packages $artifacts_folder"
|
||||
) if ( $artifacts_folder and !$return );
|
||||
) if ( $artifacts_folder and !$return and !$pretend );
|
||||
|
||||
exit($return);
|
||||
|
||||
+10
-2
@@ -8,7 +8,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 +41,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 +57,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"
|
||||
@@ -84,4 +92,4 @@ 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 $@
|
||||
docker run $DOCKER_OPTS "${docker_env[@]}" "${docker_volumes[@]}" $DOCKER_IMAGE "$@"
|
||||
|
||||
Executable
+65
@@ -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;
|
||||
@@ -1,10 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
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) of 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; }
|
||||
@@ -12,12 +14,12 @@ die() { echo "$@" 1>&2 ; exit 1; }
|
||||
build_sync() {
|
||||
layman -S
|
||||
emerge --sync
|
||||
eix-update || exit 1
|
||||
eix-update
|
||||
pushd /opt/sabayon-build/
|
||||
git stash
|
||||
git fetch --all
|
||||
git checkout master
|
||||
git reset --hard origin/master
|
||||
git fetch --all || true
|
||||
git checkout master || true
|
||||
git reset --hard origin/master || true
|
||||
popd
|
||||
}
|
||||
|
||||
@@ -27,7 +29,7 @@ build_category() {
|
||||
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
|
||||
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
|
||||
}
|
||||
|
||||
@@ -36,7 +38,7 @@ build_obsolete() {
|
||||
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
|
||||
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
|
||||
}
|
||||
|
||||
@@ -46,7 +48,7 @@ build_category_installed() {
|
||||
for i in $(EIX_LIMIT=0 eix -I --only-names --pure-packages "$SEARCH/" | xargs echo | uniq);
|
||||
do
|
||||
echo "Building $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
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user