mirror of the now-defunct rocklinux.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

329 lines
10 KiB

  1. diff -dur /usr/src/mine-0.21/install.c ./install.c
  2. --- /usr/src/mine-0.21/install.c 2005-03-23 09:51:06.000000000 +0100
  3. +++ ./install.c 2005-05-03 13:14:05.000000000 +0200
  4. @@ -137,6 +137,20 @@
  5. O_RDONLY, 0, 0) == -1) goto error_errno;
  6. if ( mode_test && mode_verbose ) printf("-- %s --\n", pname);
  7. + FILE *logfile = NULL;
  8. + if ( ! mode_test )
  9. + {
  10. + char postinst[1024];
  11. + snprintf(postinst, 1024, "%s/var/adm/postinstall/%s-install.XXXXXX", root, pname);
  12. + if ( mkstemp(postinst) != -1 )
  13. + logfile = fopen(postinst, "w");
  14. + if ( mode_verbose )
  15. + if ( logfile == NULL )
  16. + printf("Not writing postinstall log\n");
  17. + else
  18. + printf("Writing postinstall log to %s\n", postinst);
  19. + }
  20. +
  21. filename = 0;
  22. while (th_read(t) == 0)
  23. {
  24. @@ -187,17 +201,20 @@
  25. }
  26. else
  27. {
  28. - if (mode_verbose)
  29. + if ( mode_verbose )
  30. printf("%s: %s\n", pname, filename);
  31. rename(buffer, buffer3);
  32. if (tar_extract_file(t, buffer) != 0)
  33. goto error_errno;
  34. unlink(buffer3);
  35. + if ( logfile != NULL )
  36. + fprintf(logfile, "%s: %s\n", pname, filename);
  37. }
  38. }
  39. tar_close(t); close(bunzip2tar[0]);
  40. cdb_free(&c); close(gem_fd);
  41. + if ( logfile != NULL ) fclose(logfile);
  42. return 0;
  43. diff -dur /usr/src/mine-0.21/Makefile ./Makefile
  44. --- /usr/src/mine-0.21/Makefile 2005-03-23 09:51:06.000000000 +0100
  45. +++ ./Makefile 2005-05-03 16:41:09.000000000 +0200
  46. @@ -20,7 +20,7 @@
  47. # Mine Itself
  48. #
  49. -MINE_VER = 0.21
  50. +MINE_VER = 0.22
  51. MINE_OBJ = check.o create.o install.o remove.o pkglist.o mkpdb.o
  52. MINE_OBJ += showfile.o showkey.o memdb.o md5.o md5sum.o mine.o
  53. diff -dur /usr/src/mine-0.21/md5sum.c ./md5sum.c
  54. --- /usr/src/mine-0.21/md5sum.c 2005-03-23 09:51:06.000000000 +0100
  55. +++ ./md5sum.c 2005-05-03 16:52:52.000000000 +0200
  56. @@ -41,21 +41,31 @@
  57. ? "" : md5_file(realfilename);
  58. }
  59. +/* Returns 1 if file is duplicate, 2 if file is modified. */
  60. int md5sum_check(char * root, char * filename)
  61. {
  62. char *md5_f, *md5_d;
  63. md5_f = md5sum_create(root, filename);
  64. md5_d = memdb_get(&md5_memdb, filename);
  65. -
  66. - return md5_f != NULL && md5_d != NULL && strcmp(md5_f, md5_d);
  67. +
  68. + if (md5_f == NULL || strcmp(md5_f, "") == 0)
  69. + return 0;
  70. + else if (md5_d == NULL)
  71. + return 1;
  72. + else if (strcmp(md5_f, md5_d) == 0)
  73. + return 0;
  74. + else
  75. + return 2;
  76. }
  77. void md5sum_initdb(char * root, int verbose)
  78. {
  79. struct dirent *md5_dent;
  80. - char buffer[1024];
  81. + char buffer[1024], buffer2[1024];
  82. char *md5sum, *filename;
  83. + const char const *admdirs[6] =
  84. + {"cksums", "dependencies", "descs", "flists", "md5sums", "packages"};
  85. FILE *f;
  86. DIR *d;
  87. @@ -71,6 +81,16 @@
  88. root, md5_dent->d_name);
  89. f = fopen(buffer, "r");
  90. if ( f != NULL ) {
  91. + /* Add the /var/adm files of each package to the
  92. + md5sum memdb so md5sum_check() recognizes them. */
  93. + int n;
  94. + for (n = 0; n < 6; n++) {
  95. + snprintf(buffer2, 1024, "var/adm/%s/%s",
  96. + admdirs[n], md5_dent->d_name);
  97. + memdb_put(&md5_memdb, buffer2,
  98. + md5sum_create(root, buffer2));
  99. + }
  100. +
  101. while (fgets(buffer, 1024, f) != NULL) {
  102. md5sum = strtok(buffer, " \t\n");
  103. filename = strtok(NULL, "\n");
  104. diff -dur /usr/src/mine-0.21/mine.c ./mine.c
  105. --- /usr/src/mine-0.21/mine.c 2005-03-23 09:51:06.000000000 +0100
  106. +++ ./mine.c 2005-05-03 17:40:51.000000000 +0200
  107. @@ -87,13 +87,13 @@
  108. "\n"
  109. "Install (-i), remove (-r) and check (-y) GEM packages:\n"
  110. "\n"
  111. -" mine -i [ -t ] [ -v ] [ -f ] [-x glob ] [ -R root ] package1.gem [ .. ]\n"
  112. -" mine -r [ -t ] [ -v ] [ -f ] [ -s ] [ -R root ] package1 [ package2 [ .. ] ]\n"
  113. +" mine -i [ -R root ] [ -t ] [ -v ] [ -f ] [-x glob ] package1.gem [ .. ]\n"
  114. +" mine -r [ -R root ] [ -t ] [ -v ] [ -f ] [ -s ] package1 [ package2 [ .. ] ]\n"
  115. " mine -y [ -R root ] package1 [ package2 [ .. ] ]\n"
  116. "\n"
  117. "Query installed packages or GEM package files:\n"
  118. "\n"
  119. -" mine {query-mode} [ -h | -H ] [ package1 [ package2.gem [ .. ] ] ]\n"
  120. +" mine {query-mode} [ -R root ] [ -h | -H ] [ package1 [ package2.gem [ .. ] ] ]\n"
  121. "\n"
  122. " Where {query-mode} might be one of:\n"
  123. "\n"
  124. @@ -114,13 +114,19 @@
  125. " -x next parameter is a pattern for files to skip\n"
  126. " -R next parameter is the root directory\n"
  127. "\n"
  128. -"Create GEM package files from installed packages:\n"
  129. +"Create GEM (-C) and .tar.bz2 (-T) package files from installed packages:\n"
  130. "\n"
  131. " mine -C var-adm-dir package-tar-bz2 package-name gem-file\n"
  132. " mine -T var-adm-dir root-dir package-name package-tar-bz2\n"
  133. "\n"
  134. +"E.g. this will create a GEM file from the mine package installed in /:\n"
  135. +"\n"
  136. +" mine -T /var/adm / mine mine.tar.bz2\n"
  137. +" mine -C /var/adm mine.tar.bz2 mine.gem\n"
  138. +"\n"
  139. "Hint: After installing, updating or removing packages you should run the\n"
  140. -" script 'cron.run'. This updates some important system files.\n"
  141. +" scripts 'cron.run' and 'postinstall'. This updates some important\n"
  142. +" system files.\n"
  143. "\n"
  144. );
  145. exit(1);
  146. @@ -316,9 +322,7 @@
  147. break;
  148. case 'R':
  149. - if ( mine_root_dir == NULL &&
  150. - (mine_mode == MINE_MODE_INSTALL ||
  151. - mine_mode == MINE_MODE_REMOVE) )
  152. + if ( mine_root_dir == NULL )
  153. {
  154. mine_root_dir = optarg;
  155. } else
  156. @@ -340,6 +344,11 @@
  157. if ( mine_mode == MINE_MODE_NONE ) help();
  158. if ( mine_root_dir == NULL ) mine_root_dir = "";
  159. + else if ( !(mine_mode == MINE_MODE_INSTALL ||
  160. + mine_mode == MINE_MODE_REMOVE ||
  161. + mine_mode == MINE_MODE_CHECK ||
  162. + mine_mode == MINE_MODE_PKGLIST ||
  163. + mine_mode == MINE_MODE_SHOWFILE) ) help();
  164. if (optind < argc)
  165. {
  166. @@ -362,11 +371,11 @@
  167. break;
  168. case MINE_MODE_PKGLIST:
  169. - rc = gem_pkglist(argv[optind]);
  170. + rc = gem_pkglist(mine_root_dir, argv[optind]);
  171. break;
  172. case MINE_MODE_SHOWFILE:
  173. - rc = gem_showfile( mine_file_key_name,
  174. + rc = gem_showfile( mine_root_dir, mine_file_key_name,
  175. mine_mode_header_block,
  176. argv[optind]);
  177. break;
  178. @@ -398,20 +407,24 @@
  179. mine_mode == MINE_MODE_REMOVE ||
  180. mine_mode == MINE_MODE_SHOWKEY ) help();
  181. - n = scandir("/var/adm/packages", &namelist, 0, alphasort);
  182. + char buffer[1024];
  183. + snprintf(buffer, 1024, "%s/var/adm/packages", mine_root_dir);
  184. + n = scandir(buffer, &namelist, 0, alphasort);
  185. if (n < 0) {
  186. - perror("Can't read /var/adm/packages");
  187. + char buffer2[1024];
  188. + snprintf(buffer2, 1024, "Can't read %s", buffer);
  189. + perror(buffer2);
  190. exit(1);
  191. }
  192. while(n--) {
  193. rc = 0;
  194. switch (mine_mode) {
  195. case MINE_MODE_PKGLIST:
  196. - rc = gem_pkglist(namelist[n]->d_name);
  197. + rc = gem_pkglist(mine_root_dir, namelist[n]->d_name);
  198. break;
  199. case MINE_MODE_SHOWFILE:
  200. - rc = gem_showfile( mine_file_key_name,
  201. + rc = gem_showfile(mine_root_dir, mine_file_key_name,
  202. mine_mode_header_block,
  203. namelist[n]->d_name);
  204. break;
  205. diff -dur /usr/src/mine-0.21/mine.h ./mine.h
  206. --- /usr/src/mine-0.21/mine.h 2005-03-23 09:51:06.000000000 +0100
  207. +++ ./mine.h 2005-05-03 13:05:51.000000000 +0200
  208. @@ -37,9 +37,9 @@
  209. extern int gem_remove(char * root, int mode_test, int mode_verbose,
  210. int mode_force, int mode_sub, char * package);
  211. -extern int gem_pkglist(char * package);
  212. +extern int gem_pkglist(char * root, char * package);
  213. -extern int gem_showfile(char * name, int mode_header_block, char * package);
  214. +extern int gem_showfile(char * root, char * name, int mode_header_block, char * package);
  215. extern int gem_showkey(char * name, int mode_header_line,
  216. int mode_header_block, char * package);
  217. diff -dur /usr/src/mine-0.21/pkglist.c ./pkglist.c
  218. --- /usr/src/mine-0.21/pkglist.c 2005-03-23 09:51:06.000000000 +0100
  219. +++ ./pkglist.c 2005-05-03 13:05:51.000000000 +0200
  220. @@ -77,12 +77,12 @@
  221. return 1;
  222. }
  223. -int gem_pkglist(char * package)
  224. +int gem_pkglist(char * root, char * package)
  225. {
  226. char buffer[1024];
  227. FILE *f;
  228. - snprintf(buffer, 1024, "/var/adm/packages/%s", package);
  229. + snprintf(buffer, 1024, "%s/var/adm/packages/%s", root, package);
  230. if ( (f = fopen(buffer, "r")) == NULL )
  231. return gem_pkglist_gemfile(package);
  232. diff -dur /usr/src/mine-0.21/remove.c ./remove.c
  233. --- /usr/src/mine-0.21/remove.c 2005-03-23 09:51:06.000000000 +0100
  234. +++ ./remove.c 2005-05-03 16:50:40.000000000 +0200
  235. @@ -32,7 +32,7 @@
  236. /* we need to reverse the package file list so we first remove
  237. * the content of a directory and after that the directory itself.
  238. - * so we temporary store the data in a liked list.
  239. + * so we temporarily store the data in a linked list.
  240. */
  241. struct flist;
  242. struct flist {
  243. @@ -98,6 +98,21 @@
  244. }
  245. fclose(f);
  246. + FILE *logfile = NULL;
  247. + if ( ! mode_test )
  248. + {
  249. + char postinst[1024];
  250. + snprintf(postinst, 1024, "%s/var/adm/postinstall/%s-remove.XXXXXX",
  251. + root, package);
  252. + if ( mkstemp(postinst) != -1 )
  253. + logfile = fopen(postinst, "w");
  254. + if ( mode_verbose )
  255. + if ( logfile == NULL )
  256. + printf("Not writing postremove log\n");
  257. + else
  258. + printf("Writing postremove log to %s\n", postinst);
  259. + }
  260. +
  261. while ( flist )
  262. {
  263. filename = flist->filename;
  264. @@ -158,9 +173,12 @@
  265. errors++;
  266. }
  267. }
  268. + if ( logfile != NULL )
  269. + fprintf(logfile, "%s: %s\n", package, filename);
  270. }
  271. free(filename);
  272. + if ( logfile != NULL ) fclose(logfile);
  273. }
  274. if ( errors )
  275. diff -dur /usr/src/mine-0.21/showfile.c ./showfile.c
  276. --- /usr/src/mine-0.21/showfile.c 2005-03-23 09:51:06.000000000 +0100
  277. +++ ./showfile.c 2005-05-03 13:05:51.000000000 +0200
  278. @@ -20,12 +20,12 @@
  279. #include <stdio.h>
  280. #include "mine.h"
  281. -int gem_showfile(char * name, int mode_header_block, char * package)
  282. +int gem_showfile(char * root, char * name, int mode_header_block, char * package)
  283. {
  284. char buffer[1024];
  285. FILE *f;
  286. - snprintf(buffer, 1024, "/var/adm/%s/%s", name, package);
  287. + snprintf(buffer, 1024, "%s/var/adm/%s/%s", root, name, package);
  288. if ( (f = fopen(buffer, "r")) == NULL ) {
  289. return gem_showkey(name, 0, mode_header_block, package);
  290. }
  291. diff -dur /usr/src/mine-0.21/TODO ./TODO
  292. --- /usr/src/mine-0.21/TODO 2003-08-28 13:49:26.000000000 +0200
  293. +++ ./TODO 2005-05-03 17:07:29.000000000 +0200
  294. @@ -1,6 +1,5 @@
  295. Todos:
  296. - - Don't install a file if an old file exists which is not in the package db
  297. - Remove old files when updating a package (?)