remove pkg(1): we regret the error

This commit is contained in:
stanley lieber 2015-05-25 15:03:44 -04:00
parent ff2e8f308d
commit 0853e2cc3b
8 changed files with 0 additions and 323 deletions

View file

@ -1,122 +0,0 @@
.TH PKG 1
.SH NAME
create, install, list, local, remove, unpkg \- trivial package management
.SH SYNOPSIS
.B pkg/create
.I name
.br
.B pkg/install
.I name
.br
.B pkg/list
.br
.B pkg/local
.br
.B pkg/remove
.I name
.br
.B pkg/unpkg
.SH DESCRIPTION
.I Pkg
is a simple package management system primarily written in
.IR rc (1).
It can be used to create, install, and remove software packages
from an arbitrary package repository, indicated by the environment
variable
.I $pkgpath.
If
.I $pkgpath
is not set, the system defaults to a hardcoded repository of approved
packages.
.TP
.I Pkg/create
Create builds a new package
.IR name ,
whose source is found in directory
.IR name ,
then packs it into a
.I bzip2 (see
.IR gzip (1))
compressed
.IR tar (1)
archive suitable for upload to a package
repository. The source directory should be provided as a full path.
.TP
.I Pkg/install
Install the package
.I name
from the current repository, unpacking the executables in
.B /$cputype/bin/
or
.B /rc/bin/
and the source in
.B /sys/src/pkg/.
.TP
.I Pkg/list
List packages available from the current repository.
.TP
.I Pkg/local
List locally installed packages.
.TP
.I Pkg/remove
Remove the package
.I name
from the local system.
.TP
.I Pkg/unpkg
A modified
.IR tar (1)
used by
.B pkg/install
to generate checksums for every unpacked file.
.SH EXAMPLES
.LP
Create the package
.B irc7-2012.06.22:
.sp 1
.EX
% pkg/create /sys/src/pkg/irc7-2012.06.22
.EE
.LP
Install the
.B mpm
troff macros:
.sp 1
.EX
% pkg/install mpm-2011.05.14
.EE
.SH FILES
.TF
.TP
.B /sys/lib/pkg/*
hash files of packages installed locally.
.TP
.B /sys/src/pkg/*
source files of packages installed locally.
.SH SOURCE
.B /sys/src/cmd/pkg/create
.br
.B /sys/src/cmd/pkg/install
.br
.B /sys/src/cmd/pkg/list
.br
.B /sys/src/cmd/pkg/local
.br
.B /sys/src/cmd/pkg/remove
.br
.B /sys/src/cmd/pkg/unpkg.c
.SH REPOSITORIES
.B http://9front.org/pkg/386
.br
.B https://offblast.org/pkg/386
.br
.B https://offblast.org/pkg/amd64
.br
.B http://plan9.bell-labs.com/sources/contrib/staal1978/pkg
.SH SEE ALSO
.IR gzip (1) ,
.IR tar (1)
.SH HISTORY
.I Pkg
first appeared in 9front (May, 2011).

View file

@ -1,23 +0,0 @@
#!/bin/rc -e
i=`{basename $1}
d=$1
echo Creating $i
C=`{pwd}
@{
rfork en
mkdir -p /tmp/$i/files/sys/src/pkg/$i
dircp $d /tmp/$i/files/sys/src/pkg/$i
cd $d
mk
divergefs -p /tmp/$i /
mk install
mk clean
unmount /
}
cd /tmp/$i/files
rm -r env
tar cv * | bzip2 -9 > $C/$i.tbz
cd /tmp
rm -r $i
echo Created $C/$i.tbz

View file

@ -1,19 +0,0 @@
#!/bin/rc
if(~ $#pkgpath 0)
pkgpath=http://9front.org/pkg/$cputype
cd /
mkdir -p /sys/lib/pkg
if (test -s /sys/lib/pkg/$1) {
echo $1 already installed
exit
}
echo Installing $1
if(~ $pkgpath ftp* http*)
cmd=hget
if not
cmd=cat
if(! $cmd $pkgpath/$1.tbz | bunzip2 | pkg/unpkg >/sys/lib/pkg/$1)
if(! test -s /sys/lib/pkg/$1)
rm -f /sys/lib/pkg/$1

View file

@ -1,9 +0,0 @@
#!/bin/rc
if(~ $#pkgpath 0)
pkgpath=http://9front.org/pkg/$cputype
if(~ $pkgpath ftp* http*)
hget $pkgpath | htmlfmt | grep '\.tbz' | sed -e 's/\.tbz.*$//g' | awk '{print $NF}'
if not
ls -p $pkgpath/*.tbz | sed 's/\.tbz.*$//g'

View file

@ -1,3 +0,0 @@
#!/bin/rc
ls -p /sys/lib/pkg

View file

@ -1,20 +0,0 @@
</$objtype/mkfile
all: $O.unpkg
echo
$O.unpkg: unpkg.c
$CC unpkg.c
$LD -o $O.unpkg unpkg.$O
install:V: $O.unpkg
mkdir -p /$objtype/bin/pkg
cp $O.unpkg /$objtype/bin/pkg/unpkg
cp create install list local remove /$objtype/bin/pkg
clean:
rm -f $O.unpkg *.$O
nuke: clean
rm -f /$objtype/bin/pkg/*

View file

@ -1,19 +0,0 @@
#!/bin/rc -e
cd /
if(test -s /sys/lib/pkg/$1) {
fs=(`{cat /sys/lib/pkg/$1 | awk '{print $1}'})
ss=(`{cat /sys/lib/pkg/$1 | awk '{print $2}'})
for(i in `{seq $#fs}) {
s=`{sha1sum $fs($i) | awk '{print $1}' | tr a-z A-Z}
if(test $s '=' $ss($i)) {
echo D $fs($i)
rm $fs($i)
}
if not {
echo M $fs($i) NOT DELETING
}
}
rm -rf /sys/src/pkg/$1
rm /sys/lib/pkg/$1
}

View file

@ -1,108 +0,0 @@
#include <u.h>
#include <libc.h>
#include <mp.h>
#include <libsec.h>
struct th {
char *name;
ulong perm;
ulong size;
char type;
char *user, *group;
};
static char *sndup(char* s, ulong n) {
char *d, *p;
p = memchr(s, 0, n);
if(p)
n = p-s;
d = malloc(n+1);
memcpy(d,s,n);
d[n] = 0;
return d;
}
int readheader(struct th* th) {
int i;
char b[512];
if(readn(0, b, 512) != 512) return -1;
// Check for end of archive
for(i=0; i<512; i++) {
if(b[i]!=0) goto rhok;
}
if(readn(0, b, 512) != 512) return -1;
for(i=0; i<512; i++) {
if(b[i]!=0) return -1;
}
return 0;
rhok:
th->name = cleanname(sndup(b, 100));
th->perm = strtoul(b+100, nil, 8);
th->size = strtoul(b+124, nil, 8);
th->type = b[156];
th->user = sndup(b+265, 32);
th->group= sndup(b+297, 32);
return 1;
}
void main(int argc, char *argv[]) {
ARGBEGIN {
} ARGEND;
for(;;) {
struct th th;
ulong off;
uchar b[512];
char err[ERRMAX];
DigestState *s;
int r, wfd;
r = readheader(&th);
if(r == 0)
exits(nil);
if(r < 0)
sysfatal("unexpected eof");
switch(th.type) {
case '5':
if((wfd = create(th.name, OREAD, DMDIR|th.perm)) >= 0)
close(wfd);
break;
case '0': case 0:
fprint(2, "A %s\n", th.name);
if((wfd = create(th.name, OWRITE|OEXCL, th.perm)) < 0)
sysfatal("%r", th.name);
s = nil;
for(off=0; off<th.size; off+=512) {
if(readn(0, b, 512) == 512){
if((r = th.size-off) > 512)
r = 512;
if(write(wfd, b, r) == r){
s = sha1(b, r, nil, s);
continue;
}
}
errstr(err, sizeof(err));
remove(th.name);
errstr(err, sizeof(err));
sysfatal("%s: %r", th.name);
}
uchar digest[20], hdigest[41];
sha1(nil, 0, digest, s);
enc16((char*)hdigest, 41, digest, 20);
print("%s\t%s\n", th.name, hdigest);
close(wfd);
break;
default:
sysfatal("Unknown file type '%c'", th.type);
}
free(th.name);
free(th.user);
free(th.group);
}
}