diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2010-02-24 17:31:27 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2010-02-24 18:28:28 +0000 |
commit | 22212d44132e7877680f1cb15846b5677dac5b12 (patch) | |
tree | bdf73e0c9c3f03d268eaf7e1dcc9618650077cd5 | |
parent | 080defa78257ee25c663b18b59faa58f74afb6d4 (diff) | |
download | alpine_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/APKBUILD | 45 | ||||
-rw-r--r-- | main/debootstrap/pkgdetails.c | 209 |
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> | ||
2 | pkgname=debootstrap | ||
3 | pkgver=1.0.22 | ||
4 | pkgrel=0 | ||
5 | pkgdesc="Debian/Ubuntu bootstrap scripts" | ||
6 | url="http://packages.qa.debian.org/d/debootstrap.html" | ||
7 | license="GPL-2" | ||
8 | depends="dpkg" | ||
9 | source="http://ftp.de.debian.org/debian/pool/main/d/debootstrap/debootstrap_$pkgver.tar.gz | ||
10 | pkgdetails.c" | ||
11 | |||
12 | _builddir="$srcdir"/$pkgname-$pkgver | ||
13 | build() { | ||
14 | cd "$_builddir" | ||
15 | gcc $CFLAGS $LDFLAGS -o pkgdetails "$srcdir"/pkgdetails.c | ||
16 | } | ||
17 | |||
18 | package() { | ||
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 | } | ||
44 | md5sums="d3fbb612b381841a616a804c946a344a debootstrap_1.0.22.tar.gz | ||
45 | cff11c88c5176c0ccb714e2d378f4d35 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 | |||
9 | static 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 | |||
18 | static 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 | |||
78 | static 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 | |||
145 | static 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 | |||
171 | int 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 | } | ||