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.

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