Skip to content
This repository was archived by the owner on Aug 14, 2020. It is now read-only.

Commit 1a3fed9

Browse files
committed
Merge pull request #7 from justinsb/packages2aci
packages2aci for Java7 image
2 parents d02c501 + 01e4ba2 commit 1a3fed9

File tree

7 files changed

+152
-0
lines changed

7 files changed

+152
-0
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,11 @@ Flannel has [dist/build-aci.sh](https://github.com/coreos/flannel/blob/master/di
4646
```
4747
$ cd dist && ./build-aci.sh TAG
4848
```
49+
50+
### Java7 base image
51+
52+
A base image containing OpenJDK 7 can be build using (packages2aci)[packages2aci.md].
53+
54+
```
55+
bin/packages2aci java7/
56+
```

bin/packages2aci

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
SRCDIR=$1
6+
7+
if [[ -z "${SRCDIR}" ]]; then
8+
echo "Syntax: packages2aci <directory>"
9+
exit 1
10+
fi
11+
12+
if [[ ! -d "${SRCDIR}" ]]; then
13+
echo "$1 is not a directory"
14+
exit 1
15+
fi
16+
17+
which actool || (echo "Make sure actool is on your path"; exit 1)
18+
19+
pushd ${SRCDIR}
20+
SRCDIR=`pwd`
21+
popd
22+
23+
OUTPUT=${SRCDIR}/image.aci
24+
BUILD=${SRCDIR}/.build/
25+
26+
# apt-get reuses cached packages
27+
mkdir -p ${BUILD}/packages/
28+
29+
# start from an empty build directory every time
30+
rm -rf ${BUILD}/layout
31+
mkdir -p ${BUILD}/layout/rootfs/
32+
33+
# download packages specified in packages
34+
for p in `cat ${SRCDIR}/packages`; do
35+
echo "Downloading $p"
36+
pushd ${BUILD}/packages/
37+
apt-get download $p
38+
popd
39+
done
40+
41+
# extract the packages into the rootfs dir
42+
for d in ${BUILD}/packages/*.deb; do
43+
echo "Extracting $d"
44+
dpkg-deb -x ${d} ${BUILD}/layout/rootfs/
45+
done
46+
47+
# copy the ACI manifest file
48+
cp ${SRCDIR}/manifest ${BUILD}/layout/
49+
50+
# call user postbuild script
51+
if [[ -x ${SRCDIR}/postbuild ]]; then
52+
pushd ${BUILD}/layout/rootfs
53+
${SRCDIR}/postbuild ${BUILD}/layout/rootfs
54+
popd
55+
fi
56+
57+
# build the ACI
58+
actool build --overwrite ${BUILD}/layout/ ${OUTPUT}
59+
60+
# great success
61+
echo "Your image is now available at ${OUTPUT}"
62+
echo "Test with: sudo rkt --insecure-skip-verify=true run ${OUTPUT}"
63+

java7/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.build/
2+
image.aci
3+

java7/manifest

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"acVersion": "0.5.1",
3+
"acKind": "ImageManifest",
4+
"name": "java",
5+
"app": {
6+
"exec": [ "/java", "-version" ],
7+
"user": "0",
8+
"group": "0"
9+
}
10+
}

java7/packages

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
ca-certificates-java
2+
java-common
3+
libasound2
4+
libatk1.0-0
5+
libatk-wrapper-java-jni
6+
libc6
7+
libcairo2
8+
libcups2
9+
libfontconfig1
10+
libfreetype6
11+
libgcc1
12+
libgdk-pixbuf2.0-0
13+
libgif4
14+
libglib2.0-0
15+
libgtk2.0-0
16+
libjpeg62-turbo
17+
libkrb5-3
18+
liblcms2-2
19+
libnss3
20+
libpango-1.0-0
21+
libpangocairo-1.0-0
22+
libpangoft2-1.0-0
23+
libpcsclite1
24+
libpng12-0
25+
libpulse0
26+
libstdc++6
27+
libx11-6
28+
libxext6
29+
libxi6
30+
libxinerama1
31+
libxrandr2
32+
libxrender1
33+
libxtst6
34+
openjdk-7-jre
35+
openjdk-7-jre-headless
36+
tzdata-java
37+
zlib1g

java7/postbuild

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/bin/bash -e
2+
3+
ROOTFS=${1}
4+
cd ${ROOTFS}
5+
6+
# symlink java
7+
ln -s usr/lib/jvm/java-7-openjdk-amd64/bin/java java

packages2aci.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Create ACI images from Debian packages
2+
3+
This is a simple tool to create an ACI image using your operating system packages.
4+
5+
It includes an example to build a Java7 base image in [java7](java7).
6+
7+
### Steps to create your ACI image:
8+
9+
1. Create a directory to hold your work (e.g. [java7](java7))
10+
1. Create the [packages](java7/packages) file with a list of packages to be installed, one per line.
11+
1. Create a [manifest](java7/manifest) file which will be your ACI manifest.
12+
1. (Optional) Create a [postbuild](java7/postbuild) script to do any post-processing after the packages are installed. Here, we set up a convenience symlink.
13+
1. Run `./packages2aci <dirname>` to build your ACI image (e.g. `./packages2aci java7`)
14+
15+
Your ACI image is then in `<dirname>/image.aci`. Run it using:
16+
17+
```
18+
sudo rkt --insecure-skip-verify=true run java7/image.aci
19+
```
20+
21+
### Limitations:
22+
23+
* You have to specify each package individually; it doesn't do recursive dependency analysis.
24+
* This works using your currently installed operating system, so is OS dependent. (This could easily be fixed by doing this inside a rkt image!)

0 commit comments

Comments
 (0)