mirror of
				https://github.com/fspc/gbootroot.git
				synced 2025-11-03 16:05:34 -05:00 
			
		
		
		
	Alternatives are working now.
This commit is contained in:
		
							parent
							
								
									fbcf2a8b40
								
							
						
					
					
						commit
						1765d0448e
					
				@ -1,5 +1,25 @@
 | 
				
			|||||||
#!/usr/bin/perl
 | 
					#!/usr/bin/perl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#    make_debian from gBootRoot Copyright (C) 2000, 2001
 | 
				
			||||||
 | 
					#    Lead Developer and Project Coordinator
 | 
				
			||||||
 | 
					#    Jonathan Rosenbaum <freesource@users.sourceforge.net>
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    http://gbootroot.sourceforge.net
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#    This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					#    it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					#    the Free Software Foundation; either version 2 of the License, or
 | 
				
			||||||
 | 
					#    (at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#    This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					#    GNU General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#    You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					#    along with this program; if not, write to the Free Software
 | 
				
			||||||
 | 
					#    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# You will need to get swim at http://www.sourceforge.net/projects/avd
 | 
					# You will need to get swim at http://www.sourceforge.net/projects/avd
 | 
				
			||||||
my $home = "$ENV{HOME}/.gbootroot";
 | 
					my $home = "$ENV{HOME}/.gbootroot";
 | 
				
			||||||
my $home_yard = "$home/yard";
 | 
					my $home_yard = "$home/yard";
 | 
				
			||||||
@ -9,6 +29,8 @@ my $nodename = `uname -n`; chomp $nodename;
 | 
				
			|||||||
my $debian_yard = "Debian-$nodename.yard";
 | 
					my $debian_yard = "Debian-$nodename.yard";
 | 
				
			||||||
my $status = "/var/lib/dpkg/status";
 | 
					my $status = "/var/lib/dpkg/status";
 | 
				
			||||||
my $info = "/var/lib/dpkg/info";
 | 
					my $info = "/var/lib/dpkg/info";
 | 
				
			||||||
 | 
					my %alternatives; # for checking for alternatives
 | 
				
			||||||
 | 
					my @alternatives;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# You need file-rc, and you may add other extra stuff.  These packages were
 | 
					# 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, 
 | 
					# chosen for woody, so you may need something different.  If you add stuff, 
 | 
				
			||||||
@ -32,7 +54,7 @@ debconf-utils);
 | 
				
			|||||||
# Options: to include or remove docs /usr/share/{doc,man,info}
 | 
					# Options: to include or remove docs /usr/share/{doc,man,info}
 | 
				
			||||||
# and other stuff which creates fluff.
 | 
					# and other stuff which creates fluff.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
system "swim --search \"Priority: required\" > /dev/null 2>&1";
 | 
					system "swim --search \"Priority: required\" --no";
 | 
				
			||||||
my $swim_packages = "swim -qS|";
 | 
					my $swim_packages = "swim -qS|";
 | 
				
			||||||
my $swim_list = "swim -qSl|"; # Not using --df for empty directories.
 | 
					my $swim_list = "swim -qSl|"; # Not using --df for empty directories.
 | 
				
			||||||
$, = " ";
 | 
					$, = " ";
 | 
				
			||||||
@ -67,13 +89,20 @@ close(FILERC);
 | 
				
			|||||||
print DEBIAN stuff();
 | 
					print DEBIAN stuff();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
my @file_rc;
 | 
					my @file_rc;
 | 
				
			||||||
 | 
					alternatives();
 | 
				
			||||||
foreach (@required_files) {
 | 
					foreach (@required_files) {
 | 
				
			||||||
    if (-e && !-d) {
 | 
					    if (-e && !-d) {
 | 
				
			||||||
	if ($ARGV[0] eq "doc") {
 | 
						if ($ARGV[0] eq "doc") {
 | 
				
			||||||
 | 
						    if ($alternatives{$_}) {
 | 
				
			||||||
 | 
							push(@alternatives,$_);
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
	    print DEBIAN "$_\n";
 | 
						    print DEBIAN "$_\n";
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
	    if (! m,/usr/share/info|/usr/share/man|/usr/share/doc,) {
 | 
						    if (! m,/usr/share/info|/usr/share/man|/usr/share/doc,) {
 | 
				
			||||||
 | 
							if ($alternatives{$_}) {
 | 
				
			||||||
 | 
							    push(@alternatives,$_);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		print DEBIAN "$_\n";
 | 
							print DEBIAN "$_\n";
 | 
				
			||||||
	    }
 | 
						    }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -85,9 +114,19 @@ foreach (@required_files) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
print DEBIAN "\n# Scripts associated with packages found in info/*\n";
 | 
					print DEBIAN "\n# Scripts associated with packages found in info/*\n";
 | 
				
			||||||
print DEBIAN status_info();
 | 
					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";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
close(DEBIAN);
 | 
					close(DEBIAN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -103,87 +142,9 @@ map { [ (split(/\s/,$_))[0], $_ ] }
 | 
				
			|||||||
print MY_FILERC @sortedrc;
 | 
					print MY_FILERC @sortedrc;
 | 
				
			||||||
close(MY_FILERC);
 | 
					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
 | 
					#################################################################
 | 
				
			||||||
# parse the status file.  But because this is a good exercise for
 | 
					# Edit below $stuff = << "STUFF" to make changes to the template. 
 | 
				
			||||||
# 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 
 | 
					 | 
				
			||||||
# needed when using swim to query:
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Package, Status, Priority, Section, Installed-Size, Maintainer, Source, 
 | 
					 | 
				
			||||||
# Version, Replaces, Provides, Depends, Pre-Depends, Recommends, Suggests,
 | 
					 | 
				
			||||||
# Conflicts, Conffiles, Description.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Conffiles would have to be handled both before and after Root Filesystem
 | 
					 | 
				
			||||||
# creation so that their md5sums could be accounted for in status.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# And this finds all the scripts associated with a package in info/*.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub status_info {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$/ = "";
 | 
					 | 
				
			||||||
open(STATUS,"$status") or die "Can't find /var/lib/dpkg/status: $!\n";
 | 
					 | 
				
			||||||
home_builder("$home_yard_replacements/var/lib/dpkg");
 | 
					 | 
				
			||||||
system "touch $home_yard_replacements/var/lib/dpkg/available";
 | 
					 | 
				
			||||||
    #or die "Couldn't create Replacements/var/lib/dpkg/available: $!\n";
 | 
					 | 
				
			||||||
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 $stat2 = (split(/\n/,$stat))[0]; # might as well
 | 
					 | 
				
			||||||
    foreach my $rp (@required_packages) {
 | 
					 | 
				
			||||||
	$rp = (split(/_/,$rp))[0];
 | 
					 | 
				
			||||||
	# Deal with names with +
 | 
					 | 
				
			||||||
	$rp =~ s/\+/\\+/g if $rp !~ /\\+/g;
 | 
					 | 
				
			||||||
	if ($stat2 =~ /^Package: $rp$/) {
 | 
					 | 
				
			||||||
	    print NEW_STATUS $stat;
 | 
					 | 
				
			||||||
	} 
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
close(NEW_STATUS);
 | 
					 | 
				
			||||||
close(STATUS);
 | 
					 | 
				
			||||||
$/ = "\n";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
my @info;
 | 
					 | 
				
			||||||
foreach my $rp (@required_packages) {
 | 
					 | 
				
			||||||
    $rp = (split(/_/,$rp))[0];
 | 
					 | 
				
			||||||
    # Get rid of the escapes from the previous invocation.
 | 
					 | 
				
			||||||
    $rp =~ s/\\//g if $rp =~ /\\+/g;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Figure out info/*  .. this covers it for now.
 | 
					 | 
				
			||||||
    if (-f "$info/$rp.preinst") {
 | 
					 | 
				
			||||||
	push(@info,"$info/$rp.preinst\n");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (-f "$info/$rp.postinst") {
 | 
					 | 
				
			||||||
	push(@info,"$info/$rp.postinst\n");        
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (-f "$info/$rp.prerm") {
 | 
					 | 
				
			||||||
	push(@info,"$info/$rp.prerm\n");        
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (-f "$info/$rp.postrm") {
 | 
					 | 
				
			||||||
	push(@info,"$info/$rp.postrm\n");        
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (-f "$info/$rp.list") {
 | 
					 | 
				
			||||||
	push(@info,"$info/$rp.list\n");        
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (-f "$info/$rp.shlibs") {
 | 
					 | 
				
			||||||
	push(@info,"$info/$rp.shlibs\n");        
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (-f "$info/$rp.conffiles") {
 | 
					 | 
				
			||||||
	push(@info,"$info/$rp.conffiles\n");        
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (-f "$info/$rp.md5sums") {
 | 
					 | 
				
			||||||
	push(@info,"$info/$rp.md5sums\n");        
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (-f "$info/$rp.config") {
 | 
					 | 
				
			||||||
	push(@info,"$info/$rp.config\n");        
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
return @info;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
} # end sub status_info
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub stuff {
 | 
					sub stuff {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$stuff = << "STUFF";
 | 
					$stuff = << "STUFF";
 | 
				
			||||||
@ -199,10 +160,6 @@ $stuff = << "STUFF";
 | 
				
			|||||||
#                   user: user passwd: user
 | 
					#                   user: user passwd: user
 | 
				
			||||||
#                   Uses devfs.
 | 
					#                   Uses devfs.
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
# Alternatives aren't working so you will have to use the real name like
 | 
					 | 
				
			||||||
# nvi for vi and w.procps for w.  Not all libs are associated with packages
 | 
					 | 
				
			||||||
# but that isn't a big deal.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# IMPORTANT NOTE:  Things slow down noticeably when the buffer gets too big in
 | 
					# IMPORTANT NOTE:  Things slow down noticeably when the buffer gets too big in
 | 
				
			||||||
# the verbosity box so consider closing it with the slider for faster 
 | 
					# the verbosity box so consider closing it with the slider for faster 
 | 
				
			||||||
# generation.  Look at /tmp/verbose instead.
 | 
					# generation.  Look at /tmp/verbose instead.
 | 
				
			||||||
@ -327,6 +284,106 @@ STUFF
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
return $stuff;
 | 
					return $stuff;
 | 
				
			||||||
} # end sub stuff
 | 
					} # end sub stuff
 | 
				
			||||||
 | 
					#################################################################
 | 
				
			||||||
 | 
					#################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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
 | 
				
			||||||
 | 
					# 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 
 | 
				
			||||||
 | 
					# needed when using swim to query:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Package, Status, Priority, Section, Installed-Size, Maintainer, Source, 
 | 
				
			||||||
 | 
					# Version, Replaces, Provides, Depends, Pre-Depends, Recommends, Suggests,
 | 
				
			||||||
 | 
					# Conflicts, Conffiles, Description.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Conffiles would have to be handled both before and after Root Filesystem
 | 
				
			||||||
 | 
					# creation so that their md5sums could be accounted for in status.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# And this finds all the scripts associated with a package in info/*.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub status_info {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$/ = "";
 | 
				
			||||||
 | 
					open(STATUS,"$status") or die "Can't find /var/lib/dpkg/status: $!\n";
 | 
				
			||||||
 | 
					home_builder("$home_yard_replacements/var/lib/dpkg");
 | 
				
			||||||
 | 
					system "touch $home_yard_replacements/var/lib/dpkg/available";
 | 
				
			||||||
 | 
					    #or die "Couldn't create Replacements/var/lib/dpkg/available: $!\n";
 | 
				
			||||||
 | 
					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 $stat2 = (split(/\n/,$stat))[0]; # might as well
 | 
				
			||||||
 | 
					    foreach my $rp (@required_packages) {
 | 
				
			||||||
 | 
						$rp = (split(/_/,$rp))[0];
 | 
				
			||||||
 | 
						# Deal with names with +
 | 
				
			||||||
 | 
						$rp =~ s/\+/\\+/g if $rp !~ /\\+/g;
 | 
				
			||||||
 | 
						if ($stat2 =~ /^Package: $rp$/) {
 | 
				
			||||||
 | 
						    print NEW_STATUS $stat;
 | 
				
			||||||
 | 
						} 
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					close(NEW_STATUS);
 | 
				
			||||||
 | 
					close(STATUS);
 | 
				
			||||||
 | 
					$/ = "\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					my @info;
 | 
				
			||||||
 | 
					foreach my $rp (@required_packages) {
 | 
				
			||||||
 | 
					    $rp = (split(/_/,$rp))[0];
 | 
				
			||||||
 | 
					    # Get rid of the escapes from the previous invocation.
 | 
				
			||||||
 | 
					    $rp =~ s/\\//g if $rp =~ /\\+/g;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Figure out info/*  .. this covers it for now.
 | 
				
			||||||
 | 
					    if (-f "$info/$rp.preinst") {
 | 
				
			||||||
 | 
						push(@info,"$info/$rp.preinst\n");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (-f "$info/$rp.postinst") {
 | 
				
			||||||
 | 
						push(@info,"$info/$rp.postinst\n");        
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (-f "$info/$rp.prerm") {
 | 
				
			||||||
 | 
						push(@info,"$info/$rp.prerm\n");        
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (-f "$info/$rp.postrm") {
 | 
				
			||||||
 | 
						push(@info,"$info/$rp.postrm\n");        
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (-f "$info/$rp.list") {
 | 
				
			||||||
 | 
						push(@info,"$info/$rp.list\n");        
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (-f "$info/$rp.shlibs") {
 | 
				
			||||||
 | 
						push(@info,"$info/$rp.shlibs\n");        
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (-f "$info/$rp.conffiles") {
 | 
				
			||||||
 | 
						push(@info,"$info/$rp.conffiles\n");        
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (-f "$info/$rp.md5sums") {
 | 
				
			||||||
 | 
						push(@info,"$info/$rp.md5sums\n");        
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (-f "$info/$rp.config") {
 | 
				
			||||||
 | 
						push(@info,"$info/$rp.config\n");        
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					return @info;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} # end sub status_info
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub alternatives {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $ls = "ls -l /etc/alternatives|";
 | 
				
			||||||
 | 
					    my @ls;
 | 
				
			||||||
 | 
					    open(LS,$ls) or die "No ls?: $!\n";
 | 
				
			||||||
 | 
					    while (<LS>) {
 | 
				
			||||||
 | 
						if (/->/) {
 | 
				
			||||||
 | 
						    my($left,$right) = split(" -> ");
 | 
				
			||||||
 | 
						    chomp $right;
 | 
				
			||||||
 | 
						    $left =~ s/^.*\d+\s//g;
 | 
				
			||||||
 | 
						    $alternatives{$right} = $left; 
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} # end sub alternatives
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub home_builder {
 | 
					sub home_builder {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user