aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binpkg-algaos.spec5
-rw-r--r--complete_build.sh41
-rw-r--r--iso-algaos.spec7
-rw-r--r--scripts/build.pl41
4 files changed, 73 insertions, 21 deletions
diff --git a/binpkg-algaos.spec b/binpkg-algaos.spec
new file mode 100644
index 0000000..e483053
--- /dev/null
+++ b/binpkg-algaos.spec
@@ -0,0 +1,5 @@
+prefix: "binpkg-algaos-"
+source: "stage3-algaos-latest.tar.xz"
+profile: "algaos:default/linux/amd64/23.0/algaos/desktop/default/systemd"
+repo_name: 'algaos'
+image_type: 'binpkg'
diff --git a/complete_build.sh b/complete_build.sh
index 200c6dc..048b923 100644
--- a/complete_build.sh
+++ b/complete_build.sh
@@ -1,13 +1,36 @@
#!/usr/bin/env bash
+echo Are you sure you want a complete build? This will conflict with concurrent active builds
+sleep 10;
+read;
sudo umount -R /var/tmp/algabuild/tmp/*/{dev,proc,sys}
sudo rm -rf /var/tmp/algabuild/tmp/*
-suffix="$(date -u +%Y%m%d%H%M%S)"
-sudo perl scripts/build.pl --spec stage1-algaos.spec --repo ../algaos-ebuild-tree/ --suffix $suffix
-sudo cp /var/tmp/algabuild/stages/stage1-algaos-$suffix.tar.xz /var/tmp/algabuild/stages/stage1-algaos-latest.tar.xz
-sudo perl scripts/build.pl --spec stage2-algaos.spec --repo ../algaos-ebuild-tree/ --suffix $suffix
-sudo cp /var/tmp/algabuild/stages/stage2-algaos-$suffix.tar.xz /var/tmp/algabuild/stages/stage2-algaos-latest.tar.xz
-sudo perl scripts/build.pl --spec stage3-algaos.spec --repo ../algaos-ebuild-tree/ --suffix $suffix
-sudo cp /var/tmp/algabuild/stages/stage3-algaos-$suffix.tar.xz /var/tmp/algabuild/stages/stage3-algaos-latest.tar.xz
-sudo perl scripts/build.pl --spec iso-algaos.spec --repo ../algaos-ebuild-tree/ --suffix $suffix
-sudo cp /var/tmp/algabuild/stages/iso-algaos-$suffix.iso /var/tmp/algabuild/stages/iso-algaos-latest.iso
+suffix=$1
+if [ -z $suffix ]; then
+ suffix="$(date -u +%Y%m%d%H%M%S)"
+fi
+echo generating stage1
+if [ ! -e "/var/tmp/algabuild/stages/stage1-algaos-$suffix.tar.xz" ]; then
+ sleep 5;
+ sudo perl scripts/build.pl --spec stage1-algaos.spec --repo ../algaos-ebuild-tree/ --suffix $suffix
+ sudo cp /var/tmp/algabuild/stages/stage1-algaos-$suffix.tar.xz /var/tmp/algabuild/stages/stage1-algaos-latest.tar.xz
+fi
+echo generating stage2
+if [ ! -e "/var/tmp/algabuild/stages/stage2-algaos-$suffix.tar.xz" ]; then
+ sleep 5;
+ sudo perl scripts/build.pl --spec stage2-algaos.spec --repo ../algaos-ebuild-tree/ --suffix $suffix
+ sudo cp /var/tmp/algabuild/stages/stage2-algaos-$suffix.tar.xz /var/tmp/algabuild/stages/stage2-algaos-latest.tar.xz
+fi
+echo generating stage3
+if [ ! -e "/var/tmp/algabuild/stages/stage3-algaos-$suffix.tar.xz" ]; then
+ sleep 5;
+ sudo perl scripts/build.pl --spec stage3-algaos.spec --repo ../algaos-ebuild-tree/ --suffix $suffix
+ sudo cp /var/tmp/algabuild/stages/stage3-algaos-$suffix.tar.xz /var/tmp/algabuild/stages/stage3-algaos-latest.tar.xz
+fi
+echo generating iso
+if [ ! -e "/var/tmp/algabuild/stages/iso-algaos-$suffix.iso" ]; then
+ sleep 5;
+ sudo perl scripts/build.pl --spec iso-algaos.spec --repo ../algaos-ebuild-tree/ --suffix $suffix
+ sudo cp /var/tmp/algabuild/stages/iso-algaos-$suffix.iso /var/tmp/algabuild/stages/iso-algaos-latest.iso
+fi
+echo completed generation
diff --git a/iso-algaos.spec b/iso-algaos.spec
index 56140e1..4944fb6 100644
--- a/iso-algaos.spec
+++ b/iso-algaos.spec
@@ -12,6 +12,7 @@ commands:
- systemctl enable sshd
- useradd -m user -s /bin/bash || exit 0
- passwd -d user
+ - gpasswd -a user plugdev
- mkdir -pv /etc/sudoers.d
- |
cat <<'EOF'>/etc/sudoers.d/livecd
@@ -35,7 +36,7 @@ commands:
--no-hostonly \
--stdlog 6 \
--force \
- --add "dmsquash-live plymouth" \
+ --add "dmsquash-live" \
"/boot/initramfs-${KVER}.img"
-transfer:
- - [1000, 1000, '../../.ssh/', '/home/user/.ssh/']
+#transfer:
+# - [1000, 1000, '../../.ssh/', '/home/user/.ssh/']
diff --git a/scripts/build.pl b/scripts/build.pl
index 2ea62dc..852eea2 100644
--- a/scripts/build.pl
+++ b/scripts/build.pl
@@ -79,7 +79,11 @@ my %image_types = (
stage => sub {
say 'Creating stage';
create_stage();
- }
+ },
+ binpkg => sub {
+ say 'Creating binpkgs for the whole system';
+ create_binpkgs();
+ },
);
my $image_type = $yaml->{image_type} // 'stage';
@@ -141,9 +145,11 @@ sub prepare_root {
if ( system qw{eselect profile set}, $profile ) {
die "Could not set profile $profile";
}
- if ($rebuild_all) {
+ my $is_binpkg = $yaml->{image_type} eq 'binpkg';
+ if ($rebuild_all || $is_binpkg) {
die "Could not build the system"
- if system qw{emerge -e --with-bdeps=y @world @system};
+ if system( qw{emerge -e --with-bdeps=y @world @system},
+ $is_binpkg ? ('--buildpkg') : () );
}
else {
if ( $yaml->{break_circular} ) {
@@ -185,6 +191,23 @@ sub prepare_root {
system qw{touch /success};
}
+sub create_binpkgs {
+ my $tmp_new_stage = "$tmp/$stage_name";
+ my $rootfs_path = "$tmp_new_stage-root";
+ system qw{mkdir -pv}, $rootfs_path;
+ generate_root_tmp($rootfs_path);
+ mount_eval(
+ $rootfs_path,
+ sub {
+ prepare_root();
+ }
+ );
+ finish_root($rootfs_path);
+ if (system qw{rsync --mkpath -a -P}, "$rootfs_path/var/cache/binpkgs/", "$stage_dir/$stage_name/") {
+ die 'Copying binpkgs failed';
+ }
+}
+
sub create_iso {
my $tmp_new_stage = "$tmp/$stage_name";
my $rootfs_path = "$tmp_new_stage-rootfs";
@@ -198,12 +221,6 @@ sub create_iso {
prepare_root();
}
);
- for my $transfer (@{$yaml->{transfer} // []}) {
- my ($user, $group, $source, $dest) = @$transfer;
- if (system qw{rsync -P -a}, "--chown=$user:$group", qw{--mkpath}, $source, "$rootfs_path/$dest") {
- die "Transfer failed $source -> $dest";
- }
- }
finish_root($rootfs_path);
system qw{rm}, "$contents_path/rootfs.squashfs";
system qw{cp -v}, $source_stage, $rootfs_path;
@@ -258,6 +275,12 @@ sub create_stage {
sub finish_root {
my $tmp_new_stage = shift;
die "System not marked successful" if !-e "$tmp_new_stage/success";
+ for my $transfer (@{$yaml->{transfer} // []}) {
+ my ($user, $group, $source, $dest) = @$transfer;
+ if (system qw{rsync -P -a}, "--chown=$user:$group", qw{--mkpath}, $source, "$tmp_new_stage/$dest") {
+ die "Transfer failed $source -> $dest";
+ }
+ }
system rm => "$tmp_new_stage/success";
system "rm -rf $tmp_new_stage/var/cache/distfiles/*";
system "rm -rf $tmp_new_stage/var/db/repos/*";