28
28
use Getopt::Long qw(:config no_ignore_case auto_abbrev gnu_getopt);
29
use Sbuild::Sysconfig qw($arch $hostname);
30
use Sbuild qw(dump_file help_text version_text usage_error);
29
use Sbuild qw(dump_file help_text version_text usage_error check_packages);
31
use Sbuild::ChrootPlain;
32
use Sbuild::Sysconfig;
33
use File::Path qw(mkpath);
35
38
sub add_items ($@);
41
my $conf = Sbuild::Conf->new();
42
my $hostname = $conf->get('HOSTNAME');
38
44
# Add items to the start of a comma-separated list, and remove the
39
45
# items from later in the list if they were already in the list.
158
180
# Write out schroot chroot configuration.
159
181
my $chrootname = "${suite}-${bootstrap_arch}-sbuild";
161
# TODO: Don't hardcode path
163
new File::Temp( TEMPLATE => "$chrootname.XXXXXX",
164
DIR => "/etc/schroot/chroot.d",
166
or die "Can't open schroot configuration file: $!\n";
183
if (-d "/etc/schroot/chroot.d") {
184
# TODO: Don't hardcode path
186
new File::Temp( TEMPLATE => "$chrootname.XXXXXX",
187
DIR => "/etc/schroot/chroot.d",
189
or die "Can't open schroot configuration file: $!\n";
168
print $SCHROOT_CONF <<"EOF";
191
print $SCHROOT_CONF <<"EOF";
171
194
description=Debian $suite/$bootstrap_arch autobuilder
183
206
print "I: schroot chroot configuration written to $SCHROOT_CONF.\n";
184
207
dump_file("$SCHROOT_CONF");
185
208
print "I: Please rename and modify this file as required.\n";
211
if (! -d "$Sbuild::Sysconfig::paths{'SBUILD_SYSCONF_DIR'}/chroot") {
212
makedir("$Sbuild::Sysconfig::paths{'SBUILD_SYSCONF_DIR'}/chroot", 0775);
215
my $chrootlink = "$Sbuild::Sysconfig::paths{'SBUILD_SYSCONF_DIR'}/chroot/$chrootname";
216
if (-l $chrootlink) {
217
unlink($chrootlink) or die "Can't unlink $chrootlink: $!";
219
print STDERR "E: Can't remove $chrootlink: not a symbolic link\n";
222
if (! -f $chrootlink) {
223
if (symlink($target, $chrootlink)) {
224
print "I: sudo chroot configuration linked as $Sbuild::Sysconfig::paths{'SBUILD_SYSCONF_DIR'}/chroot/$chrootname.\n";
226
print STDERR "E: Failed to symlink $target to $chrootlink: $!\n";
229
print "W: Failed to symlink $target to $chrootlink: \n"
232
if (! -d "$target/build") {
233
print "I: Creating build directory: /build\n";
234
makedir("$target/build", 0775);
236
!system("chown", "root:sbuild", "$target/build")
237
or die "E: Failed to set root:sbuild ownership on $target/build";
238
!system("chmod", "0775", "$target/build")
239
or die "E: Failed to set 0755 permissions on $target/build";
241
if (! -d "$target/var/lib/sbuild") {
242
print "I: Creating sbuild directory: /var/lib/sbuild\n";
243
makedir("$target/var/lib/sbuild/srcdep", 02775);
245
if (! -d "$target/var/lib/sbuild/srcdep-lock") {
246
print "I: Creating sbuild lock directory: /var/lib/sbuild/srcdep-lock\n";
247
makedir("$target/var/lib/sbuild/srcdep-lock", 02775);
249
!system("chown", "-R", "root:sbuild", "$target/var/lib/sbuild")
250
or die "E: Failed to set root:sbuild ownership on $target/var/lib/sbuild";
251
!system("chmod", "-R", "02775", "$target/var/lib/sbuild")
252
or die "E: Failed to set 02755 permissions on $target/var/lib/sbuild";
254
my $session = Sbuild::ChrootPlain->new($conf, $target);
255
if (defined($session)) {
256
$session->set('Log Stream', \*STDOUT);
258
if (!$session->begin_session()) {
259
print STDERR "E: Error creating chroot session: skipping apt update\n";
261
print "I: Setting reference package list.\n";
262
check_packages($session, "set");
264
print "I: Updating chroot.\n";
265
$session->run_apt_command(
266
{ COMMAND => [$conf->get('APT_GET'), 'update'],
267
ENV => {'DEBIAN_FRONTEND' => 'noninteractive'},
271
print "W: Failed to update APT package lists\n"
275
$session->run_apt_command(
276
{ COMMAND => [$conf->get('APT_GET'), '-uy', 'upgrade'],
277
ENV => {'DEBIAN_FRONTEND' => 'noninteractive'},
281
print "W: Failed to upgrade chroot\n"
283
$session->end_session();
186
288
print "I: Successfully set up $suite chroot.\n";
187
289
print "I: Run sbuild-adduser to add new sbuild users.\n";