# emerge-lib.pl # Functions for gentoo package management chop($system_arch = `uname -m`); $pkg_dir = "/var/db/pkg"; $portage_bin = "/usr/lib/portage/bin"; $ENV{'TERM'} = "dumb"; $package_list_binary = $package_list_command = "$portage_bin/pkglist"; if (!-x $package_list_binary) { $package_list_binary = &has_command("qlist"); $package_list_command = $package_list_binary." --nocolor -Iv"; } sub list_package_system_commands { return ( $package_list_binary || "pkglist" ); } sub list_update_system_commands { return ("emerge"); } # list_packages([package]*) # Fills the array %packages with all or listed packages sub list_packages { local $i = 0; %packages = ( ); &open_execute_command(LIST, $package_list_command, 1, 1); while(<LIST>) { if (/^([^\/]+)\/([^0-9]+)-(\d\S+)$/ && !@_ || &indexof($2, @_) >= 0) { $packages{$i,'name'} = $2; $packages{$i,'class'} = $1; $packages{$i,'version'} = $3; &open_readfile(BUILD, "$pkg_dir/$1/$2-$3/$2-$3.ebuild"); while(<BUILD>) { if (/DESCRIPTION="([^"]+)"/ || /DESCRIPTION='([^']+)'/) { $packages{$i,'desc'} = $1; last; } } close(BUILD); $i++; } } return $i; } # package_search(string, [allavailable]) # Searches the package database for packages matching some string and puts # them into %packages sub package_search { local $n = 0; local $qm = quotemeta($_[0]); &open_execute_command(SEARCH, "emerge search $qm", 1, 1); while(<SEARCH>) { s/\r|\n//g; s/\033[^m]+m//g; if (/^\*\s+([^\/]+)\/(\S+)/) { $packages{$n,'name'} = $2; $packages{$n,'class'} = $1; $packages{$n,'missing'} = 0; } elsif (/version\s+Available:\s+(\S+)/i) { $packages{$n,'version'} = $1; } elsif (/version\s+Installed:\s+\[\s+Not/i && !$_[1]) { $packages{$n,'missing'} = 1; } elsif (/\s+Description:\s*(.*)/i) { $packages{$n,'desc'} = $1; local $nl = <SEARCH>; chop($nl); if ($nl =~ /\S/) { $packages{$n,'desc'} .= " " if ($packages{$n,'desc'}); $packages{$n,'desc'} .= $nl; } $n++ if (!$packages{$n,'missing'} || $_[1]); } } close(SEARCH); return $n; } # package_info(package) # Returns an array of package information in the order # name, class, description, arch, version, vendor, installtime sub package_info { local %packages; local $n = &list_packages($_[0]); $n || return (); local @st = stat("$pkg_dir/$packages{0,'class'}/$packages{0,'name'}-$packages{0,'version'}"); return ( $packages{0,'name'}, $packages{0,'class'}, $packages{0,'desc'}, $system_arch, $packages{0,'version'}, "Gentoo", &make_date($st[9]) ); } # is_package(file) # Check if some file is a package file sub is_package { local $qm = quotemeta($_[0]); local $out = &backquote_command("emerge --pretend $qm 2>&1", 1); return $? ? 0 : 1; } # file_packages(file) # Returns a list of all packages in the given file, in the form # package description sub file_packages { local @rv; local $qm = quotemeta($_[0]); &open_execute_command(EMERGE, "emerge --pretend $qm", 1, 1); while(<EMERGE>) { s/\r|\n//g; s/\033[^m]+m//g; if (/\s+[NRU]\s+\]\s+([^\/]+)\/([^0-9]+)\-(\d\S+)/) { push(@rv, $2); } } close(EMERGE); return @rv; } # install_options(file, package) # Outputs HTML for choosing install options for some package sub install_options { print &ui_table_row($text{'emerge_noreplace'}, &ui_radio("noreplace", 0, [ [ 0, $text{'yes'} ], [ 1, $text{'no'} ] ])); print &ui_table_row($text{'emerge_onlydeps'}, &ui_yesno_radio("onlydeps", 0)); } $show_install_progress = 1; # install_package(file, package, [&inputs], [show]) # Install the given package from the given file, using options from %in sub install_package { local $file = $_[0]; local $in = $_[2] ? $_[2] : \%in; local $cmd = "emerge"; $cmd .= " --noreplace" if ($in{'noreplace'}); $cmd .= " --onlydeps" if ($in{'onlydeps'}); $cmd .= " ".quotemeta($_[1]); if ($_[3]) { &open_execute_command(OUT, "$cmd 2>&1", 1); while(<OUT>) { print &html_escape($_); } close(OUT); return $? ? "Emerge error" : undef; } else { local $out; &open_execute_command(OUT, "$cmd 2>&1 | tail -10", 1); while(<OUT>) { $out .= $_; } close(OUT); return $? ? "<pre>$out</pre>" : undef; } } # 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 size error sub check_files { local $i = 0; local (@files, %filesmap); local %packages; &list_packages($_[0]); &open_readfile(CONTENTS, "$pkg_dir/$packages{0,'class'}/$packages{0,'name'}-$packages{0,'version'}/CONTENTS"); while(<CONTENTS>) { s/\r|\n//g; local @l = split(/\s+/); $files{$i,'path'} = $l[1]; $files{$i,'type'} = $l[0] eq 'dir' ? 1 : $l[0] eq 'sym' ? 3 : 0; local $real = &translate_filename($l[1]); local @st = stat($real); $files{$i,'user'} = getpwuid($st[4]); $files{$i,'group'} = getgrgid($st[5]); $files{$i,'size'} = $st[7]; if (!-e $l[1]) { $files{$i,'error'} = "Does not exist"; } elsif ($l[0] eq 'sym') { $files{$i,'link'} = $l[3]; local $lnk = readlink($real); $files{$i,'error'} = "Incorrect link" if ($l[3] ne $lnk); } elsif ($l[0] eq 'obj') { push(@files, $l[1]); $filesmap{$l[1]} = $i; $files{$i,'md5'} = $l[2]; } $i++; } close(CONTENTS); if (&has_command("md5sum")) { &open_execute_command(MD5, "md5sum ".join(" ", @files), 1, 1); while(<MD5>) { local ($md, $fn) = split(/\s+/); local $n = $filesmap{$fn}; if ($md ne $files{$n,'md5'}) { $files{$n,'error'} = "Checksum failed"; } } close(MD5); } 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 packages sub installed_file { local ($cf, $type, @packs); local $real_dir = &translate_filename($pkg_dir); while($cf = <$real_dir/*/*/CONTENTS>) { open(FILE, "<".$cf); while(<FILE>) { local @l = split(/\s+/); if ($l[1] eq $_[0]) { # Found it! $cf =~ /\/([^0-9\/]+)-(\d[^\s\/]+)\/CONTENTS$/; push(@packs, $1); $type = $l[0] if (!$type); } } close(FILE); } return 0 if (!@packs); local $real = &translate_filename($_[0]); local @st = stat($real); $file{'packages'} = join(' ', @packs); $file{'path'} = $_[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($real); $file{'type'} = $type eq 'dir' ? 1 : $type eq 'sym' ? 3 : 0; return 1; } # delete_package(package, [&options]) # Attempt to remove some package sub delete_package { local $out = &backquote_logged("emerge -u ".quotemeta($_[0])." 2>&1"); return $? ? "<pre>$out</pre>" : undef; } sub package_system { return "Gentoo Ebuild"; } sub package_help { return "emerge"; } $has_update_system = 1; # update_system_input() # Returns HTML for entering a package to install sub update_system_input { return "$text{'emerge_input'} <input name=update size=20> <input type=button onClick='window.ifield = form.update; chooser = window.open(\"../$module_name/emerge_find.cgi\", \"chooser\", \"toolbar=no,menubar=no,scrollbars=yes,width=600,height=500\")' value=\"$text{'emerge_find'}\">"; } # update_system_install([package]) # Install some package with emerge sub update_system_install { local $update = $_[0] || $in{'update'}; local $cmd = "emerge ".quotemeta($update); local @rv; print "<b>",&text('emerge_install', "<tt>$cmd</tt>"),"</b><p>\n"; print "<pre>\n"; &additional_log('exec', undef, $cmd); &open_execute_command(CMD, "$cmd 2>&1 </dev/null", 1); while(<CMD>) { print &html_escape($_); if (/^\>\>\>\s+([^\/]+)\/([^0-9]+)-(\d\S+)\s+merged\./i) { push(@rv, $2); } } close(CMD); print "</pre>\n"; if ($?) { print "<b>$text{'emerge_failed'}</b><p>\n"; } else { print "<b>$text{'emerge_ok'}</b><p>\n"; } return @rv; } 1;
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
help | Folder | 0755 |
|
|
images | Folder | 0755 |
|
|
lang | Folder | 0755 |
|
|
CHANGELOG | File | 2.82 KB | 0644 |
|
aix-lib.pl | File | 19.2 KB | 0755 |
|
apt-lib.pl | File | 14.09 KB | 0755 |
|
apt_upgrade.cgi | File | 1.97 KB | 0755 |
|
cgi_args.pl | File | 524 B | 0755 |
|
close.cgi | File | 263 B | 0755 |
|
config-aix | File | 30 B | 0644 |
|
config-cobalt-linux | File | 30 B | 0644 |
|
config-coherent-linux | File | 30 B | 0644 |
|
config-corel-linux | File | 33 B | 0644 |
|
config-cygwin | File | 33 B | 0644 |
|
config-debian-linux | File | 51 B | 0644 |
|
config-freebsd | File | 54 B | 0644 |
|
config-freebsd-8.4-ALL | File | 52 B | 0644 |
|
config-gentoo-linux | File | 33 B | 0644 |
|
config-hpux | File | 31 B | 0644 |
|
config-mandrake-linux | File | 30 B | 0644 |
|
config-msc-linux | File | 30 B | 0644 |
|
config-netbsd | File | 34 B | 0644 |
|
config-open-linux | File | 30 B | 0644 |
|
config-openSUSE-Linux-15.0-ALL | File | 30 B | 0644 |
|
config-openbsd | File | 34 B | 0644 |
|
config-openmamba-linux | File | 48 B | 0644 |
|
config-openserver | File | 33 B | 0644 |
|
config-redhat-linux | File | 48 B | 0644 |
|
config-slackware-linux | File | 36 B | 0644 |
|
config-solaris | File | 33 B | 0644 |
|
config-suse-linux | File | 30 B | 0644 |
|
config-syno-linux | File | 50 B | 0644 |
|
config-trustix-linux | File | 30 B | 0644 |
|
config-turbo-linux | File | 30 B | 0644 |
|
config-united-linux | File | 30 B | 0644 |
|
config-unixware | File | 33 B | 0644 |
|
config-windows | File | 30 B | 0644 |
|
config.info | File | 511 B | 0644 |
|
config.info.ca | File | 554 B | 0644 |
|
config.info.cs | File | 372 B | 0644 |
|
config.info.de | File | 523 B | 0644 |
|
config.info.es | File | 320 B | 0644 |
|
config.info.fr | File | 135 B | 0644 |
|
config.info.ja | File | 428 B | 0644 |
|
config.info.ko | File | 409 B | 0644 |
|
config.info.ms | File | 411 B | 0644 |
|
config.info.nl | File | 415 B | 0644 |
|
config.info.no | File | 424 B | 0644 |
|
config.info.pl | File | 392 B | 0644 |
|
config.info.ru | File | 175 B | 0644 |
|
config.info.sv | File | 224 B | 0644 |
|
config.info.tr | File | 123 B | 0644 |
|
config.info.uk | File | 174 B | 0644 |
|
config.info.zh | File | 122 B | 0644 |
|
config.info.zh_TW | File | 125 B | 0644 |
|
csw-lib.pl | File | 2.69 KB | 0755 |
|
cygwin-lib.pl | File | 22.34 KB | 0755 |
|
debian-lib.pl | File | 6.67 KB | 0755 |
|
delete_file.cgi | File | 239 B | 0755 |
|
delete_pack.cgi | File | 1.46 KB | 0755 |
|
delete_packs.cgi | File | 1.85 KB | 0755 |
|
do_install.cgi | File | 2.67 KB | 0755 |
|
edit_pack.cgi | File | 1.13 KB | 0755 |
|
emerge-lib.pl | File | 7.65 KB | 0755 |
|
file_info.cgi | File | 2.09 KB | 0755 |
|
find.cgi | File | 1.63 KB | 0755 |
|
freebsd-lib.pl | File | 7.95 KB | 0755 |
|
hpux-lib.pl | File | 8.01 KB | 0755 |
|
index.cgi | File | 3 KB | 0755 |
|
install_pack.cgi | File | 4.71 KB | 0755 |
|
ipkg-close.cgi | File | 269 B | 0755 |
|
ipkg-edit_pack.cgi | File | 1.45 KB | 0755 |
|
ipkg-lib.pl | File | 7.78 KB | 0755 |
|
ipkg-open.cgi | File | 243 B | 0755 |
|
ipkg-tree.cgi | File | 4 KB | 0755 |
|
ipkg_upgrade.cgi | File | 926 B | 0755 |
|
list_pack.cgi | File | 1.85 KB | 0755 |
|
log_parser.pl | File | 1.34 KB | 0755 |
|
module.info | File | 484 B | 0644 |
|
module.info.af | File | 0 B | 0644 |
|
module.info.af.auto | File | 127 B | 0644 |
|
module.info.ar | File | 0 B | 0644 |
|
module.info.ar.auto | File | 170 B | 0644 |
|
module.info.be | File | 0 B | 0644 |
|
module.info.be.auto | File | 216 B | 0644 |
|
module.info.bg | File | 0 B | 0644 |
|
module.info.bg.auto | File | 214 B | 0644 |
|
module.info.ca | File | 116 B | 0644 |
|
module.info.ca.auto | File | 21 B | 0644 |
|
module.info.cs | File | 30 B | 0644 |
|
module.info.cs.auto | File | 114 B | 0644 |
|
module.info.da | File | 0 B | 0644 |
|
module.info.da.auto | File | 124 B | 0644 |
|
module.info.de | File | 106 B | 0644 |
|
module.info.de.auto | File | 21 B | 0644 |
|
module.info.el | File | 0 B | 0644 |
|
module.info.el.auto | File | 220 B | 0644 |
|
module.info.es | File | 29 B | 0644 |
|
module.info.es.auto | File | 106 B | 0644 |
|
module.info.eu | File | 0 B | 0644 |
|
module.info.eu.auto | File | 129 B | 0644 |
|
module.info.fa | File | 0 B | 0644 |
|
module.info.fa.auto | File | 215 B | 0644 |
|
module.info.fi | File | 0 B | 0644 |
|
module.info.fi.auto | File | 130 B | 0644 |
|
module.info.fr | File | 29 B | 0644 |
|
module.info.fr.auto | File | 117 B | 0644 |
|
module.info.he | File | 0 B | 0644 |
|
module.info.he.auto | File | 152 B | 0644 |
|
module.info.hr | File | 0 B | 0644 |
|
module.info.hr.auto | File | 138 B | 0644 |
|
module.info.hu | File | 38 B | 0644 |
|
module.info.hu.auto | File | 108 B | 0644 |
|
module.info.it | File | 0 B | 0644 |
|
module.info.it.auto | File | 134 B | 0644 |
|
module.info.ja | File | 43 B | 0644 |
|
module.info.ja.auto | File | 157 B | 0644 |
|
module.info.ko | File | 34 B | 0644 |
|
module.info.ko.auto | File | 128 B | 0644 |
|
module.info.lt | File | 0 B | 0644 |
|
module.info.lt.auto | File | 162 B | 0644 |
|
module.info.lv | File | 0 B | 0644 |
|
module.info.lv.auto | File | 151 B | 0644 |
|
module.info.ms | File | 104 B | 0644 |
|
module.info.ms.auto | File | 18 B | 0644 |
|
module.info.mt | File | 0 B | 0644 |
|
module.info.mt.auto | File | 150 B | 0644 |
|
module.info.nl | File | 27 B | 0644 |
|
module.info.nl.auto | File | 104 B | 0644 |
|
module.info.no | File | 26 B | 0644 |
|
module.info.no.auto | File | 107 B | 0644 |
|
module.info.pl | File | 121 B | 0644 |
|
module.info.pl.auto | File | 21 B | 0644 |
|
module.info.pt | File | 28 B | 0644 |
|
module.info.pt.auto | File | 102 B | 0644 |
|
module.info.pt_BR | File | 0 B | 0644 |
|
module.info.pt_BR.auto | File | 139 B | 0644 |
|
module.info.ro | File | 0 B | 0644 |
|
module.info.ro.auto | File | 134 B | 0644 |
|
module.info.ru | File | 30 B | 0644 |
|
module.info.ru.auto | File | 205 B | 0644 |
|
module.info.sk | File | 0 B | 0644 |
|
module.info.sk.auto | File | 145 B | 0644 |
|
module.info.sl | File | 0 B | 0644 |
|
module.info.sl.auto | File | 132 B | 0644 |
|
module.info.sv | File | 21 B | 0644 |
|
module.info.sv.auto | File | 100 B | 0644 |
|
module.info.th | File | 0 B | 0644 |
|
module.info.th.auto | File | 253 B | 0644 |
|
module.info.tr | File | 28 B | 0644 |
|
module.info.tr.auto | File | 107 B | 0644 |
|
module.info.uk | File | 0 B | 0644 |
|
module.info.uk.auto | File | 202 B | 0644 |
|
module.info.ur | File | 0 B | 0644 |
|
module.info.ur.auto | File | 208 B | 0644 |
|
module.info.vi | File | 0 B | 0644 |
|
module.info.vi.auto | File | 144 B | 0644 |
|
module.info.zh | File | 18 B | 0644 |
|
module.info.zh.auto | File | 91 B | 0644 |
|
module.info.zh_TW | File | 24 B | 0644 |
|
module.info.zh_TW.auto | File | 97 B | 0644 |
|
msi-lib.pl | File | 8.45 KB | 0755 |
|
open.cgi | File | 238 B | 0755 |
|
openbsd-lib.pl | File | 4.72 KB | 0755 |
|
pkg-lib.pl | File | 2.5 KB | 0644 |
|
pkgadd-lib.pl | File | 9.97 KB | 0755 |
|
pkgadd-no-ask | File | 164 B | 0644 |
|
pkgsrc-lib.pl | File | 7.24 KB | 0644 |
|
ports-lib.pl | File | 3.49 KB | 0644 |
|
ports_upgrade.cgi | File | 501 B | 0755 |
|
rhn-lib.pl | File | 3.02 KB | 0755 |
|
rhn.cgi | File | 1.3 KB | 0755 |
|
rhn_check.cgi | File | 1.84 KB | 0755 |
|
rpm-lib.pl | File | 11.24 KB | 0755 |
|
rpmfind.cgi | File | 2.11 KB | 0755 |
|
search.cgi | File | 2.27 KB | 0755 |
|
slackware-lib.pl | File | 6.95 KB | 0755 |
|
software-lib.pl | File | 7.57 KB | 0755 |
|
tree.cgi | File | 3.79 KB | 0755 |
|
urpmi-lib.pl | File | 2.14 KB | 0755 |
|
urpmi_upgrade.cgi | File | 839 B | 0755 |
|
view.cgi | File | 931 B | 0755 |
|
yum-lib.pl | File | 13.06 KB | 0755 |
|
yum_upgrade.cgi | File | 908 B | 0755 |
|