Skip to content

Commit 31251b2

Browse files
committed
Rename /ios/apk to /ish/apk, add /ish/version
1 parent 5a209d8 commit 31251b2

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
FROM --platform=linux/386 alpine:3.12.0 AS ish-alpine
2-
RUN touch /etc/ish-version
32

43
FROM ish-alpine
54
LABEL ish.export=appstore.tar.gz
@@ -8,5 +7,6 @@ RUN : > /etc/motd
87

98
FROM ish-alpine
109
LABEL ish.export=appstore-apk.tar.gz
10+
RUN mkdir /ish && touch /ish/version
1111
COPY apk-motd /etc/motd
1212
COPY odr-repositories /etc/apk/repositories

flatten.py

+20-3
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,48 @@
55
import tarfile
66

77
WHITEOUT = '.wh.'
8+
WHITEOUT_OPAQUE = '.wh..wh..opq'
89

910
def flatten(image, output):
1011
manifest = json.load(image.extractfile('manifest.json'))
1112
assert len(manifest) == 1
1213
manifest = manifest[0]
14+
1315
entries = {}
1416
layers = [tarfile.open(fileobj=image.extractfile(layer)) for layer in manifest['Layers']]
1517
for layer in layers:
18+
real_members = []
19+
# process whiteout files
1620
for info in layer.getmembers():
1721
info.name = './' + info.name
1822
dirname, sep, basename = info.name.rpartition('/')
19-
if basename.startswith(WHITEOUT):
23+
24+
if basename == WHITEOUT_OPAQUE:
25+
for key in entries.keys():
26+
if key.startswith(dirname+sep):
27+
del entries[key]
28+
elif basename.startswith(WHITEOUT):
2029
del entries[dirname+sep+basename[len(WHITEOUT):]]
2130
else:
22-
entries[info.name] = layer, info
31+
real_members.append(info)
32+
continue
33+
34+
# real files
35+
for info in real_members:
36+
entries[info.name] = layer, info
37+
2338
# need a root entry
2439
if './' not in entries:
2540
info = tarfile.TarInfo('./')
2641
info.type = tarfile.DIRTYPE
2742
info.mode = 0o755
2843
entries[info.name] = None, info
44+
2945
for layer, info in entries.values():
3046
fileobj = layer.extractfile(info) if info.isfile() else None
31-
info.mtime = 0
47+
info.mtime = 0 # make reproducible
3248
output.addfile(info, fileobj)
49+
3350
for layer in layers:
3451
layer.close()
3552

odr-repositories

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
file:///ios/apk/main
1+
file:///ish/apk/main

0 commit comments

Comments
 (0)