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

📄 freebsd-lib.pl

📁 Unix下基于Web的管理工具
💻 PL
字号:
# bsd-lib.pl# Functions for FreeBSD package managementuse POSIX;chop($system_arch = `uname -m`);$package_dir = "/var/db/pkg";# list_packages([package]*)# Fills the array %packages with a list of all packagessub list_packages{local $i = 0;local $arg = @_ ? join(" ", @_) : "-a";open(PKGINFO, "pkg_info -I $arg |");while(<PKGINFO>) {	if (/^(\S+)\s+(.*)/) {		$packages{$i,'name'} = $1;		$packages{$i,'class'} = "";		$packages{$i,'desc'} = $2;		$i++;		}	}close(PKGINFO);return $i;}# package_info(package)# Returns an array of package information in the order#  name, class, description, arch, version, vendor, installtimesub package_info{local $out = `pkg_info $_[0] 2>&1`;return () if ($?);local @rv = ( $_[0] );push(@rv, "");push(@rv, $out =~ /Description:\n([\0-\177]*\S)/i ? $1 : $text{'bsd_unknown'});push(@rv, $system_arch);push(@rv, $_[0] =~ /-([^\-]+)$/ ? $1 : $text{'bsd_unknown'});push(@rv, "FreeBSD");local @st = stat("$package_dir/$_[0]");push(@rv, @st ? ctime($st[9]) : $text{'bsd_unknown'});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(PKGINFO, "pkg_info -L $_[0] |");while($file = <PKGINFO>) {	$file =~ s/\r|\n//g;	next if ($file !~ /^\//);	local @st = stat($file);	$files{$i,'path'} = $file;	$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);	$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 (%packages, $file, $i, @pkgin);local $n = &list_packages();for($i=0; $i<$n; $i++) {	open(PKGINFO, "pkg_info -L $packages{$i,'name'} |");	while($file = <PKGINFO>) {		$file =~ s/\r|\n//g;		if ($file eq $_[0]) {			# found it			push(@pkgin, $packages{$i,'name'});			}		}	close(PKGINFO);	}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 ($desc, $contents);open(TAR, "gunzip -c $_[0] | tar tf - |");while(<TAR>) {	$desc++ if (/^\+DESC/);	$contents++ if (/^\+CONTENTS/);	}close(TAR);return $desc && $contents;}# file_packages(file)# Returns a list of all packages in the given file, in the form#  package descriptionsub file_packages{local $temp = &tempname();mkdir($temp, 0700);system("cd $temp ; gunzip -c $_[0] | tar xf - +CONTENTS +COMMENT >/dev/null 2>&1");local ($comment, $name);open(COMMENT, "$temp/+COMMENT");($comment = <COMMENT>) =~ s/\r|\n//g;close(COMMENT);open(CONTENTS, "$temp/+CONTENTS");while(<CONTENTS>) {	$name = $1 if (/^\@name\s+(\S+)/);	}close(CONTENTS);unlink("$temp/+COMMENT", "$temp/+CONTENTS");rmdir($temp);return ( "$name $comment" );}# install_options(file, package)# Outputs HTML for choosing install optionssub install_options{print "<tr> <td><b>$text{'bsd_scripts'}</b></td>\n";print "<td><input type=radio name=scripts value=0 checked> $text{'yes'}\n";print "<input type=radio name=scripts value=1> $text{'no'}</td>\n";print "<td><b>$text{'bsd_force'}</b></td>\n";print "<td><input type=radio name=force value=1> $text{'yes'}\n";print "<input type=radio name=force value=0 checked> $text{'no'}</td> </tr>\n";}# install_package(file, package)# Installs the package in the given file, with options from %insub install_package{local $args = ($in{"scripts"} ? " -I" : "").	      ($in{"force"} ? " -f" : "");local $out = `pkg_add $args $_[0] 2>&1`;if ($?) {	return "<pre>$out</pre>";	}return undef;}# delete_package(package)# Totally remove some packagesub delete_package{local $out = `pkg_delete $_[0] 2>&1`;if ($?) { return "<pre>$out</pre>"; }return undef;}sub package_system{return "FreeBSD Package Manager";}1;

⌨️ 快捷键说明

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