diff options
| author | Sergio <sergiotarxz@posteo.net> | 2026-09-06 13:13:39 +0200 |
|---|---|---|
| committer | Sergio <sergiotarxz@posteo.net> | 2026-09-06 13:13:39 +0200 |
| commit | 866582b643a300234804598d8cadd76154b0bc2d (patch) | |
| tree | 6785cd124128c5c1cafbf94061cf4f6b6fe3a7e9 | |
| parent | 3c35e332a44a2fb2382168e362c68dc0c70315d1 (diff) | |
Adding binpkg support and some useful hacks to make distributor life easier
| -rw-r--r-- | binpkg-algaos.spec | 5 | ||||
| -rw-r--r-- | complete_build.sh | 41 | ||||
| -rw-r--r-- | iso-algaos.spec | 7 | ||||
| -rw-r--r-- | scripts/build.pl | 41 |
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/*"; |
