⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slackware-lib.pl

📁 Unix下基于Web的管理工具
💻 PL
字号:
# slackware-lib.pl# Functions for slackware package management$package_dir = "/var/log/packages";%class_map = (	'a',	'Base Linux system',		'ap',	'Applications',		'd',	'Program development',		'des',	'Crypt library',		'e',	'GNU Emacs',		'f',	'FAQs and documentation',		'gtk',	'GTK+ and GNOME programs',		'k',	'Linux kernel source',		'kde',	'KDE desktop and programs',		'n',	'Networking',		't',	'TeX',		'tcl',	'TcL/Tk',		'xap',	'X applications',		'xd',	'X server development',		'xv',	'XView programs',		'y',	'Games' );use POSIX;chop($system_arch = `uname -m`);# list_packages([package]*)# Fills the array %packages with a list of all packagessub list_packages{local ($i, $f, @list);opendir(DIR, $package_dir);local @list = @_ ? @_ : grep { !/^\./ } readdir(DIR);$i = 0;foreach $f (@list) {	$packages{$i,'name'} = $f;	$packages{$i,'class'} = $text{'slack_unclass'};	open(PKG, "$package_dir/$f");	while(<PKG>) {		if (/^PACKAGE LOCATION:\s+disk([a-z]+)\d+/i) {			$packages{$i,'class'} = $class_map{$1};			}		elsif (/^PACKAGE DESCRIPTION:/i) {			local $desc = <PKG>;			$desc =~ s/^\S+:\s+//;			$desc =~ s/\n//;			$packages{$i,'desc'} = $desc;			}		}	close(PKG);	$i++;	}closedir(DIR);return $i;}# package_info(package)# Returns an array of package information in the order#  name, class, description, arch, version, vendor, installtimesub package_info{local @rv = ( $_[0], $text{'slack_unclass'}, $text{'slack_unknown'},	      $system_arch, $text{'slack_unknown'}, "Slackware" );local @st = stat("$package_dir/$_[0]");$rv[6] = ctime($st[9]);open(PKG, "$package_dir/$_[0]");while(<PKG>) {	if (/^PACKAGE LOCATION:\s+disk([a-z]+)\d+/i) {		$rv[1] = $class_map{$1};		}	elsif (/^PACKAGE DESCRIPTION:/i) {		$rv[2] = "";		while(<PKG>) {			last if (/^FILE LIST/i);			s/^\S+: *//;			if (!$rv[2] && /([0-9][0-9\.]*)/) {				$rv[4] = $1;				}			$rv[2] .= $_;			}		$rv[2] =~ s/\s+$//;		}	}close(PKG);return @rv;}# check_files(package)# Fills in the %files array with information about the files belonging# to some package. Values in %files are  path type user group mode size errorsub check_files{local $i = 0;local $file;open(PKG, "$package_dir/$_[0]");while(<PKG>) {	last if (/^FILE LIST:/i);	}while($file = <PKG>) {	$file =~ s/\r|\n//g;	next if ($file eq "./");	$file = '/'.$file;	$files{$i,'path'} = $file;	local @st = stat($file);	if (@st) {		$files{$i,'type'} = -l $file ? 3 :				    -d $file ? 1 : 0;		$files{$i,'user'} = getpwuid($st[4]);		$files{$i,'group'} = getgrgid($st[5]);		$files{$i,'mode'} = sprintf "%o", $st[2] & 07777;		$files{$i,'size'} = $st[7];		$files{$i,'link'} = readlink($file);		}	else {		$files{$i,'type'} = $file =~ /\// ? 1 : 0;		$files{$i,'user'} = $files{$i,'group'} =		 $files{$i,'mode'} = $files{$i,'size'} = $text{'slack_unknown'};		$files{$i,'error'} = $text{'slack_missing'};		}	$i++;	}return $i;}# installed_file(file)# Given a filename, fills %file with details of the given file and returns 1.# If the file is not known to the package system, returns 0# Usable values in %file are  path type user group mode size packagessub installed_file{local ($f, $file, @pkgin);opendir(DIR, $package_dir);while($f = readdir(DIR)) {	next if ($f =~ /^\./);	open(PKG, "$package_dir/$f");	while(<PKG>) {		last if (/^FILE LIST:/);		}	while($file = <PKG>) {		next if ($file eq "./");		$file =~ s/[\/\r\n]+$//;		$file = '/'.$file;		if ($_[0] eq $file) {			# found it!			push(@pkgin, $f);			last;			}		}	close(PKG);	}closedir(DIR);if (@pkgin) {	local @st = stat($_[0]);	$file{'path'} = $_[0];	$file{'type'} = -l $_[0] ? 3 :			-d $_[0] ? 1 : 0;	$file{'user'} = getpwuid($st[4]);	$file{'group'} = getgrgid($st[5]);	$file{'mode'} = sprintf "%o", $st[2] & 07777;	$file{'size'} = $st[7];	$file{'link'} = readlink($_[0]);	$file{'packages'} = join(" ", @pkgin);	return 1;	}else {	return 0;	}}# is_package(file)sub is_package{local $count;open(TAR, "gunzip -c $_[0] | tar tf - 2>&1 |");while(<TAR>) {	$count++ if (/^[^\/\s]\S+/);	}close(TAR);return $count < 2 ? 0 : 1;}# file_packages(file)# Returns a list of all packages in the given file, in the form#  package descriptionsub file_packages{if ($_[0] !~ /^(.*)\/(([^\/]+)(\.tgz|\.tar\.gz))$/) {	return "$_[0] $text{'slack_unknown'}";	}local ($dir, $file, $base) = ($1, $2, $3);local $diskfile;opendir(DIR, $dir);while($f = readdir(DIR)) {	if ($f =~ /^disk\S+\d+$/ || $f eq 'package_descriptions') {		# found the slackware disk file		$diskfile = "$dir/$f";		last;		}	}closedir(DIR);return "$base $text{'slack_unknown'}" if (!$diskfile);# read the disk filelocal $desc;open(DISK, $diskfile);while(<DISK>) {	if (/^$base:\s*(.*)/) {		$desc = $1;		last;		}	}close(DISK);return $desc ? "$base $desc" : "$base $text{'slack_unknown'}";}# install_options(file, package)# Outputs HTML for choosing install optionssub install_options{print "<tr> <td><b>$text{'slack_root'}</b></td>\n";print "<td colspan=3><input name=root size=30 value='/'> ",	&file_chooser_button("root", 1),"</td> </tr>\n";}# install_package(file, package)# Installs the package in the given file, with options from %insub install_package{return $text{'slack_eroot'} if (!-d $in{'root'});$ENV{'ROOT'} = $in{'root'};local $out = `installpkg $_[0] 2>&1`;if ($?) {	return "<pre>$out</pre>";	}return undef;}# delete_package(package)# Totally remove some packagesub delete_package{local $out = `removepkg $_[0] 2>&1`;if ($?) { return "<pre>$out</pre>"; }return undef;}sub package_system{return "Slackware Package Manager";}1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -