You are not logged in.
Pages: 1
http://linux.about.com/cs/linux101/g/vrms.htm
Vrms tells you what non-free packages you have on your system. So I was wondering if anyone made (or is/will make) a port of this to Arch.
I guess this could be done by having a little file that has the non-free packages listed in it and it greps the output of `pacman -Qqe` for them.
Last edited by Arm-the-Homeless (2009-07-19 20:07:16)
Offline
Port it
I'll look into making a PKGBUILD if someone doesn't beat me to it.
EDIT: Err wait... I meant a port/PKGBUILD. You know...
EDIT2: The source has eluded me.
Last edited by Square (2009-07-19 20:28:58)
Offline
I can't find source either.
Should be easy enough to recreate.
(If I had a list of all the non-free packages in the repos.)
Offline
Here is the list of "bad" packages from Debian Sid vrms v1.15
angband: No commercial distribution
autobook: Modifications limited
doc-html-w3: No modifications or derivatives allowed
font3d: No commercial use
gimp1.2-nonfree: (US only) Includes patent-encumbered algorithms
gimp1.3-nonfree: (US only) Includes patent-encumbered algorithms
gsfonts-other: Partly no modifications allowed, partly shareware
gsn-curses: No modifications allowed
gsn-jigsaw: No modifications allowed
human-icon-theme: Creative Commons Attribution-ShareAlike 2.5 License
hwb: No modifications allowed
ibm-j2re1.5: Proprietary licence, no source available
ibm-j2sdk1.4: Proprietary licence, no source available
ibm-j2sdk1.5: Proprietary licence, no source available
jdk1.1: Proprietary license
lha: No modifications allowed, non-network distributions problematic
mcvert: No commercial distribution
nvidia-glx: Proprietary license
nvidia-glx-dev: Proprietary license
povray: Distribution limitations, modifications limited
povray-doc: Distribution limitations, modifications limited
povray-misc: Distribution limitations, modifications limited
snes9x-common: No commercial use
snes9x-fx: No commercial use
snes9x-opengl: No commercial use
snes9x-svga: No commercial use
snes9x-x: No commercial use
sun-j2re1.3: Proprietary licence, no source available
sun-j2re1.4: Proprietary licence, no source available
sun-j2re1.5: Proprietary licence, no source available
sun-j2sdk1.3: Proprietary licence, no source available
sun-j2sdk1.4: Proprietary licence, no source available
sun-j2sdk1.5: Proprietary licence, no source available
unrar: Modifications problematic
xanim: No commercial distribution
xanim-modules: Highly restricting license terms
xfonts-scalable-nonfree: No modifications allowed
xmame: Distribution limitations, no commercial use
xmame-fx: Distribution limitations, no commercial use
xmame-gl: Distribution limitations, no commercial use
xmame-svga: Distribution limitations, no commercial use
xmame-x: Distribution limitations, no commercial use
and the Perl source
#!/usr/bin/perl
#
# 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.
#
use strict;
use warnings;
use Getopt::Long;
# Declaration of important/main variables.
my $quiet = 0;
my $sparse = 0;
my $help = 0;
my $explain = 1;
my $debug = 0;
my $reasondir = '/usr/share/vrms/reasons/';
my %reason = ();
#
# Auxiliary functions section (FIXME: put them in a file by themselves).
#
# sub usage:
# Input: nothing.
# Output: Messages to stdout telling the usage of the program.
sub usage() {
print <<EOF;
Usage: vrms [OPTIONS] ...
--quiet, -q Do nothing if there are no non-free packages installed.
--explain, -e Give a brief explanation of why a package is non-free,
if available.
--sparse, -s Just list non-free packages, nothing else.
--reason-dir=DIR Use DIR as the reason directory.
--help, -h Display this help.
--debug, -d Generate debugging information.
All options can be prefixed with "no" (eg: --noexplain) to turn them off.
EOF
}
# sub parse_reason_file:
# Input: the name of a reason file and the global hash %reason
# Output: the hash %reason filled with reasons from the input file
# (FIXME: %reason shouldn't be global)
sub parse_reason_file {
my $file = shift;
print "Parsing reason file $file\n" if $debug >= 1;
open(REASON, "<", $file) or
die "Can't open FILE [$file]: $!\n";
while (my $line = <REASON>) {
chomp $line;
# Grab a line of the form 'package: reason', skip if we don't match
my ($pkg, $reason) = ($line =~ /^(\S+):\s+(.*)\s*$/) or next;
print "'$pkg' because '$reason'\n" if ($debug >= 1);
# If this is _our_ master file, then prefer anything
# else (so that package maintainers can override)
next if exists $reason{$pkg} and $file =~ /\/vrms$/;
$reason{$pkg} = $reason;
}
close REASON or
die "Can't close FILE [$file]: $!\n";
}
#
# Main program starts here.
#
GetOptions('q|quiet' => \$quiet,
's|sparse' => \$sparse,
'e|explain!' => \$explain,
'reason-dir=s' => \$reasondir,
'd|debug+' => \$debug,
'h|help' => \$help);
if ($help) {
usage();
exit 0;
}
opendir(REASONDIR, $reasondir) or
die "Can't open DIR [$reasondir]: $!\n";
# Parse all the reason files in $reasondir except those beginning with
# a . or ending with a ~
parse_reason_file("$reasondir/$_")
foreach (grep {!/~$/ && !/^\./} readdir(REASONDIR));
closedir REASONDIR or
die "Can't close DIR [$reasondir]: $!\n";
my $statusfile = '/var/lib/dpkg/status';
my $is_nonfree = 0; ### preset none found, yet
my %nonfree = ();
my $is_other_nonfree = 0; ### preset none found, yet
my %other_nonfree = ();
my $is_contrib = 0; ### preset none found, yet
my %contrib = ();
my $is_other_contrib = 0; ### preset none found, yet
my %other_contrib = ();
my %pkg_status = ();
my $pkgcnt = 0;
my $clumpcnt = 0;
my $dontcarelines = 5; ### no. of lines a non-installed entry may have in the statusfile
my $sysname = "";
chop($sysname = `uname -n`);
open(PKG_SOURCE, "< $statusfile") or
die "Can't open FILE [$statusfile]: $!\n";
$/ = ""; ### snarf a paragraph at a time
while(<PKG_SOURCE>) {
my $clump = $_;
$clumpcnt++;
my (@pkglines) = split(/\n/, $clump);
### iff more than $dontcarelines lines, package is installed, so process it
### (speed-up by skipping don't-care entries)
if (@pkglines > $dontcarelines) {
my $pkg = ""; ### name of this package
my $pkgstatus = ""; ### status
my $plan = ""; ### install plan (hold, deinstall, purge, install, etc.)
my $state = ""; ### state (ok or ???)
my $status = ""; ### status (installed, not-installed, etc.)
my $section = ""; ### section this is where non-free is marked
my $shortdescr = ""; ### one-liner description of pkg
my $linenbr = 0; ### current line number of this pkackag's info
my $label = ""; ### junk field (not used, except to catch split values)
my $has_pkg = 0; ### reset the markers
my $has_status = 0;
my $has_section = 0;
foreach (@pkglines) {
chomp;
$linenbr++;
if (/^Package:/) {
($label, $pkg) = split(/:\s+/,$_,2);
$pkgcnt++;
printf "pkg(%4.4d) pkg=[%s]\n",$pkgcnt,$pkg if $debug >= 1;
$has_pkg = 1; ### we have necessary section
next;
}
if (/^Status:/) {
my $label = "";
($label, $pkgstatus) = split(/:\s+/,$_,2);
print "\tpkgstatus=[$pkgstatus]\n" if $debug >= 1;
$pkg_status{$pkg} = $pkgstatus;
($plan, $state, $status) = split(/\s+/,$pkgstatus);
print "\t\tplan=[$plan]\n" if $debug >= 1;
print "\t\tstate=[$state]\n" if $debug >= 1;
print "\t\tstatus=[$status]\n" if $debug >= 1;
$has_status = 1; ### we have necessary section
next;
}
if (/^Section:/) {
my $label = "";
($label, $section) = split(/:\s+/,$_,2);
print "\tsection=[$section]\n" if $debug >= 1;
$has_section = 1; ### we have necessary section
if ($section =~ /contrib|non-free|restricted|multiverse/) {
### read thru rest of array to find descr instead of waiting for it
my $found_descr =0;
while (! $found_descr) {
if ($linenbr > $#pkglines) {
### iff badly formed entry ensure blank description
print "\tEEEE shortdescr=[$shortdescr]\n" if $debug >= 1;
last;
}
my $dline = $pkglines[$linenbr++];
if($dline =~ /^Description:/) {
($label, $shortdescr) = split(/:\s+/,$dline,2);
print "\tshortdescr=[$shortdescr]\n" if $debug >= 1;
$found_descr = 1;
}
}
if ($section =~ /contrib/) {
if (lc $status eq 'installed') {
$is_contrib = 1;
$contrib{$pkg} = $shortdescr;
} else {
$is_other_contrib = 1;
$other_contrib{$pkg} = $shortdescr;
}
} else {
if (lc $status eq 'installed') {
$is_nonfree = 1;
$nonfree{$pkg} = $shortdescr;
} else {
$is_other_nonfree = 1;
$other_nonfree{$pkg} = $shortdescr;
}
}
}
last; ### this is last desriptor of package we care about so end loop
} else {
### un-processed lines from package info
if($debug >= 1) {
print "\t\t--- $_\n";
}
}
}
if (!$has_status or !$has_pkg) {
print STDERR "vrms: ERROR- Badly formed dpkg-status entry #$clumpcnt!\n";
print STDERR " pkg=[$pkg], pkgstatus=[$pkgstatus], section=[$section] \n";
}
} else {
### Entries which are 2 or 4 lines are not-installed
if ($debug >= 1) {
### emit debug so can veryify parsing
my $lineCt = @pkglines;
print " SKIPPED <5: $lineCt lines\n";
foreach (@pkglines) {
my $spacer = ($_ =~ /Package:/) ? "" : " ";
print " SKIPPED <5:$spacer [$_]\n";
}
}
}
}
close (PKG_SOURCE) or
die "Can't close FILE [$statusfile]: $!\n";
#print "$pkgcnt packages installed\n";
my $nfcnt = 0;
my $pkgname = "";
my $nonfreecnt = (keys %nonfree);
if($is_nonfree) {
if($sparse) {
foreach $pkgname (sort keys (%nonfree)) {
$nfcnt++;
print "$pkgname\n";
}
} else {
$~ = "nonfree_head";
write ;
$~ = "nfp";
foreach $pkgname (sort keys(%nonfree) ) {
$nfcnt++;
write ;
print " Reason: $reason{$pkgname}\n"
if (exists $reason{$pkgname} and $explain);
}
}
}
my $pnfcnt = 0;
my $other_nonfreecnt = (keys %other_nonfree);
if($is_other_nonfree) {
if($sparse) {
foreach $pkgname (sort keys(%other_nonfree)) {
$pnfcnt++;
print "$pkgname\n";
}
} else {
$~ = "nonfree_partialhead";
write;
$~ = "pnf";
foreach $pkgname (sort keys(%other_nonfree)) {
$pnfcnt++;
write;
print " Reason: $reason{$pkgname}\n"
if (exists $reason{$pkgname} and $explain);
}
}
}
my $cbcnt = 0;
my $contribcnt = (keys %contrib);
if($is_contrib) {
print "\n";
if($sparse) {
foreach $pkgname (sort keys (%contrib)) {
$cbcnt++;
print "$pkgname\n";
}
} else {
$~ = "contrib_head";
write ;
$~ = "cbp";
foreach $pkgname (sort keys(%contrib) ) {
$cbcnt++;
write ;
print " Reason: $reason{$pkgname}\n"
if (exists $reason{$pkgname} and $explain);
}
}
}
my $pcbcnt = 0;
my $other_contribcnt = (keys %other_contrib);
if($is_other_contrib) {
if($sparse) {
foreach $pkgname (sort keys(%other_contrib)) {
$pcbcnt++;
print "$pkgname\n";
}
} else {
$~ = "contrib_partialhead";
write;
$~ = "pcb";
foreach $pkgname (sort keys(%other_contrib)) {
$pcbcnt++;
write;
print " Reason: $reason{$pkgname}\n"
if (exists $reason{$pkgname} and $explain);
}
}
}
if (!$quiet and !$sparse) {
printf "\n";
if ($nfcnt != 0 or $pnfcnt != 0) {
my $total_nonfree = $nonfreecnt + $other_nonfreecnt;
my $total_installed = $pkgcnt;
my $percentage = $total_nonfree * 100 / $total_installed;
printf " %d non-free packages, %2.1f%% of %d installed packages.\n",
$total_nonfree, $percentage, $total_installed;
}
if ($cbcnt != 0 or $pcbcnt != 0) {
my $total_contrib = $contribcnt + $other_contribcnt;
my $total_installed = $pkgcnt;
my $percentage = $total_contrib * 100 / $total_installed;
printf " %d contrib packages, %2.1f%% of %d installed packages.\n",
$total_contrib, $percentage, $total_installed;
}
}
if (!$quiet and $nfcnt == 0 and $pnfcnt == 0 and $cbcnt == 0 and $pcbcnt == 0) {
print "No non-free or contrib packages installed on $sysname! rms would be proud.\n"
}
format nonfree_head =
@||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"Non-free packages installed on $sysname"
.
format nonfree_partialhead =
@||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"Non-free packages with status other than installed on $sysname"
.
format contrib_head =
@||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"Contrib packages installed on $sysname"
.
format contrib_partialhead =
@||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"Contrib packages with status other than installed on $sysname"
.
format nfp =
@<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$pkgname, $nonfree{$pkgname}
.
format pnf =
@<<<<<<<<<<<<<<<<<<<<<<<< @<@<<@< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$pkgname, '(', $pkg_status{$pkgname},')', $other_nonfree{$pkgname}
.
format cbp =
@<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$pkgname, $contrib{$pkgname}
.
format pcb =
@<<<<<<<<<<<<<<<<<<<<<<<< @<@<<@< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$pkgname, '(', $pkg_status{$pkgname},')', $other_contrib{$pkgname}
.
Offline
+1, this'd be cool (IMO, of course). Sadly, I know no Perl...
Offline
I'm starting to make the program.
I'll be needing that non-free packages list.
EDIT: All done with (base) program.
Last edited by Arm-the-Homeless (2009-07-25 01:18:36)
Offline
Is this still actual?!
Offline
Is this still actual?!
kinda old, but you can find a list of unfree packages here: http://repo.parabolagnulinux.org/docs/blacklist.txt
(syntax is unfree:free replacement:reason)
Offline
I have taken the above link and adapted it into a workable script, but as fauno_ said it's a bit old so I can't attest to it's quality. Feel free to post changes here and I'll update it. I'll upload it to the aur soon, as well.
[home page] -- [code / configs]
"Once you go Arch, you must remain there for life or else Allan will track you down and break you." -- Bregol
Offline
I have taken the above link and adapted it into a workable script, but as fauno_ said it's a bit old so I can't attest to it's quality. Feel free to post changes here and I'll update it. I'll upload it to the aur soon, as well.
cool! please take note some of the packages aren't unfree, but arch branded (filesystem, both grubs, aif...). and the list is updated regularly, so i think your vrms should download it.
something like this probably does the trick: http://repo.parabolagnulinux.org/files/check-nonfree
we also have a package called your-freedom that conflicts with every package on that list
Edit: I meant the thread was kinda old.
Last edited by fauno_ (2011-02-15 12:18:46)
Offline
wow cool I hadn't heard about parabola! would love to help with anything if ya guys need it
[home page] -- [code / configs]
"Once you go Arch, you must remain there for life or else Allan will track you down and break you." -- Bregol
Offline
Offline
Since none of the scripts mentioned are still available I post mine here. It takes into account the parabola GNU/Linux blacklist and they are a bit restrictive, so if you want to ignore some packages just add them to the ignore list.
#! /usr/bin/env python
#
# Copyright (C) 2012 Diogo Sousa
#
# 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 3 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, see <http://www.gnu.org/licenses/>.
import subprocess
import urllib.request
import urllib.error
blacklist_url='http://repo.parabolagnulinux.org/docs/blacklist.txt'
# Packages that will be ignored.
# eg: ignore=['pacman']
ignore=[]
def get_installed_packages():
packages=str(subprocess.check_output(['pacman','-Q']),'utf-8')
r=[]
for line in packages.split('\n'):
s=line.split(' ')
if len(s) > 0 and len(s[0]) > 0:
r.append(s[0])
return r
def obtain_non_free_packages():
try:
sock=urllib.request.urlopen(blacklist_url)
except urllib.error.HTTPError:
print('Error downloading backlist packages')
exit(-1)
lines=sock.read().decode('utf-8').split('\n')
sock.close()
nonfree={}
for line in lines:
s=line.replace('::',':').split(':')
package=s[0].strip()
if package in ignore:
continue
desc=None
ds=1
if len(s) > 2:
ds=2
desc=' '.join([e.strip() for e in s[ds:]]).strip()
nonfree[package]=desc
return nonfree
def get_nonfree_packages(packages, nonfree):
installed_nonfree=[]
for package in packages:
if package in nonfree:
installed_nonfree.append((package,nonfree[package]))
return installed_nonfree
def print_report(nonfree):
if len(nonfree) == 0:
print('No nonfree packages found :)')
return
print('Nonfree packages:')
max_len=0
for package, _ in nonfree:
if len(package) > max_len:
max_len=len(package)
for package, desc in nonfree:
left=' '.center(max_len-len(package))
print(' '+package+left+' ',end='')
if desc != None:
print(desc)
else:
print()
print()
print('Non-free packages: '+str(len(nonfree)))
def main():
packages=get_installed_packages()
nonfree=obtain_non_free_packages()
nonfree_installed=get_nonfree_packages(packages, nonfree)
print_report(nonfree_installed)
return 0
exit(main())
Offline
We need Richard Matthew Stallman but don't need Virtual Richard Matthew Stallman. pacman is powerful and this commands are enough:
pacman -Qi | grep Name
pacman -Qi | grep License
c/p output to text editor (with row numbers) and find which packages are non-free.
Last edited by hsngrms (2013-02-08 14:01:01)
Offline
Pages: 1