ref: 0853e2cc3bedc2da1eb3ad50f48b62278217c816
parent: ff2e8f308d3862ce1927bdc20314fe7610564566
author: stanley lieber <[email protected]>
date: Mon May 25 11:03:44 EDT 2015
remove pkg(1): we regret the error
--- a/sys/man/1/pkg
+++ /dev/null
@@ -1,122 +1,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).
--- a/sys/src/cmd/pkg/create
+++ /dev/null
@@ -1,23 +1,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
--- a/sys/src/cmd/pkg/install
+++ /dev/null
@@ -1,19 +1,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
--- a/sys/src/cmd/pkg/list
+++ /dev/null
@@ -1,9 +1,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'
--- a/sys/src/cmd/pkg/local
+++ /dev/null
@@ -1,3 +1,0 @@
-#!/bin/rc
-
-ls -p /sys/lib/pkg
--- a/sys/src/cmd/pkg/mkfile
+++ /dev/null
@@ -1,20 +1,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/*
-
--- a/sys/src/cmd/pkg/remove
+++ /dev/null
@@ -1,19 +1,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
-}
--- a/sys/src/cmd/pkg/unpkg.c
+++ /dev/null
@@ -1,108 +1,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);
- }
-}