Compare commits
24 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 928d6da693 | |||
| 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 Getopt::Long;
|
||||||
use v5.10;
|
use v5.10;
|
||||||
no feature "say";
|
no feature "say";
|
||||||
|
use Storable 'dclone';
|
||||||
|
|
||||||
my $profile = $ENV{BUILDER_PROFILE} // 3;
|
my $profile = $ENV{BUILDER_PROFILE} // 3;
|
||||||
my $jobs = $ENV{BUILDER_JOBS} // 1;
|
my $jobs = $ENV{BUILDER_JOBS} // 1;
|
||||||
@@ -40,6 +41,10 @@ my $remote_overlay = $ENV{REMOTE_OVERLAY};
|
|||||||
my $qualityassurance_checks = $ENV{QA_CHECKS} // 0;
|
my $qualityassurance_checks = $ENV{QA_CHECKS} // 0;
|
||||||
my $remote_conf_portdir = $ENV{REMOTE_CONF_PORTDIR};
|
my $remote_conf_portdir = $ENV{REMOTE_CONF_PORTDIR};
|
||||||
my $remote_portdir = $ENV{REMOTE_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};
|
my $make_conf = $ENV{MAKE_CONF};
|
||||||
|
|
||||||
@@ -63,11 +68,16 @@ sub say { print join( "\n", @_ ) . "\n"; }
|
|||||||
|
|
||||||
sub safe_call {
|
sub safe_call {
|
||||||
my $cmd = shift;
|
my $cmd = shift;
|
||||||
my $rt = system($cmd);
|
my $rt = _system($cmd);
|
||||||
my $return = $rt >> 8;
|
my $return = $rt >> 8;
|
||||||
exit($return) if ($rt);
|
exit($return) if ($rt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub _system {
|
||||||
|
say "Executing: @_" if $verbose;
|
||||||
|
return system(@_);
|
||||||
|
}
|
||||||
|
|
||||||
sub append_to_file {
|
sub append_to_file {
|
||||||
my ( $file_name, $package ) = @_;
|
my ( $file_name, $package ) = @_;
|
||||||
|
|
||||||
@@ -88,6 +98,10 @@ sub append_to_file {
|
|||||||
close $fh_a;
|
close $fh_a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub parse_overlays {
|
||||||
|
map { $_ =~ s/.*?\:\://g; $_ } grep {/\:\:/} @{ dclone( \@_ ) };
|
||||||
|
}
|
||||||
|
|
||||||
sub add_portage_repository {
|
sub add_portage_repository {
|
||||||
my $repo = $_[0];
|
my $repo = $_[0];
|
||||||
my $reponame;
|
my $reponame;
|
||||||
@@ -107,7 +121,7 @@ sub add_portage_repository {
|
|||||||
}
|
}
|
||||||
$reponame = ( split( /\//, $repo ) )[-1] if !$reponame;
|
$reponame = ( split( /\//, $repo ) )[-1] if !$reponame;
|
||||||
$reponame =~ s/\.|//g; #clean
|
$reponame =~ s/\.|//g; #clean
|
||||||
system("mkdir -p /etc/portage/repos.conf/")
|
_system("mkdir -p /etc/portage/repos.conf/")
|
||||||
if ( !-d "/etc/portage/repos.conf/" );
|
if ( !-d "/etc/portage/repos.conf/" );
|
||||||
|
|
||||||
say "==== Adding $reponame ====";
|
say "==== Adding $reponame ====";
|
||||||
@@ -119,7 +133,7 @@ sync-uri = $repo
|
|||||||
auto-sync = yes' > /etc/portage/repos.conf/$reponame.conf
|
auto-sync = yes' > /etc/portage/repos.conf/$reponame.conf
|
||||||
}; # Declaring the repo and giving priority
|
}; # 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)
|
# Input: package, depth, and atom. Package: sys-fs/foobarfs, Depth: 1 (depth of the package tree) , Atom: 1/0 (enable disable atom output)
|
||||||
@@ -135,7 +149,7 @@ sub package_deps {
|
|||||||
|
|
||||||
if ( !exists $package_dep_cache{$cache_key} ) {
|
if ( !exists $package_dep_cache{$cache_key} ) {
|
||||||
my @dependencies =
|
my @dependencies =
|
||||||
qx/equery -C -q g --depth=$depth $package/; #depth=0 it's all
|
qx/equery -C -q g --depth=$depth '$package'/; #depth=0 it's all
|
||||||
chomp @dependencies;
|
chomp @dependencies;
|
||||||
|
|
||||||
# If an unversioned atom is given, equery returns results for all versions in the portage tree
|
# If an unversioned atom is given, equery returns results for all versions in the portage tree
|
||||||
@@ -145,7 +159,7 @@ sub package_deps {
|
|||||||
@dependencies = uniq(
|
@dependencies = uniq(
|
||||||
sort
|
sort
|
||||||
grep {$_}
|
grep {$_}
|
||||||
map { $_ =~ s/\[.*\]|\s//g; &atom($_) if $atom; $_ }
|
map { $_ =~ s/\[.*\]|\s//g; &abs_atom($_) if $atom; $_ }
|
||||||
@dependencies
|
@dependencies
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -226,8 +240,12 @@ sub calculate_missing {
|
|||||||
# Output: atom form (sys-fs/foobarfs)
|
# Output: atom form (sys-fs/foobarfs)
|
||||||
sub atom { s/-[0-9]{1,}.*$//; }
|
sub atom { s/-[0-9]{1,}.*$//; }
|
||||||
|
|
||||||
|
sub abs_atom { atom; s/^(\<|\>|=)+// }
|
||||||
|
|
||||||
# Same again as a function
|
# 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; local $_ = $p; abs_atom; return $_; }
|
||||||
|
|
||||||
# Input: Array
|
# Input: Array
|
||||||
# Output: array with unique elements
|
# Output: array with unique elements
|
||||||
@@ -235,8 +253,9 @@ sub uniq {
|
|||||||
keys %{ { map { $_ => 1 } @_ } };
|
keys %{ { map { $_ => 1 } @_ } };
|
||||||
}
|
}
|
||||||
|
|
||||||
sub detect_useflags
|
# Detect useflags defined as [-alsa,avahi] in atom,
|
||||||
{ # Detect useflags defined as [-alsa,avahi] in atom, and fill $hash within the $target sub-hash
|
# and fill $hash within the $target sub-hash
|
||||||
|
sub detect_useflags {
|
||||||
my ( $target, $packages ) = @_;
|
my ( $target, $packages ) = @_;
|
||||||
my @packs = @{$packages};
|
my @packs = @{$packages};
|
||||||
for my $i ( 0 .. $#packs ) {
|
for my $i ( 0 .. $#packs ) {
|
||||||
@@ -265,20 +284,20 @@ sub compile_packs {
|
|||||||
say "USEFLAGS: "
|
say "USEFLAGS: "
|
||||||
. join( " ",
|
. join( " ",
|
||||||
@{ $per_package_useflags->{$target}->[$package_counter] } );
|
@{ $per_package_useflags->{$target}->[$package_counter] } );
|
||||||
$tmp_rt = system(
|
$tmp_rt = _system(
|
||||||
"USE=\""
|
"USE=\""
|
||||||
. join(
|
. join(
|
||||||
" ",
|
" ",
|
||||||
@{ $per_package_useflags->{$target}->[$package_counter]
|
@{ $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 {
|
else {
|
||||||
$tmp_rt =
|
$tmp_rt =
|
||||||
system(
|
_system(
|
||||||
"emerge $emerge_defaults_args -j $jobs $extra_arg $pack");
|
"emerge $emerge_defaults_args -j $jobs $extra_arg '$pack'");
|
||||||
}
|
}
|
||||||
$package_counter++;
|
$package_counter++;
|
||||||
|
|
||||||
@@ -302,6 +321,17 @@ sub help {
|
|||||||
|
|
||||||
say "****************************************************";
|
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 ) {
|
if ( @overlays > 0 ) {
|
||||||
say "Overlay(s) to add";
|
say "Overlay(s) to add";
|
||||||
foreach my $overlay (@overlays) {
|
foreach my $overlay (@overlays) {
|
||||||
@@ -315,44 +345,52 @@ say "\t* " . $_ for @ARGV;
|
|||||||
|
|
||||||
say "[*] Syncing configurations files, Layman and Portage";
|
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
|
# Syncronizing portage configuration and adding overlays
|
||||||
system("echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen"); #be sure about that.
|
system("echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen"); #be sure about that.
|
||||||
|
|
||||||
# If defined, fetch a remote /etc/portage
|
# If defined, fetch a remote /etc/portage
|
||||||
if ( $remote_conf_portdir ne "" ) {
|
if ( $remote_conf_portdir ne "" ) {
|
||||||
system("rm -rf /etc/portage");
|
_system("rm -rf /etc/portage");
|
||||||
system("git clone $remote_conf_portdir /etc/portage");
|
_system("git clone $remote_conf_portdir /etc/portage");
|
||||||
system("chown -R portage:portage /etc/portage");
|
_system("chown -R portage:portage /etc/portage");
|
||||||
system("chmod -R ug+w,a+rX /etc/portage");
|
_system("chmod -R ug+w,a+rX /etc/portage");
|
||||||
}
|
}
|
||||||
else {
|
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 defined, fetch a remote /usr/portage
|
||||||
if ( $remote_portdir ne "" ) {
|
if ( $remote_portdir ne "" ) {
|
||||||
system("rm -rf /usr/portage");
|
_system("rm -rf /usr/portage");
|
||||||
system("git clone $remote_portdir /usr/portage");
|
_system("git clone $remote_portdir /usr/portage");
|
||||||
system("chown -R portage:portage /usr/portage");
|
_system("chown -R portage:portage /usr/portage");
|
||||||
system("chmod -R ug+w,a+rX /usr/portage");
|
_system("chmod -R ug+w,a+rX /usr/portage");
|
||||||
}
|
}
|
||||||
system("mkdir /var/lib/layman") if ( !-d "/var/lib/layman" );
|
_system("mkdir /var/lib/layman") if ( !-d "/var/lib/layman" );
|
||||||
system("touch /var/lib/layman/make.conf && layman-updater -R")
|
_system("touch /var/lib/layman/make.conf && layman-updater -R")
|
||||||
if ( !-e "/var/lib/layman/make.conf" );
|
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";
|
my $reponame = "LocalOverlay";
|
||||||
|
|
||||||
# Setting up a local overlay if doesn't exists
|
# 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"
|
"rm -rf /usr/local/portage;cp -rf /usr/local/local_portage /usr/local/portage"
|
||||||
) if ( -d "/usr/local/local_portage" );
|
) if ( -d "/usr/local/local_portage" );
|
||||||
|
|
||||||
if ( !-f "/usr/local/portage/profiles/repo_name" ) {
|
if ( !-f "/usr/local/portage/profiles/repo_name" ) {
|
||||||
system("mkdir -p /usr/local/portage/{metadata,profiles}");
|
_system("mkdir -p /usr/local/portage/{metadata,profiles}");
|
||||||
system("echo 'LocalOverlay' > /usr/local/portage/profiles/repo_name");
|
_system("echo 'LocalOverlay' > /usr/local/portage/profiles/repo_name");
|
||||||
system(
|
_system(
|
||||||
"echo 'masters = gentoo' > /usr/local/portage/metadata/layout.conf");
|
"echo 'masters = gentoo' > /usr/local/portage/metadata/layout.conf");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -362,8 +400,8 @@ else {
|
|||||||
chomp(@FILE);
|
chomp(@FILE);
|
||||||
$reponame = $FILE[0];
|
$reponame = $FILE[0];
|
||||||
}
|
}
|
||||||
system("chown -R portage:portage /usr/local/portage");
|
_system("chown -R portage:portage /usr/local/portage");
|
||||||
system("chmod -R 755 /usr/local/portage");
|
_system("chmod -R 755 /usr/local/portage");
|
||||||
|
|
||||||
qx{
|
qx{
|
||||||
echo '[$reponame]
|
echo '[$reponame]
|
||||||
@@ -380,48 +418,48 @@ if ( $remote_overlay and $remote_overlay ne "" ) {
|
|||||||
if ( $remove_layman_overlay and $remove_layman_overlay ne "" ) {
|
if ( $remove_layman_overlay and $remove_layman_overlay ne "" ) {
|
||||||
say "===== Removing overlays: $remove_remote_overlay =====";
|
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 "" ) {
|
if ( $remove_remote_overlay and $remove_remote_overlay ne "" ) {
|
||||||
say "===== Removing overlays: $remove_remote_overlay =====";
|
say "===== Removing overlays: $remove_remote_overlay =====";
|
||||||
system( "rm -rfv /etc/portage/" . $_ . ".conf" )
|
_system( "rm -rfv /etc/portage/" . $_ . ".conf" )
|
||||||
for ( split( / /, $remote_overlay ) );
|
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 ) {
|
unless ( $skip_portage_sync == 1 ) {
|
||||||
|
|
||||||
# sync portage and overlays
|
# sync portage and overlays
|
||||||
system("layman -S");
|
_system("layman -S");
|
||||||
if ( $webrsync == 1 ) {
|
if ( $webrsync == 1 ) {
|
||||||
system("emerge-webrsync");
|
_system("emerge-webrsync");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
system("emerge --sync");
|
_system("emerge --sync");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# preparing for MOAR automation
|
# preparing for MOAR automation
|
||||||
say "Setting new profile to $profile" if defined $profile;
|
say "Setting new profile to $profile" if defined $profile;
|
||||||
qx|eselect profile set $profile| if defined $profile;
|
_system("eselect profile set $profile") if defined $profile;
|
||||||
system("eselect profile list") if defined $profile;
|
_system("eselect profile list") if defined $profile;
|
||||||
|
|
||||||
if ( $use_equo && $entropy_repository eq "weekly" ) {
|
if ( $use_equo && $entropy_repository eq "weekly" ) {
|
||||||
qx|equo repo disable sabayonlinux.org|;
|
_system("equo repo disable sabayonlinux.org");
|
||||||
qx|equo repo enable sabayon-weekly|;
|
_system("equo repo enable sabayon-weekly");
|
||||||
}
|
}
|
||||||
elsif ( $use_equo && $entropy_repository eq "testing" ) {
|
elsif ( $use_equo && $entropy_repository eq "testing" ) {
|
||||||
qx|equo repo disable sabayon-weekly|;
|
_system("equo repo disable sabayon-weekly");
|
||||||
qx|equo repo enable sabayonlinux.org|;
|
_system("equo repo enable sabayonlinux.org");
|
||||||
qx|equo repo enable sabayon-limbo|;
|
_system("equo repo enable sabayon-limbo");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($use_equo) {
|
if ($use_equo) {
|
||||||
|
|
||||||
say "Devkit version:";
|
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|;
|
my $enman_list_output = qx|enman list --installed -q|;
|
||||||
chomp($enman_list_output);
|
chomp($enman_list_output);
|
||||||
my @installed_enman_repos = split( /\n/, $enman_list_output );
|
my @installed_enman_repos = split( /\n/, $enman_list_output );
|
||||||
@@ -444,25 +482,19 @@ if ($use_equo) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
system("enman add $repository_name")
|
_system("enman add $repository_name")
|
||||||
if ($enman_add_self
|
if ($enman_add_self
|
||||||
and $repository_name
|
and $repository_name
|
||||||
and $repository_name ne "" );
|
and $repository_name ne "" );
|
||||||
system("equo repo mirrorsort sabayonlinux.org") if $equo_mirrorsort;
|
_system("equo repo mirrorsort sabayonlinux.org") if $equo_mirrorsort;
|
||||||
system("equo up && equo u");
|
_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;
|
if (@injected_packages) {
|
||||||
my @packages = @ARGV;
|
|
||||||
my @injected_packages = ();
|
|
||||||
if ($build_injected_args) {
|
|
||||||
@injected_packages = split( / /, $build_injected_args );
|
|
||||||
say "[*] Injected installs:";
|
say "[*] Injected installs:";
|
||||||
|
|
||||||
say "\t* " . $_ for @injected_packages;
|
say "\t* " . $_ for @injected_packages;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Allow users to specify atoms as: media-tv/kodi[-alsa,avahi]
|
# Allow users to specify atoms as: media-tv/kodi[-alsa,avahi]
|
||||||
@@ -520,49 +552,45 @@ if ($use_equo) {
|
|||||||
say "", "[install] Those dependencies will be installed with equo :",
|
say "", "[install] Those dependencies will be installed with equo :",
|
||||||
@packages_deps, "";
|
@packages_deps, "";
|
||||||
if ($equo_split_install) {
|
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 )
|
for ( @packages_deps, @equo_install )
|
||||||
; ## bail out here, if installs fails. emerge will compile a LOT of stuff
|
; ## bail out here, if installs fails. emerge will compile a LOT of stuff
|
||||||
if ( @equo_remove > 0 ) {
|
if ( @equo_remove > 0 and !$pretend ) {
|
||||||
system("equo rm --nodeps $_") for (@equo_remove);
|
say "Removing with equo: @equo_remove";
|
||||||
|
_system("equo rm --nodeps '$_'") for (@equo_remove);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
safe_call(
|
my @p = map {"'$_'"} ( @packages_deps, @equo_install );
|
||||||
"equo i $equo_install_args --bdeps @packages_deps @equo_install")
|
my @r = map {"'$_'"} @equo_remove;
|
||||||
if ( @packages_deps > 0 or @equo_install > 0 )
|
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
|
; ## bail out here, if installs fails. emerge will compile a LOT of stuff
|
||||||
system("equo rm --nodeps @equo_remove") if ( @equo_remove > 0 );
|
_system("equo rm --nodeps @r") if ( @r > 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"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
say "*** Ready to compile, finger crossed ***";
|
say "*** Ready to compile, finger crossed ***";
|
||||||
|
|
||||||
system("emerge --info")
|
_system("emerge --info")
|
||||||
; #always give detailed information about the building environment, helpful to debug
|
; #always give detailed information about the building environment, helpful to debug
|
||||||
|
|
||||||
my $rt;
|
my $rt;
|
||||||
|
|
||||||
if ( $emerge_remove and $emerge_remove ne "" ) {
|
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) {
|
if ($emerge_split_install) {
|
||||||
compile_packs( "targets", @packages );
|
compile_packs( "targets", @packages );
|
||||||
$rt = 0; #consider the build good anyway, like a "keep-going"
|
$rt = 0; #consider the build good anyway, like a "keep-going"
|
||||||
}
|
}
|
||||||
else {
|
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;
|
my $return = $rt >> 8;
|
||||||
@@ -570,25 +598,38 @@ my $return = $rt >> 8;
|
|||||||
# best effort -B
|
# best effort -B
|
||||||
compile_packs( "injected_targets", @injected_packages );
|
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");
|
if ( $preserved_rebuild and !$pretend ) {
|
||||||
system("revdep-rebuild");
|
|
||||||
|
_system("emerge -j $jobs --buildpkg \@preserved-rebuild");
|
||||||
|
_system("revdep-rebuild");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $qualityassurance_checks == 1 ) {
|
if ( $qualityassurance_checks == 1 ) {
|
||||||
say "*** Missing dependencies checks ***";
|
say "*** Quality assurance ***";
|
||||||
for (@packages) {
|
foreach my $pn ( map { abs_atom; $_ } ( @packages, @injected_packages ) )
|
||||||
say "*** DEPEND for $_";
|
{
|
||||||
system("dynlink-scanner $_");
|
say ">> Running repoman on $pn";
|
||||||
system("depcheck $_");
|
_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
|
# Copy files to artifacts folder
|
||||||
system(
|
system(
|
||||||
"mkdir -p $artifacts_folder;cp -rfv /usr/portage/packages $artifacts_folder"
|
"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);
|
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/}"
|
OUTPUT_DIR="${OUTPUT_DIR:-$SAB_WORKSPACE/portage_artifacts/}"
|
||||||
LOCAL_OVERLAY="${LOCAL_OVERLAY:-$SAB_WORKSPACE/local_overlay}"
|
LOCAL_OVERLAY="${LOCAL_OVERLAY:-$SAB_WORKSPACE/local_overlay}"
|
||||||
ENTROPY_REPOSITORY="${ENTROPY_REPOSITORY:-main}" # Can be weekly, main, testing
|
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
|
. /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 "$ENMAN_REPOSITORIES" ] || docker_env+=(-e "ENMAN_REPOSITORIES=$ENMAN_REPOSITORIES")
|
||||||
[ -z "$REMOVE_ENMAN_REPOSITORIES" ] || docker_env+=(-e "REMOVE_ENMAN_REPOSITORIES=$REMOVE_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 "$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 "$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 "$DISTCC_HOSTS" ] || docker_env+=(-e "DISTCC_HOSTS=$DISTCC_HOSTS")
|
||||||
[ -z "${PRUNE_VIRTUALS}" ] || docker_env+=(-e "PRUNE_VIRTUALS=$PRUNE_VIRTUALS")
|
[ -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_CONF_PORTDIR" ] || docker_env+=(-e "REMOTE_CONF_PORTDIR=$REMOTE_CONF_PORTDIR")
|
||||||
[ -z "$REMOTE_PORTDIR" ] || docker_env+=(-e "REMOTE_PORTDIR=$REMOTE_PORTDIR")
|
[ -z "$REMOTE_PORTDIR" ] || docker_env+=(-e "REMOTE_PORTDIR=$REMOTE_PORTDIR")
|
||||||
[ -z "$ETP_NOCACHE" ] || docker_env+=(-e "ETP_NOCACHE=$ETP_NOCACHE")
|
[ -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")
|
[ -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
|
if [ -e $MAKE_CONF ]; then
|
||||||
echo "You specified a make.conf. I hope you know what are you doing"
|
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 ""
|
||||||
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 "$@"
|
||||||
|
|||||||
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
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
check_docker_requirements(){
|
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) 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; }
|
die() { echo "$@" 1>&2 ; exit 1; }
|
||||||
@@ -12,12 +14,12 @@ die() { echo "$@" 1>&2 ; exit 1; }
|
|||||||
build_sync() {
|
build_sync() {
|
||||||
layman -S
|
layman -S
|
||||||
emerge --sync
|
emerge --sync
|
||||||
eix-update || exit 1
|
eix-update
|
||||||
pushd /opt/sabayon-build/
|
pushd /opt/sabayon-build/
|
||||||
git stash
|
git stash
|
||||||
git fetch --all
|
git fetch --all || true
|
||||||
git checkout master
|
git checkout master || true
|
||||||
git reset --hard origin/master
|
git reset --hard origin/master || true
|
||||||
popd
|
popd
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,7 +29,7 @@ build_category() {
|
|||||||
for i in $(EIX_LIMIT=0 eix --only-names --pure-packages "$SEARCH/" | xargs echo | uniq);
|
for i in $(EIX_LIMIT=0 eix --only-names --pure-packages "$SEARCH/" | xargs echo | uniq);
|
||||||
do
|
do
|
||||||
echo "Building $i"
|
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
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,7 +38,7 @@ build_obsolete() {
|
|||||||
for i in $(EIX_LIMIT=0 eix-test-obsolete | grep '\[U\]' | awk '{ print $2 }' | xargs echo | uniq);
|
for i in $(EIX_LIMIT=0 eix-test-obsolete | grep '\[U\]' | awk '{ print $2 }' | xargs echo | uniq);
|
||||||
do
|
do
|
||||||
echo "Build $i"
|
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
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,7 +48,7 @@ build_category_installed() {
|
|||||||
for i in $(EIX_LIMIT=0 eix -I --only-names --pure-packages "$SEARCH/" | xargs echo | uniq);
|
for i in $(EIX_LIMIT=0 eix -I --only-names --pure-packages "$SEARCH/" | xargs echo | uniq);
|
||||||
do
|
do
|
||||||
echo "Building $i"
|
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
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user