aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2010-02-24 17:31:27 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2010-02-24 18:28:28 +0000
commit22212d44132e7877680f1cb15846b5677dac5b12 (patch)
treebdf73e0c9c3f03d268eaf7e1dcc9618650077cd5
parent080defa78257ee25c663b18b59faa58f74afb6d4 (diff)
downloadalpine_aports-22212d44132e7877680f1cb15846b5677dac5b12.tar.bz2
alpine_aports-22212d44132e7877680f1cb15846b5677dac5b12.tar.xz
alpine_aports-22212d44132e7877680f1cb15846b5677dac5b12.zip
main/debootstrap: new aport
Debian/Ubuntu bootstrap scripts http://packages.qa.debian.org/d/debootstrap.html fixes #291 (cherry picked from commit aee87374fa7161660ede5d60231f562e028bd279)
-rw-r--r--main/debootstrap/APKBUILD45
-rw-r--r--main/debootstrap/pkgdetails.c209
2 files changed, 254 insertions, 0 deletions
diff --git a/main/debootstrap/APKBUILD b/main/debootstrap/APKBUILD
new file mode 100644
index 0000000000..9bd4502ce2
--- /dev/null
+++ b/main/debootstrap/APKBUILD
@@ -0,0 +1,45 @@
1# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
2pkgname=debootstrap
3pkgver=1.0.22
4pkgrel=0
5pkgdesc="Debian/Ubuntu bootstrap scripts"
6url="http://packages.qa.debian.org/d/debootstrap.html"
7license="GPL-2"
8depends="dpkg"
9source="http://ftp.de.debian.org/debian/pool/main/d/debootstrap/debootstrap_$pkgver.tar.gz
10 pkgdetails.c"
11
12_builddir="$srcdir"/$pkgname-$pkgver
13build() {
14 cd "$_builddir"
15 gcc $CFLAGS $LDFLAGS -o pkgdetails "$srcdir"/pkgdetails.c
16}
17
18package() {
19 cd "$_builddir"
20 # create devices.tar.gz
21 rm -rf dev
22 mkdir -p dev
23 chown 0:0 dev
24 chmod 755 dev
25 ( cd dev
26 ln -s /proc/self/fd fd
27 ln -s fd/0 stdin
28 ln -s fd/1 stdout
29 ln -s fd/2 stderr
30 mknod full c 1 7
31 mknod null c 1 3
32 mknod ptmx c 5 2
33 mkdir pts shm
34 mknod random c 1 8
35 mknod tty c 5 0
36 mknod urandom c 1 9
37 mknod zero c 1 5
38 )
39 tar -czf devices.tar.gz dev
40 rm -rf dev
41 make DESTDIR="$pkgdir" install || return
42 install -Dm755 pkgdetails "$pkgdir"/usr/lib/debootstrap/pkgdetails
43}
44md5sums="d3fbb612b381841a616a804c946a344a debootstrap_1.0.22.tar.gz
45cff11c88c5176c0ccb714e2d378f4d35 pkgdetails.c"
diff --git a/main/debootstrap/pkgdetails.c b/main/debootstrap/pkgdetails.c
new file mode 100644
index 0000000000..8403afb4c8
--- /dev/null
+++ b/main/debootstrap/pkgdetails.c
@@ -0,0 +1,209 @@
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4#include <ctype.h>
5
6#define MAX_LINE 1000
7#define MAX_PKGS 100
8
9static char *fieldcpy(char *dst, char *fld) {
10 while (*fld && *fld != ':')
11 fld++;
12 if (!*(fld++))
13 return NULL;
14 while (isspace(*fld)) fld++;
15 return strcpy(dst, fld);
16}
17
18static void dogetdeps(char *pkgsfile, char **in_pkgs, int pkgc) {
19 char buf[MAX_LINE];
20 char cur_pkg[MAX_LINE];
21 char cur_deps[MAX_LINE];
22 char *pkgs[MAX_PKGS];
23 int i;
24 int skip;
25 FILE *f;
26
27 cur_pkg[0] = cur_deps[0] = '\0';
28
29 for (i = 0; i < pkgc; i++) pkgs[i] = in_pkgs[i];
30
31 f = fopen(pkgsfile, "r");
32 if (f == NULL) {
33 perror(pkgsfile);
34 exit(1);
35 }
36
37 skip = 1;
38 while (fgets(buf, sizeof(buf), f)) {
39 if (*buf && buf[strlen(buf)-1] == '\n') buf[strlen(buf)-1] = '\0';
40 if (strncasecmp(buf, "Package:", 8) == 0) {
41 skip = 1;
42 fieldcpy(cur_pkg, buf);
43 int any = 0;
44 for (i = 0; i < pkgc; i++) {
45 if (!pkgs[i]) continue;
46 any = 1;
47 if (strcmp(cur_pkg, pkgs[i]) == 0) {
48 skip = 0;
49 pkgs[i] = NULL;
50 break;
51 }
52 }
53 if (!any) break;
54 } else if (!skip &&
55 (strncasecmp(buf, "Depends:", 8) == 0 ||
56 strncasecmp(buf, "Pre-Depends:", 12) == 0))
57 {
58 char *pch;
59 fieldcpy(cur_deps, buf);
60 pch = cur_deps;
61 while (1) {
62 while (isspace(*pch)) pch++;
63 if (!*pch) break;
64
65 while (*pch && *pch != '(' && *pch != '|' && *pch != ','
66 && !isspace(*pch))
67 {
68 fputc(*pch++, stdout);
69 }
70 fputc('\n', stdout);
71 while (*pch && *pch++ != ',') (void)NULL;
72 }
73 }
74 }
75 fclose(f);
76}
77
78static void dopkgmirrorpkgs(int uniq, char *mirror, char *pkgsfile,
79 char *fieldname, char **in_pkgs, int pkgc)
80{
81 char buf[MAX_LINE];
82 char cur_field[MAX_LINE];
83 char cur_pkg[MAX_LINE];
84 char cur_ver[MAX_LINE];
85 char cur_arch[MAX_LINE];
86 char cur_size[MAX_LINE];
87 char cur_md5[MAX_LINE];
88 char cur_filename[MAX_LINE];
89 char *pkgs[MAX_PKGS];
90 int i;
91 FILE *f;
92
93 cur_pkg[0] = cur_ver[0] = cur_arch[0] = cur_filename[0] = '\0';
94
95 for (i = 0; i < pkgc; i++) pkgs[i] = in_pkgs[i];
96
97 f = fopen(pkgsfile, "r");
98 if (f == NULL) {
99 perror(pkgsfile);
100 exit(1);
101 }
102 while (fgets(buf, sizeof(buf), f)) {
103 if (*buf && buf[strlen(buf)-1] == '\n') buf[strlen(buf)-1] = '\0';
104 if (strncasecmp(buf, fieldname, strlen(fieldname)) == 0) {
105 fieldcpy(cur_field, buf);
106 }
107 if (strncasecmp(buf, "Package:", 8) == 0) {
108 fieldcpy(cur_pkg, buf);
109 } else if (strncasecmp(buf, "Version:", 8) == 0) {
110 fieldcpy(cur_ver, buf);
111 } else if (strncasecmp(buf, "Architecture:", 13) == 0) {
112 fieldcpy(cur_arch, buf);
113 } else if (strncasecmp(buf, "Size:", 5) == 0) {
114 fieldcpy(cur_size, buf);
115 } else if (strncasecmp(buf, "MD5sum:", 7) == 0) {
116 fieldcpy(cur_md5, buf);
117 } else if (strncasecmp(buf, "Filename:", 9) == 0) {
118 fieldcpy(cur_filename, buf);
119 } else if (!*buf) {
120 int any = 0;
121 for (i = 0; i < pkgc; i++) {
122 if (!pkgs[i]) continue;
123 any = 1;
124 if (strcmp(cur_field, pkgs[i]) == 0) {
125 printf("%s %s %s %s %s %s %s\n", cur_pkg, cur_ver, cur_arch, mirror, cur_filename, cur_md5, cur_size);
126 if (uniq) pkgs[i] = NULL;
127 break;
128 }
129 }
130 if (!any) break;
131 }
132 }
133 fclose(f);
134
135 /* any that weren't found are returned as "pkg -" */
136 if (uniq) {
137 for (i = 0; i < pkgc; i++) {
138 if (pkgs[i]) {
139 printf("%s -\n", pkgs[i]);
140 }
141 }
142 }
143}
144
145static int dotranslatewgetpercent(int low, int high, int end, char *str) {
146 int ch;
147 int val, lastval;
148
149 /* print out anything that looks like a % on its own line, appropriately
150 * scaled */
151
152 lastval = val = 0;
153 while ( (ch = getchar()) != EOF ) {
154 if (isdigit(ch)) {
155 val *= 10; val += ch - '0';
156 } else if (ch == '%') {
157 float f = (float) val / 100.0 * (high - low) + low;
158 if (str) {
159 printf("P: %d %d %s\n", (int) f, end, str);
160 } else {
161 printf("P: %d %d\n", (int) f, end);
162 }
163 lastval = val;
164 } else {
165 val = 0;
166 }
167 }
168 return lastval == 100;
169}
170
171int main(int argc, char *argv[]) {
172 if ((argc == 6 || argc == 5) && strcmp(argv[1], "WGET%") == 0) {
173 if (dotranslatewgetpercent(atoi(argv[2]), atoi(argv[3]),
174 atoi(argv[4]), argc == 6 ? argv[5] : NULL))
175 {
176 exit(0);
177 } else {
178 exit(1);
179 }
180 } else if (argc >= 4 && strcmp(argv[1], "GETDEPS") == 0) {
181 int i;
182 for (i = 3; argc - i > MAX_PKGS; i += MAX_PKGS) {
183 dogetdeps(argv[2], argv+i, MAX_PKGS);
184 }
185 dogetdeps(argv[2], argv+i, argc-i);
186 exit(0);
187 } else if (argc >= 5 && strcmp(argv[1], "PKGS") == 0) {
188 int i;
189 for (i = 4; argc - i > MAX_PKGS; i += MAX_PKGS) {
190 dopkgmirrorpkgs(1, argv[2], argv[3], "Package:", argv+i, MAX_PKGS);
191 }
192 dopkgmirrorpkgs(1, argv[2], argv[3], "Package:", argv+i, argc-i);
193 exit(0);
194 } else if (argc >= 6 && strcmp(argv[1], "FIELD") == 0) {
195 int i;
196 for (i = 5; argc - i > MAX_PKGS; i += MAX_PKGS) {
197 dopkgmirrorpkgs(0, argv[3], argv[4], argv[2], argv+i, MAX_PKGS);
198 }
199 dopkgmirrorpkgs(0, argv[3], argv[4], argv[2], argv+i, argc-i);
200 exit(0);
201 } else {
202 fprintf(stderr, "usage: %s PKGS mirror packagesfile pkgs..\n", argv[0]);
203 fprintf(stderr, " or: %s FIELD field mirror packagesfile pkgs..\n",
204 argv[0]);
205 fprintf(stderr, " or: %s GETDEPS packagesfile pkgs..\n", argv[0]);
206 fprintf(stderr, " or: %s WGET%% low high end reason\n", argv[0]);
207 exit(1);
208 }
209}