|
|
@ -1,4 +1,4 @@ |
|
|
|
#!/usr/bin/perl |
|
|
|
#!/usr/bin/perl -w |
|
|
|
|
|
|
|
# make_debian Copyright (C) 2001 from gBootRoot |
|
|
|
# Lead Developer and Project Coordinator |
|
|
@ -20,6 +20,7 @@ |
|
|
|
# along with this program; if not, write to the Free Software |
|
|
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|
|
|
|
|
|
|
use strict; |
|
|
|
use File::Basename; |
|
|
|
|
|
|
|
# You will need to get swim at http://www.sourceforge.net/projects/avd |
|
|
@ -31,8 +32,8 @@ my $nodename = `uname -n`; chomp $nodename; |
|
|
|
my $debian_yard = "Debian-$nodename.yard"; |
|
|
|
my $status = "/var/lib/dpkg/status"; |
|
|
|
my $info = "/var/lib/dpkg/info"; |
|
|
|
my %alternatives; # for checking for alternatives |
|
|
|
my @alternatives; |
|
|
|
my (%alternatives, @alternatives); # for checking for alternatives |
|
|
|
my %inetd; # checks for inetd binaries. |
|
|
|
|
|
|
|
# You need file-rc, and you may add other extra stuff. These packages were |
|
|
|
# chosen for woody, so you may need something different. If you add stuff, |
|
|
@ -81,76 +82,16 @@ close(SWIM); |
|
|
|
|
|
|
|
push(@required_files,@extra_files); |
|
|
|
|
|
|
|
## Template Creation |
|
|
|
open(DEBIAN,">$template_dir/$debian_yard") |
|
|
|
or die "Couldn't open $!\n"; |
|
|
|
open(FILERC,"/etc/runlevel.conf") or die "No runlevel.conf: $!\n"; |
|
|
|
@filerc = <FILERC>; |
|
|
|
close(FILERC); |
|
|
|
|
|
|
|
print DEBIAN stuff(); |
|
|
|
|
|
|
|
my @file_rc; |
|
|
|
alternatives(); |
|
|
|
foreach (@required_files) { |
|
|
|
if (-e && !-d) { |
|
|
|
if ($ARGV[0] eq "doc") { |
|
|
|
if ($alternatives{$_}) { |
|
|
|
push(@alternatives,$_); |
|
|
|
} |
|
|
|
print DEBIAN "$_\n"; |
|
|
|
} |
|
|
|
else { |
|
|
|
if (! m,/usr/share/info|/usr/share/man|/usr/share/doc,) { |
|
|
|
if ($alternatives{$_}) { |
|
|
|
push(@alternatives,$_); |
|
|
|
} |
|
|
|
print DEBIAN "$_\n"; |
|
|
|
} |
|
|
|
} |
|
|
|
if (m,/etc/init\.d,) { |
|
|
|
foreach my $filerc (@filerc) { |
|
|
|
push(@file_rc,$filerc) if $filerc =~ /$_/; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
print DEBIAN "\n# Scripts associated with packages found in info/*\n"; |
|
|
|
print DEBIAN status_info(); |
|
|
|
|
|
|
|
# alternatives |
|
|
|
print DEBIAN "\n# Alternative stuff.\n"; |
|
|
|
foreach (@alternatives) { |
|
|
|
if ($alternatives{$_}) { |
|
|
|
print DEBIAN "/etc/alternatives/", $alternatives{$_}, "\n"; |
|
|
|
print DEBIAN "/var/lib/dpkg/alternatives/", $alternatives{$_}, "\n"; |
|
|
|
print DEBIAN dirname($_), "/", $alternatives{$_}, "\n"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
close(DEBIAN); |
|
|
|
|
|
|
|
|
|
|
|
# This creates a tweaked runlevel.conf which is easier then trying to figure |
|
|
|
# out which symlinks to use in /etc/rc?d. |
|
|
|
|
|
|
|
open(MY_FILERC,">$home_yard_replacements/etc/runlevel.conf") |
|
|
|
or die "Couldn't open $home_yard_replacements/etc/runlevel.conf: $!\n"; |
|
|
|
my @sortedrc = map { $_->[1] } |
|
|
|
sort { $a->[0] <=> $b->[0] } |
|
|
|
map { [ (split(/\s/,$_))[0], $_ ] } |
|
|
|
@file_rc; |
|
|
|
print MY_FILERC @sortedrc; |
|
|
|
close(MY_FILERC); |
|
|
|
|
|
|
|
################################################################# |
|
|
|
################################################################# |
|
|
|
# |
|
|
|
# EDIT |
|
|
|
# BELOW |
|
|
|
# |
|
|
|
# Edit below $stuff = << "STUFF" to make changes to the template. |
|
|
|
sub stuff { |
|
|
|
|
|
|
|
$stuff = << "STUFF"; |
|
|
|
my $stuff = << "STUFF"; |
|
|
|
# Generated by make_debian. |
|
|
|
|
|
|
|
# This template creates a complete Debian system which is more streamlined |
|
|
@ -292,8 +233,84 @@ return $stuff; |
|
|
|
################################################################# |
|
|
|
################################################################# |
|
|
|
|
|
|
|
#################### |
|
|
|
## Template Creation |
|
|
|
|
|
|
|
open(DEBIAN,">$template_dir/$debian_yard") |
|
|
|
or die "Couldn't open $!\n"; |
|
|
|
open(FILERC,"/etc/runlevel.conf") or die "No runlevel.conf: $!\n"; |
|
|
|
my @filerc = <FILERC>; |
|
|
|
close(FILERC); |
|
|
|
|
|
|
|
print DEBIAN stuff(); |
|
|
|
|
|
|
|
my @file_rc; |
|
|
|
alternatives(); |
|
|
|
inetd_in(); |
|
|
|
foreach (@required_files) { |
|
|
|
if (-e && !-d) { |
|
|
|
if ($ARGV[0] && $ARGV[0] eq "doc") { |
|
|
|
if ($alternatives{$_}) { |
|
|
|
push(@alternatives,$_); |
|
|
|
} |
|
|
|
if ($inetd{$_}) { |
|
|
|
$inetd{$_} = 1; |
|
|
|
} |
|
|
|
print DEBIAN "$_\n"; |
|
|
|
} |
|
|
|
else { |
|
|
|
if (! m,/usr/share/info|/usr/share/man|/usr/share/doc,) { |
|
|
|
if ($alternatives{$_}) { |
|
|
|
push(@alternatives,$_); |
|
|
|
} |
|
|
|
if ($inetd{$_}) { |
|
|
|
$inetd{$_} = 1; |
|
|
|
} |
|
|
|
print DEBIAN "$_\n"; |
|
|
|
} |
|
|
|
} |
|
|
|
if (m,/etc/init\.d,) { |
|
|
|
foreach my $filerc (@filerc) { |
|
|
|
push(@file_rc,$filerc) if $filerc =~ /$_/; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
inetd_out(); |
|
|
|
|
|
|
|
print DEBIAN "\n# Scripts associated with packages found in info/*\n"; |
|
|
|
print DEBIAN status_info_divert(); |
|
|
|
|
|
|
|
# alternatives |
|
|
|
print DEBIAN "\n# Alternative stuff.\n"; |
|
|
|
foreach (@alternatives) { |
|
|
|
if ($alternatives{$_}) { |
|
|
|
print DEBIAN "/etc/alternatives/", $alternatives{$_}, "\n"; |
|
|
|
print DEBIAN "/var/lib/dpkg/alternatives/", $alternatives{$_}, "\n"; |
|
|
|
print DEBIAN dirname($_), "/", $alternatives{$_}, "\n"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
close(DEBIAN); |
|
|
|
|
|
|
|
# END TEMPLATE CREATION |
|
|
|
####################### |
|
|
|
|
|
|
|
# This creates a tweaked runlevel.conf which is easier then trying to figure |
|
|
|
# out which symlinks to use in /etc/rc?d. |
|
|
|
|
|
|
|
open(MY_FILERC,">$home_yard_replacements/etc/runlevel.conf") |
|
|
|
or die "Couldn't open $home_yard_replacements/etc/runlevel.conf: $!\n"; |
|
|
|
my @sortedrc = map { $_->[1] } |
|
|
|
sort { $a->[0] <=> $b->[0] } |
|
|
|
map { [ (split(/\s/,$_))[0], $_ ] } |
|
|
|
@file_rc; |
|
|
|
print MY_FILERC @sortedrc; |
|
|
|
close(MY_FILERC); |
|
|
|
|
|
|
|
|
|
|
|
# This creates a status file for use by dpkg and swim. |
|
|
|
# Although swim could be used to do this, it is more effecient just to |
|
|
|
# Although swim could be used to do this, it is more efficient just to |
|
|
|
# parse the status file. But because this is a good exercise for |
|
|
|
# using this script to create a status file found from packages on a system |
|
|
|
# which doesn't actually have a status file .. here would be the order |
|
|
@ -309,7 +326,7 @@ return $stuff; |
|
|
|
# And this finds all the scripts associated with a package in info/*, |
|
|
|
# creates an empty available file, and creates the diversions file. |
|
|
|
|
|
|
|
sub status_info { |
|
|
|
sub status_info_divert { |
|
|
|
|
|
|
|
$/ = ""; |
|
|
|
open(STATUS,"$status") or die "Can't find /var/lib/dpkg/status: $!\n"; |
|
|
@ -319,7 +336,7 @@ system "touch $home_yard_replacements/var/lib/dpkg/available"; |
|
|
|
open(NEW_STATUS,">$home_yard_replacements/var/lib/dpkg/status") |
|
|
|
or die "Couldn't open $home_yard_replacements/var/lib/dpkg/status: $!\n"; |
|
|
|
while (<STATUS>) { # keep the order |
|
|
|
$stat = $_; |
|
|
|
my $stat = $_; |
|
|
|
my $stat2 = (split(/\n/,$stat))[0]; # might as well |
|
|
|
foreach my $rp (@required_packages) { |
|
|
|
$rp = (split(/_/,$rp))[0]; |
|
|
@ -334,7 +351,7 @@ close(NEW_STATUS); |
|
|
|
close(STATUS); |
|
|
|
$/ = "\n"; |
|
|
|
|
|
|
|
my %dpkg_divert = []; |
|
|
|
my %dpkg_divert; |
|
|
|
my $dpkg_divert = "dpkg-divert --list|"; |
|
|
|
open(DIVERT,"$dpkg_divert") |
|
|
|
or die "Couldn't find the dpkg-divert command: $!\n"; |
|
|
@ -350,7 +367,7 @@ while (<DIVERT>) { |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
close(DIVERT); |
|
|
|
close(DIVERT) or die "Couldn't close: $!\n"; |
|
|
|
|
|
|
|
open(DIVERT,">$home_yard_replacements/var/lib/dpkg/diversions") |
|
|
|
or die "Couldn't open Replacements/var/lib/dpkg/diversions: $!\n"; |
|
|
@ -407,7 +424,7 @@ close(DIVERT); |
|
|
|
|
|
|
|
return @info; |
|
|
|
|
|
|
|
} # end sub status_info |
|
|
|
} # end sub status_info_divert |
|
|
|
|
|
|
|
sub alternatives { |
|
|
|
|
|
|
@ -422,9 +439,52 @@ sub alternatives { |
|
|
|
$alternatives{$right} = $left; |
|
|
|
} |
|
|
|
} |
|
|
|
close(LS); |
|
|
|
|
|
|
|
} # end sub alternatives |
|
|
|
|
|
|
|
sub inetd_in { |
|
|
|
|
|
|
|
my $inetd = "/etc/inetd.conf"; |
|
|
|
open(INETD,"$inetd") or return "Couldn't open /etc/inetd.conf: $!\n"; |
|
|
|
# Basically will ignore anything with less than 7 columns, and |
|
|
|
# will comment lines where the executables don't exist. |
|
|
|
while (<INETD>) { |
|
|
|
if ( (split(/\s+/))[6] && !/^#.*/ ) { |
|
|
|
my $seventh_column = (split(/\s+/))[6]; |
|
|
|
chomp $seventh_column; |
|
|
|
$inetd{ basename($seventh_column) } = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
close(INETD); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
sub inetd_out { |
|
|
|
|
|
|
|
my $inetd = "/etc/inetd.conf"; |
|
|
|
open(REP_INETD,">$home_yard_replacements/etc/inetd.conf") |
|
|
|
or return "Couldn't open Replacements/etc/inetd.conf: $!\n"; |
|
|
|
open(INETD,"$inetd") or return "Couldn't open /etc/inetd.conf: $!\n"; |
|
|
|
while (<INETD>) { |
|
|
|
if ( (split(/\s+/))[6] && !/^#.*/ ) { |
|
|
|
my $seventh_column = (split(/\s+/))[6]; |
|
|
|
chomp $seventh_column; |
|
|
|
if ( $inetd{ basename($seventh_column) } == 1 ) { |
|
|
|
print REP_INETD $_; |
|
|
|
} |
|
|
|
else { |
|
|
|
print REP_INETD "# $_"; |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
print REP_INETD $_; |
|
|
|
} |
|
|
|
} |
|
|
|
close(REP_INETD); |
|
|
|
close(INETD); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
sub home_builder { |
|
|
|
|
|
|
@ -446,3 +506,11 @@ sub home_builder { |
|
|
|
} |
|
|
|
|
|
|
|
} # end home_builder |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|