|
|
@ -1,321 +0,0 @@ |
|
|
|
diff -dur /usr/src/mine-0.21/install.c ./install.c
|
|
|
|
--- /usr/src/mine-0.21/install.c 2005-03-23 09:51:06.000000000 +0100
|
|
|
|
+++ ./install.c 2005-05-03 13:14:05.000000000 +0200
|
|
|
|
@@ -137,6 +137,21 @@
|
|
|
|
O_RDONLY, 0, 0) == -1) goto error_errno; |
|
|
|
if ( mode_test && mode_verbose ) printf("-- %s --\n", pname); |
|
|
|
|
|
|
|
+ FILE *logfile = NULL;
|
|
|
|
+ if ( ! mode_test )
|
|
|
|
+ {
|
|
|
|
+ char postinst[1024];
|
|
|
|
+ snprintf(postinst, 1024, "%s/var/adm/postinstall/%s-install.XXXXXX", root, pname);
|
|
|
|
+ if ( mkstemp(postinst) != -1 )
|
|
|
|
+ logfile = fopen(postinst, "w");
|
|
|
|
+ if ( mode_verbose ) {
|
|
|
|
+ if ( logfile == NULL )
|
|
|
|
+ printf("Not writing postinstall log\n");
|
|
|
|
+ else
|
|
|
|
+ printf("Writing postinstall log to %s\n", postinst);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
filename = 0; |
|
|
|
while (th_read(t) == 0) |
|
|
|
{ |
|
|
|
@@ -187,17 +201,21 @@
|
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
- if (mode_verbose)
|
|
|
|
+ if ( mode_verbose )
|
|
|
|
printf("%s: %s\n", pname, filename); |
|
|
|
rename(buffer, buffer3); |
|
|
|
if (tar_extract_file(t, buffer) != 0) |
|
|
|
goto error_errno; |
|
|
|
unlink(buffer3); |
|
|
|
+ if ( logfile != NULL )
|
|
|
|
+ fprintf(logfile, "%s: %s\n", pname, filename);
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
tar_close(t); close(bunzip2tar[0]); |
|
|
|
cdb_free(&c); close(gem_fd); |
|
|
|
+
|
|
|
|
+ if ( logfile != NULL ) fclose(logfile);
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
diff -dur /usr/src/mine-0.21/md5sum.c ./md5sum.c
|
|
|
|
--- /usr/src/mine-0.21/md5sum.c 2005-03-23 09:51:06.000000000 +0100
|
|
|
|
+++ ./md5sum.c 2005-05-03 16:52:52.000000000 +0200
|
|
|
|
@@ -41,21 +41,31 @@
|
|
|
|
? "" : md5_file(realfilename); |
|
|
|
} |
|
|
|
|
|
|
|
+/* Returns 1 if file is duplicate, 2 if file is modified. */
|
|
|
|
int md5sum_check(char * root, char * filename) |
|
|
|
{ |
|
|
|
char *md5_f, *md5_d; |
|
|
|
|
|
|
|
md5_f = md5sum_create(root, filename); |
|
|
|
md5_d = memdb_get(&md5_memdb, filename); |
|
|
|
-
|
|
|
|
- return md5_f != NULL && md5_d != NULL && strcmp(md5_f, md5_d);
|
|
|
|
+
|
|
|
|
+ if (md5_f == NULL || strcmp(md5_f, "") == 0)
|
|
|
|
+ return 0;
|
|
|
|
+ else if (md5_d == NULL)
|
|
|
|
+ return 1;
|
|
|
|
+ else if (strcmp(md5_f, md5_d) == 0)
|
|
|
|
+ return 0;
|
|
|
|
+ else
|
|
|
|
+ return 2;
|
|
|
|
} |
|
|
|
|
|
|
|
void md5sum_initdb(char * root, int verbose) |
|
|
|
{ |
|
|
|
struct dirent *md5_dent; |
|
|
|
- char buffer[1024];
|
|
|
|
+ char buffer[1024], buffer2[1024];
|
|
|
|
char *md5sum, *filename; |
|
|
|
+ const char const *admdirs[6] =
|
|
|
|
+ {"cksums", "dependencies", "descs", "flists", "md5sums", "packages"};
|
|
|
|
FILE *f; |
|
|
|
DIR *d; |
|
|
|
|
|
|
|
@@ -71,6 +81,16 @@
|
|
|
|
root, md5_dent->d_name); |
|
|
|
f = fopen(buffer, "r"); |
|
|
|
if ( f != NULL ) { |
|
|
|
+ /* Add the /var/adm files of each package to the
|
|
|
|
+ md5sum memdb so md5sum_check() recognizes them. */
|
|
|
|
+ int n;
|
|
|
|
+ for (n = 0; n < 6; n++) {
|
|
|
|
+ snprintf(buffer2, 1024, "var/adm/%s/%s",
|
|
|
|
+ admdirs[n], md5_dent->d_name);
|
|
|
|
+ memdb_put(&md5_memdb, buffer2,
|
|
|
|
+ md5sum_create(root, buffer2));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
while (fgets(buffer, 1024, f) != NULL) { |
|
|
|
md5sum = strtok(buffer, " \t\n"); |
|
|
|
filename = strtok(NULL, "\n"); |
|
|
|
diff -dur /usr/src/mine-0.21/mine.c ./mine.c
|
|
|
|
--- /usr/src/mine-0.21/mine.c 2005-03-23 09:51:06.000000000 +0100
|
|
|
|
+++ ./mine.c 2005-05-03 17:40:51.000000000 +0200
|
|
|
|
@@ -87,13 +87,13 @@
|
|
|
|
"\n" |
|
|
|
"Install (-i), remove (-r) and check (-y) GEM packages:\n" |
|
|
|
"\n" |
|
|
|
-" mine -i [ -t ] [ -v ] [ -f ] [-x glob ] [ -R root ] package1.gem [ .. ]\n"
|
|
|
|
-" mine -r [ -t ] [ -v ] [ -f ] [ -s ] [ -R root ] package1 [ package2 [ .. ] ]\n"
|
|
|
|
+" mine -i [ -R root ] [ -t ] [ -v ] [ -f ] [-x glob ] package1.gem [ .. ]\n"
|
|
|
|
+" mine -r [ -R root ] [ -t ] [ -v ] [ -f ] [ -s ] package1 [ package2 [ .. ] ]\n"
|
|
|
|
" mine -y [ -R root ] package1 [ package2 [ .. ] ]\n" |
|
|
|
"\n" |
|
|
|
"Query installed packages or GEM package files:\n" |
|
|
|
"\n" |
|
|
|
-" mine {query-mode} [ -h | -H ] [ package1 [ package2.gem [ .. ] ] ]\n"
|
|
|
|
+" mine {query-mode} [ -R root ] [ -h | -H ] [ package1 [ package2.gem [ .. ] ] ]\n"
|
|
|
|
"\n" |
|
|
|
" Where {query-mode} might be one of:\n" |
|
|
|
"\n" |
|
|
|
@@ -114,13 +114,19 @@
|
|
|
|
" -x next parameter is a pattern for files to skip\n" |
|
|
|
" -R next parameter is the root directory\n" |
|
|
|
"\n" |
|
|
|
-"Create GEM package files from installed packages:\n"
|
|
|
|
+"Create GEM (-C) and .tar.bz2 (-T) package files from installed packages:\n"
|
|
|
|
"\n" |
|
|
|
" mine -C var-adm-dir package-tar-bz2 package-name gem-file\n" |
|
|
|
" mine -T var-adm-dir root-dir package-name package-tar-bz2\n" |
|
|
|
"\n" |
|
|
|
+"E.g. this will create a GEM file from the mine package installed in /:\n"
|
|
|
|
+"\n"
|
|
|
|
+" mine -T /var/adm / mine mine.tar.bz2\n"
|
|
|
|
+" mine -C /var/adm mine.tar.bz2 mine.gem\n"
|
|
|
|
+"\n"
|
|
|
|
"Hint: After installing, updating or removing packages you should run the\n" |
|
|
|
-" script 'cron.run'. This updates some important system files.\n"
|
|
|
|
+" scripts 'cron.run' and 'postinstall'. This updates some important\n"
|
|
|
|
+" system files.\n"
|
|
|
|
"\n" |
|
|
|
); |
|
|
|
exit(1); |
|
|
|
@@ -316,9 +322,7 @@
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'R': |
|
|
|
- if ( mine_root_dir == NULL &&
|
|
|
|
- (mine_mode == MINE_MODE_INSTALL ||
|
|
|
|
- mine_mode == MINE_MODE_REMOVE) )
|
|
|
|
+ if ( mine_root_dir == NULL )
|
|
|
|
{ |
|
|
|
mine_root_dir = optarg; |
|
|
|
} else |
|
|
|
@@ -340,6 +344,11 @@
|
|
|
|
|
|
|
|
if ( mine_mode == MINE_MODE_NONE ) help(); |
|
|
|
if ( mine_root_dir == NULL ) mine_root_dir = ""; |
|
|
|
+ else if ( !(mine_mode == MINE_MODE_INSTALL ||
|
|
|
|
+ mine_mode == MINE_MODE_REMOVE ||
|
|
|
|
+ mine_mode == MINE_MODE_CHECK ||
|
|
|
|
+ mine_mode == MINE_MODE_PKGLIST ||
|
|
|
|
+ mine_mode == MINE_MODE_SHOWFILE) ) help();
|
|
|
|
|
|
|
|
if (optind < argc) |
|
|
|
{ |
|
|
|
@@ -362,11 +371,11 @@
|
|
|
|
break; |
|
|
|
|
|
|
|
case MINE_MODE_PKGLIST: |
|
|
|
- rc = gem_pkglist(argv[optind]);
|
|
|
|
+ rc = gem_pkglist(mine_root_dir, argv[optind]);
|
|
|
|
break; |
|
|
|
|
|
|
|
case MINE_MODE_SHOWFILE: |
|
|
|
- rc = gem_showfile( mine_file_key_name,
|
|
|
|
+ rc = gem_showfile( mine_root_dir, mine_file_key_name,
|
|
|
|
mine_mode_header_block, |
|
|
|
argv[optind]); |
|
|
|
break; |
|
|
|
@@ -398,20 +407,24 @@
|
|
|
|
mine_mode == MINE_MODE_REMOVE || |
|
|
|
mine_mode == MINE_MODE_SHOWKEY ) help(); |
|
|
|
|
|
|
|
- n = scandir("/var/adm/packages", &namelist, 0, alphasort);
|
|
|
|
+ char buffer[1024];
|
|
|
|
+ snprintf(buffer, 1024, "%s/var/adm/packages", mine_root_dir);
|
|
|
|
+ n = scandir(buffer, &namelist, 0, alphasort);
|
|
|
|
if (n < 0) { |
|
|
|
- perror("Can't read /var/adm/packages");
|
|
|
|
+ char buffer2[1024];
|
|
|
|
+ snprintf(buffer2, 1024, "Can't read %s", buffer);
|
|
|
|
+ perror(buffer2);
|
|
|
|
exit(1); |
|
|
|
} |
|
|
|
while(n--) { |
|
|
|
rc = 0; |
|
|
|
switch (mine_mode) { |
|
|
|
case MINE_MODE_PKGLIST: |
|
|
|
- rc = gem_pkglist(namelist[n]->d_name);
|
|
|
|
+ rc = gem_pkglist(mine_root_dir, namelist[n]->d_name);
|
|
|
|
break; |
|
|
|
|
|
|
|
case MINE_MODE_SHOWFILE: |
|
|
|
- rc = gem_showfile( mine_file_key_name,
|
|
|
|
+ rc = gem_showfile(mine_root_dir, mine_file_key_name,
|
|
|
|
mine_mode_header_block, |
|
|
|
namelist[n]->d_name); |
|
|
|
break; |
|
|
|
diff -dur /usr/src/mine-0.21/mine.h ./mine.h
|
|
|
|
--- /usr/src/mine-0.21/mine.h 2005-03-23 09:51:06.000000000 +0100
|
|
|
|
+++ ./mine.h 2005-05-03 13:05:51.000000000 +0200
|
|
|
|
@@ -37,9 +37,9 @@
|
|
|
|
extern int gem_remove(char * root, int mode_test, int mode_verbose, |
|
|
|
int mode_force, int mode_sub, char * package); |
|
|
|
|
|
|
|
-extern int gem_pkglist(char * package);
|
|
|
|
+extern int gem_pkglist(char * root, char * package);
|
|
|
|
|
|
|
|
-extern int gem_showfile(char * name, int mode_header_block, char * package);
|
|
|
|
+extern int gem_showfile(char * root, char * name, int mode_header_block, char * package);
|
|
|
|
|
|
|
|
extern int gem_showkey(char * name, int mode_header_line, |
|
|
|
int mode_header_block, char * package); |
|
|
|
diff -dur /usr/src/mine-0.21/pkglist.c ./pkglist.c
|
|
|
|
--- /usr/src/mine-0.21/pkglist.c 2005-03-23 09:51:06.000000000 +0100
|
|
|
|
+++ ./pkglist.c 2005-05-03 13:05:51.000000000 +0200
|
|
|
|
@@ -77,12 +77,12 @@
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
|
|
|
|
-int gem_pkglist(char * package)
|
|
|
|
+int gem_pkglist(char * root, char * package)
|
|
|
|
{ |
|
|
|
char buffer[1024]; |
|
|
|
FILE *f; |
|
|
|
|
|
|
|
- snprintf(buffer, 1024, "/var/adm/packages/%s", package);
|
|
|
|
+ snprintf(buffer, 1024, "%s/var/adm/packages/%s", root, package);
|
|
|
|
if ( (f = fopen(buffer, "r")) == NULL ) |
|
|
|
return gem_pkglist_gemfile(package); |
|
|
|
|
|
|
|
diff -dur /usr/src/mine-0.21/remove.c ./remove.c
|
|
|
|
--- /usr/src/mine-0.21/remove.c 2005-03-23 09:51:06.000000000 +0100
|
|
|
|
+++ ./remove.c 2005-05-03 16:50:40.000000000 +0200
|
|
|
|
@@ -32,7 +32,7 @@
|
|
|
|
|
|
|
|
/* we need to reverse the package file list so we first remove |
|
|
|
* the content of a directory and after that the directory itself. |
|
|
|
- * so we temporary store the data in a liked list.
|
|
|
|
+ * so we temporarily store the data in a linked list.
|
|
|
|
*/ |
|
|
|
struct flist; |
|
|
|
struct flist { |
|
|
|
@@ -98,6 +98,22 @@
|
|
|
|
} |
|
|
|
fclose(f); |
|
|
|
|
|
|
|
+ FILE *logfile = NULL;
|
|
|
|
+ if ( ! mode_test )
|
|
|
|
+ {
|
|
|
|
+ char postinst[1024];
|
|
|
|
+ snprintf(postinst, 1024, "%s/var/adm/postinstall/%s-remove.XXXXXX",
|
|
|
|
+ root, package);
|
|
|
|
+ if ( mkstemp(postinst) != -1 )
|
|
|
|
+ logfile = fopen(postinst, "w");
|
|
|
|
+ if ( mode_verbose ) {
|
|
|
|
+ if ( logfile == NULL )
|
|
|
|
+ printf("Not writing postremove log\n");
|
|
|
|
+ else
|
|
|
|
+ printf("Writing postremove log to %s\n", postinst);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
while ( flist ) |
|
|
|
{ |
|
|
|
filename = flist->filename; |
|
|
|
@@ -158,9 +173,13 @@
|
|
|
|
errors++; |
|
|
|
} |
|
|
|
} |
|
|
|
+ if ( logfile != NULL )
|
|
|
|
+ fprintf(logfile, "%s: %s\n", package, filename);
|
|
|
|
} |
|
|
|
|
|
|
|
free(filename); |
|
|
|
} |
|
|
|
|
|
|
|
+ if ( logfile != NULL ) fclose(logfile);
|
|
|
|
+
|
|
|
|
if ( errors ) |
|
|
|
diff -dur /usr/src/mine-0.21/showfile.c ./showfile.c
|
|
|
|
--- /usr/src/mine-0.21/showfile.c 2005-03-23 09:51:06.000000000 +0100
|
|
|
|
+++ ./showfile.c 2005-05-03 13:05:51.000000000 +0200
|
|
|
|
@@ -20,12 +20,12 @@
|
|
|
|
#include <stdio.h> |
|
|
|
#include "mine.h" |
|
|
|
|
|
|
|
-int gem_showfile(char * name, int mode_header_block, char * package)
|
|
|
|
+int gem_showfile(char * root, char * name, int mode_header_block, char * package)
|
|
|
|
{ |
|
|
|
char buffer[1024]; |
|
|
|
FILE *f; |
|
|
|
|
|
|
|
- snprintf(buffer, 1024, "/var/adm/%s/%s", name, package);
|
|
|
|
+ snprintf(buffer, 1024, "%s/var/adm/%s/%s", root, name, package);
|
|
|
|
if ( (f = fopen(buffer, "r")) == NULL ) { |
|
|
|
return gem_showkey(name, 0, mode_header_block, package); |
|
|
|
} |
|
|
|
diff -dur /usr/src/mine-0.21/TODO ./TODO
|
|
|
|
--- /usr/src/mine-0.21/TODO 2003-08-28 13:49:26.000000000 +0200
|
|
|
|
+++ ./TODO 2005-05-03 17:07:29.000000000 +0200
|
|
|
|
@@ -1,6 +1,5 @@
|
|
|
|
|
|
|
|
Todos: |
|
|
|
|
|
|
|
- - Don't install a file if an old file exists which is not in the package db
|
|
|
|
- Remove old files when updating a package (?) |
|
|
|
|