First go at minideb.

This commit is contained in:
James Westby
2016-09-02 14:48:09 +01:00
commit 2916ff94f4
13 changed files with 1484 additions and 0 deletions
+2
View File
@@ -0,0 +1,2 @@
build
namibase/nami-linux-x64.tar.gz
+54
View File
@@ -0,0 +1,54 @@
minideb
=======
A small container image with apt available.
We want to have the smallest container image possible with
apt available. Small images are great, but the power of
apt is hard to live without.
These images are Debian-based, but they are not Debian, as
they remove some `Essential` packages that are not needed in
most containers (e.g. init). This does mean that while apt
is available, with the whole Debian archive, some packages
will not work correctly without also installing a missing
`Essential` package.
These images also include an `install_packages` command
that you can use instead of apt. This does two things:
1. Install the named packages, skipping prompts etc.
2. Clean up the apt metadata afterwards to keep the image small.
Building
--------
- Install debootstrap and debian-archive-keyring.
- sudo ./buildall
To build an individual image:
- sudo ./mkimage jessie.tar jessie
To test the resulting image:
- docker import -t minideb:jessie jessie.tar
- ./test minideb:jessie
Nami
----
Nami from Bitnami allows you to install Bitnami-maintained packages.
The `namibase` directory contains `Dockerfile`s for building images
containing `nami` based on the minideb images. They will also be build
by the `buildall` script. You will first have to download the
`nami-linux-x64.tar.gz` tarball in to the `namibase` directory, but
unfortunately there is no public source for those tarballs currently.
TODO
----
- Look at whether the process produces the same bits given the same inputs
- Can we use a custom debootstrap script to avoid removing packages?
- `install_packages` to also run the docs/locales/etc. cleanups
Executable
+37
View File
@@ -0,0 +1,37 @@
#!/bin/bash
set -e
set -u
DISTS="jessie
unstable
"
LATEST=jessie
BASENAME=jamesw/minideb
NAMINAME=jamesw/mininami
mkdir -p build
for DIST in $DISTS; do
[ -f namibase/Dockerfile-$DIST ] || (echo "Unknown distribution: $DIST" && exit 1)
echo "============================================"
echo "Building $BASENAME:$DIST"
echo "============================================"
./mkimage build/$DIST.tar $DIST
docker import --change "CMD /bin/bash" build/$DIST.tar $BASENAME:$DIST
echo "============================================"
echo "Running tests for $BASENAME:$DIST"
echo "============================================"
./test $BASENAME:$DIST
echo "============================================"
echo "Building $NAMINAME:$DIST"
echo "============================================"
docker build -t $NAMINAME:$DIST -f namibase/Dockerfile-$DIST namibase
echo "============================================"
echo "Running tests for $NAMINAME:$DIST"
echo "============================================"
./namibase/test $NAMINAME:$DIST
done
docker tag $BASENAME:$LATEST $BASENAME:latest
docker tag $NAMINAME:$LATEST $NAMINAME:latest
Executable
+205
View File
@@ -0,0 +1,205 @@
#!/bin/bash
set -e
set -u
TARGET=${1:?Specify the target filename}
DIST=${2:-stable}
export DEBIAN_FRONTEND=noninteractive
DIRS_TO_TRIM="/usr/share/man
/usr/share/doc
/var/cache/apt
/var/lib/apt/lists
/usr/share/locale
/var/log
/usr/share/info
"
PACKAGES_TO_EXCLUDE="acl
bsdutils
debconf-i18n
dmsetup
e2fslibs
e2fsprogs
gcc-4.8-base
init
initscripts
insserv
libcap2
libcap2-bin
libcryptsetup4
libdevmapper1.02.1
libkmod2
liblocale-gettext-perl
libmount1
libncursesw5
libprocps3
libsystemd0
libtext-charwidth-perl
libtext-iconv-perl
libtext-wrapi18n-perl
libudev1
mount
ncurses-bin
ncurses-base
procps
startpar
systemd
systemd-sysv
sysv-rc
sysvinit-utils
udev
util-linux
"
rootfsDir=$(mktemp -d)
echo "Building base"
debootstrap --force-check-gpg --variant minbase --foreign $DIST "$rootfsDir"
chroot "$rootfsDir" debootstrap/debootstrap --second-stage
echo "Applying docker-specific tweaks"
# These are copied from the docker contrib/mkimage/debootstrap script.
# get path to "chroot" in our current PATH
chrootPath="$(type -P chroot)"
rootfs_chroot() {
# "chroot" doesn't set PATH, so we need to set it explicitly to something our new debootstrap chroot can use appropriately!
# set PATH and chroot away!
PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' \
"$chrootPath" "$rootfsDir" "$@"
}
# prevent init scripts from running during install/update
echo >&2 "+ echo exit 101 > '$rootfsDir/usr/sbin/policy-rc.d'"
cat > "$rootfsDir/usr/sbin/policy-rc.d" <<-'EOF'
#!/bin/sh
# For most Docker users, "apt-get install" only happens during "docker build",
# where starting services doesn't work and often fails in humorous ways. This
# prevents those failures by stopping the services from attempting to start.
exit 101
EOF
chmod +x "$rootfsDir/usr/sbin/policy-rc.d"
# prevent upstart scripts from running during install/update
(
set -x
rootfs_chroot dpkg-divert --local --rename --add /sbin/initctl
cp -a "$rootfsDir/usr/sbin/policy-rc.d" "$rootfsDir/sbin/initctl"
sed -i 's/^exit.*/exit 0/' "$rootfsDir/sbin/initctl"
)
# shrink a little, since apt makes us cache-fat (wheezy: ~157.5MB vs ~120MB)
( set -x; rootfs_chroot apt-get clean )
# this file is one APT creates to make sure we don't "autoremove" our currently
# in-use kernel, which doesn't really apply to debootstraps/Docker images that
# don't even have kernels installed
rm -f "$rootfsDir/etc/apt/apt.conf.d/01autoremove-kernels"
# Ubuntu 10.04 sucks... :)
if strings "$rootfsDir/usr/bin/dpkg" | grep -q unsafe-io; then
# force dpkg not to call sync() after package extraction (speeding up installs)
echo >&2 "+ echo force-unsafe-io > '$rootfsDir/etc/dpkg/dpkg.cfg.d/docker-apt-speedup'"
cat > "$rootfsDir/etc/dpkg/dpkg.cfg.d/docker-apt-speedup" <<-'EOF'
# For most Docker users, package installs happen during "docker build", which
# doesn't survive power loss and gets restarted clean afterwards anyhow, so
# this minor tweak gives us a nice speedup (much nicer on spinning disks,
# obviously).
force-unsafe-io
EOF
fi
if [ -d "$rootfsDir/etc/apt/apt.conf.d" ]; then
# _keep_ us lean by effectively running "apt-get clean" after every install
aptGetClean='"rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true";'
echo >&2 "+ cat > '$rootfsDir/etc/apt/apt.conf.d/docker-clean'"
cat > "$rootfsDir/etc/apt/apt.conf.d/docker-clean" <<-EOF
# Since for most Docker users, package installs happen in "docker build" steps,
# they essentially become individual layers due to the way Docker handles
# layering, especially using CoW filesystems. What this means for us is that
# the caches that APT keeps end up just wasting space in those layers, making
# our layers unnecessarily large (especially since we'll normally never use
# these caches again and will instead just "docker build" again and make a brand
# new image).
# Ideally, these would just be invoking "apt-get clean", but in our testing,
# that ended up being cyclic and we got stuck on APT's lock, so we get this fun
# creation that's essentially just "apt-get clean".
DPkg::Post-Invoke { ${aptGetClean} };
APT::Update::Post-Invoke { ${aptGetClean} };
Dir::Cache::pkgcache "";
Dir::Cache::srcpkgcache "";
# Note that we do realize this isn't the ideal way to do this, and are always
# open to better suggestions (https://github.com/docker/docker/issues).
EOF
# remove apt-cache translations for fast "apt-get update"
echo >&2 "+ echo Acquire::Languages 'none' > '$rootfsDir/etc/apt/apt.conf.d/docker-no-languages'"
cat > "$rootfsDir/etc/apt/apt.conf.d/docker-no-languages" <<-'EOF'
# In Docker, we don't often need the "Translations" files, so we're just wasting
# time and space by downloading them, and this inhibits that. For users that do
# need them, it's a simple matter to delete this file and "apt-get update". :)
Acquire::Languages "none";
EOF
echo >&2 "+ echo Acquire::GzipIndexes 'true' > '$rootfsDir/etc/apt/apt.conf.d/docker-gzip-indexes'"
cat > "$rootfsDir/etc/apt/apt.conf.d/docker-gzip-indexes" <<-'EOF'
# Since Docker users using "RUN apt-get update && apt-get install -y ..." in
# their Dockerfiles don't go delete the lists files afterwards, we want them to
# be as small as possible on-disk, so we explicitly request "gz" versions and
# tell Apt to keep them gzipped on-disk.
# For comparison, an "apt-get update" layer without this on a pristine
# "debian:wheezy" base image was "29.88 MB", where with this it was only
# "8.273 MB".
Acquire::GzipIndexes "true";
Acquire::CompressionTypes::Order:: "gz";
EOF
# update "autoremove" configuration to be aggressive about removing suggests deps that weren't manually installed
echo >&2 "+ echo Apt::AutoRemove::SuggestsImportant 'false' > '$rootfsDir/etc/apt/apt.conf.d/docker-autoremove-suggests'"
cat > "$rootfsDir/etc/apt/apt.conf.d/docker-autoremove-suggests" <<-'EOF'
# Since Docker users are looking for the smallest possible final images, the
# following emerges as a very common pattern:
# RUN apt-get update \
# && apt-get install -y <packages> \
# && <do some compilation work> \
# && apt-get purge -y --auto-remove <packages>
# By default, APT will actually _keep_ packages installed via Recommends or
# Depends if another package Suggests them, even and including if the package
# that originally caused them to be installed is removed. Setting this to
# "false" ensures that APT is appropriately aggressive about removing the
# packages it added.
# https://aptitude.alioth.debian.org/doc/en/ch02s05s05.html#configApt-AutoRemove-SuggestsImportant
Apt::AutoRemove::SuggestsImportant "false";
EOF
fi
cat > "$rootfsDir/usr/sbin/install_packages" <<-'EOF'
#!/bin/sh
set -e
set -u
apt-get update
apt-get install -y "$@"
rm -r /var/lib/apt/lists /var/cache/apt/archives
EOF
chmod 0755 "$rootfsDir/usr/sbin/install_packages"
echo "Trimming down"
chroot "$rootfsDir" dpkg --force-all -P $PACKAGES_TO_EXCLUDE
for DIR in $DIRS_TO_TRIM; do
rm -r "$rootfsDir/$DIR"/*
done
echo "Total size"
du -skh "$rootfsDir"
echo "Package sizes"
chroot "$rootfsDir" dpkg-query -W -f '${Package} ${Installed-Size}\n'
echo "Largest dirs"
du "$rootfsDir" | sort -n | tail -n 20
echo "Built in $rootfsDir"
tar cf "$TARGET" -C "$rootfsDir" .
rm -r "$rootfsDir"
echo "Image built at ${TARGET}"
+26
View File
@@ -0,0 +1,26 @@
FROM jamesw/minideb:jessie
MAINTAINER James Westby <james@bitnami.com>
RUN install_packages curl gnupg busybox
ADD nami-linux-x64.tar.gz /opt/bitnami/
RUN ln -s /opt/bitnami/nami-linux-x64 /opt/bitnami/nami
ENV TINI_VERSION v0.9.0
RUN cd /tmp && \
curl -sSLO https://github.com/krallin/tini/releases/download/$TINI_VERSION/tini && \
curl -sSLO https://github.com/krallin/tini/releases/download/$TINI_VERSION/tini.asc && \
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 6380DC428747F6C393FEACA59A84159D7001A4E5 && \
gpg --verify tini.asc && \
chmod +x tini && \
mv tini /usr/local/bin/ && \
rm tini.asc
ENV PATH=/opt/bitnami/nami/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ADD rootfs /
# Compatibilty as the modules still expect to find harpoon
RUN ln -s /opt/bitnami/nami/bin/nami /opt/bitnami/nami/bin/harpoon
+26
View File
@@ -0,0 +1,26 @@
FROM jamesw/minideb:unstable
MAINTAINER James Westby <james@bitnami.com>
RUN install_packages curl gnupg busybox
ADD nami-linux-x64.tar.gz /opt/bitnami/
RUN ln -s /opt/bitnami/nami-linux-x64 /opt/bitnami/nami
ENV TINI_VERSION v0.9.0
RUN cd /tmp && \
curl -sSLO https://github.com/krallin/tini/releases/download/$TINI_VERSION/tini && \
curl -sSLO https://github.com/krallin/tini/releases/download/$TINI_VERSION/tini.asc && \
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 6380DC428747F6C393FEACA59A84159D7001A4E5 && \
gpg --verify tini.asc && \
chmod +x tini && \
mv tini /usr/local/bin/ && \
rm tini.asc
ENV PATH=/opt/bitnami/nami/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ADD rootfs /
# Compatibilty as the modules still expect to find harpoon
RUN ln -s /opt/bitnami/nami/bin/nami /opt/bitnami/nami/bin/harpoon
+7
View File
@@ -0,0 +1,7 @@
#!/bin/bash
source /opt/bitnami/stacksmith-utils.sh
print_welcome_page
check_for_updates &
exec tini -- "$@"
@@ -0,0 +1,131 @@
BITNAMI_PREFIX=/opt/bitnami
UPDATE_SERVER="https://container.checkforupdates.com"
print_welcome_page() {
if [ -n "$BITNAMI_APP_NAME" ]; then
print_image_welcome_page
elif [ -n "$STACKSMITH_STACK_ID" ]; then
print_stacksmith_welcome_page
fi
}
check_for_updates() {
if [ -z "$DISABLE_UPDATE_CHECK" ]; then
if [ -n "$BITNAMI_APP_NAME" ]; then
check_for_image_updates
elif [ -n "$STACKSMITH_STACK_ID" ]; then
check_for_stack_updates
fi
fi
}
# Prints the welcome page for this Bitnami Docker image
print_image_welcome_page() {
GITHUB_PAGE=https://github.com/bitnami/bitnami-docker-${BITNAMI_APP_NAME}
cat << EndOfMessage
*** Welcome to the ${BITNAMI_APP_NAME} image ***
*** Brought to you by Bitnami ***
*** More information: ${GITHUB_PAGE} ***
*** Issues: ${GITHUB_PAGE}/issues ***
EndOfMessage
}
# Prints the welcome page for this Stacksmith stack
print_stacksmith_welcome_page() {
STACKSMITH_URL="https://stacksmith.bitnami.com"
STACKSMITH_STACK_URL="$STACKSMITH_URL/dashboard/stacks/$STACKSMITH_STACK_ID"
if [ "$STACKSMITH_STACK_PRIVATE" ]; then
MSG1="Go to $STACKSMITH_STACK_URL to manage your stack."
else
MSG1="This stack was created anonymously."
MSG2="Sign up for a free account at $STACKSMITH_URL to manage and regenerate your stacks."
fi
cat << EndOfMessage
*** Welcome to your $STACKSMITH_STACK_NAME container! ***
*** Brought to you by Bitnami. ***
*** $MSG1 ***
*** $MSG2 ***
EndOfMessage
}
# Checks for any updates for this Stacksmith stack
check_for_stack_updates() {
ORIGIN=${BITNAMI_CONTAINER_ORIGIN:-stacksmith}
RESPONSE=$(curl -s --connect-timeout 20 \
--cacert /opt/bitnami/updates-ca-cert.pem \
"$UPDATE_SERVER/api/v1?image=$STACKSMITH_STACK_ID&origin=$ORIGIN" \
-w "|%{http_code}")
STATUS=$(echo $RESPONSE | cut -d '|' -f 2)
ACTION="go to https://stacksmith.bitnami.com/dashboard/stacks/"
REGENERATE_ACTION="$ACTION$STACKSMITH_STACK_ID to regenerate"
RECREATE_ACTION="${ACTION}new to create a new stack"
if [ -z "$STACKSMITH_STACK_PRIVATE" ]; then
# Can't regenerate if it's an anonymous stack
REGENERATE_ACTION=$RECREATE_ACTION
fi
OUTDATED_MSG="Updates available"
VULNERABLE_MSG="Your stack is vulnerable"
if [ "$STATUS" = "200" ]; then
COLOR="\e[0;30;42m"
MSG="Your stack is up to date!"
elif [ "$STATUS" = "201" ]; then
COLOR="\e[0;30;43m"
MSG="$OUTDATED_MSG: $REGENERATE_ACTION"
elif [ "$STATUS" = "204" ]; then
COLOR="\e[0;30;43m"
MSG="$OUTDATED_MSG: $RECREATE_ACTION"
elif [ "$STATUS" = "426" ]; then
COLOR="\e[0;37;41m"
MSG="$VULNERABLE_MSG: $REGENERATE_ACTION"
elif [ "$STATUS" = "423" ]; then
COLOR="\e[0;37;41m"
MSG="$VULNERABLE_MSG: $RECREATE_ACTION"
fi
if [ "$MSG" ]; then
printf "\n$COLOR*** $MSG ***\e[0m\n\n"
fi
}
# Checks for any updates for this Bitnami Docker image
check_for_image_updates() {
UPDATE_SERVER="https://container.checkforupdates.com"
ORIGIN=${BITNAMI_CONTAINER_ORIGIN:-DHR}
RESPONSE=$(curl -s --connect-timeout 20 \
--cacert $BITNAMI_PREFIX/updates-ca-cert.pem \
"$UPDATE_SERVER/api/v1?image=$BITNAMI_APP_NAME&version=$BITNAMI_IMAGE_VERSION&origin=$ORIGIN" \
-w "|%{http_code}")
VERSION=$(echo $RESPONSE | cut -d '|' -f 1)
if [[ ! $VERSION =~ [0-9.-] ]]; then
return
fi
STATUS=$(echo $RESPONSE | cut -d '|' -f 2)
if [ "$STATUS" = "200" ]; then
COLOR="\e[0;30;42m"
MSG="Your container is up to date!"
elif [ "$STATUS" = "201" ]; then
COLOR="\e[0;30;43m"
MSG="New version available: run docker pull bitnami/$BITNAMI_APP_NAME:$VERSION to update."
fi
if [ "$MSG" ]; then
printf "\n$COLOR*** $MSG ***\e[0m\n\n"
fi
}
@@ -0,0 +1,839 @@
<!DOCTYPE html>
<html lang="en" class="">
<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# object: http://ogp.me/ns/object# article: http://ogp.me/ns/article# profile: http://ogp.me/ns/profile#">
<meta charset='utf-8'>
<link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/frameworks-5fc7c6e8cf4372103a3e557a9fd70de7ffb44c643a350ece5b400060b64141e7.css" media="all" rel="stylesheet" />
<link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/github-d8ed145bdf068fa6112b605071db55ccd9a7045533a2919d609fd28fbdf7d956.css" media="all" rel="stylesheet" />
<link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/site-f4b3d32cffc56de06873b8a6d88ae6139de92dc0fc31574232803d68729f6fac.css" media="all" rel="stylesheet" />
<link as="script" href="https://assets-cdn.github.com/assets/frameworks-404cdd1add1f710db016a02e5e31fff8a9089d14ff0c227df862b780886db7d5.js" rel="preload" />
<link as="script" href="https://assets-cdn.github.com/assets/github-70f59e082c85a766a9d6f4e75d4c2fee34c0b5554f941d070170b1a3bb14d607.js" rel="preload" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="Content-Language" content="en">
<meta name="viewport" content="width=device-width">
<title>stacksmith-base/updates-ca-cert.pem at master · bitnami/stacksmith-base · GitHub</title>
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
<link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-180x180.png">
<meta property="fb:app_id" content="1401488693436528">
<meta content="https://avatars3.githubusercontent.com/u/5446553?v=3&amp;s=400" name="twitter:image:src" /><meta content="@github" name="twitter:site" /><meta content="summary" name="twitter:card" /><meta content="bitnami/stacksmith-base" name="twitter:title" /><meta content="stacksmith-base - Dockerfiles for the base images used in Bitnami Stacksmith" name="twitter:description" />
<meta content="https://avatars3.githubusercontent.com/u/5446553?v=3&amp;s=400" property="og:image" /><meta content="GitHub" property="og:site_name" /><meta content="object" property="og:type" /><meta content="bitnami/stacksmith-base" property="og:title" /><meta content="https://github.com/bitnami/stacksmith-base" property="og:url" /><meta content="stacksmith-base - Dockerfiles for the base images used in Bitnami Stacksmith" property="og:description" />
<meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">
<meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">
<link rel="assets" href="https://assets-cdn.github.com/">
<meta name="pjax-timeout" content="1000">
<meta name="msapplication-TileImage" content="/windows-tile.png">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="selected-link" value="repo_source" data-pjax-transient>
<meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU">
<meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA">
<meta name="google-analytics" content="UA-3769691-2">
<meta content="collector.githubapp.com" name="octolytics-host" /><meta content="github" name="octolytics-app-id" /><meta content="561FA33B:55FD:4831F0F:579B6080" name="octolytics-dimension-request_id" />
<meta content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-pjax-transient="true" name="analytics-location" />
<meta class="js-ga-set" name="dimension1" content="Logged Out">
<meta name="hostname" content="github.com">
<meta name="user-login" content="">
<meta name="expected-hostname" content="github.com">
<meta name="js-proxy-site-detection-payload" content="MzAxYWZhZTZlN2VkMTRhMGNkOTM0NjRjMWE2ZmIwM2U2MDE2Nzc2OTRhNjZhODNlOWExMzA3NzA2OGVkYWYyM3x7InJlbW90ZV9hZGRyZXNzIjoiODYuMzEuMTYzLjU5IiwicmVxdWVzdF9pZCI6IjU2MUZBMzNCOjU1RkQ6NDgzMUYwRjo1NzlCNjA4MCIsInRpbWVzdGFtcCI6MTQ2OTgwMDU3Nn0=">
<link rel="mask-icon" href="https://assets-cdn.github.com/pinned-octocat.svg" color="#4078c0">
<link rel="icon" type="image/x-icon" href="https://assets-cdn.github.com/favicon.ico">
<meta name="html-safe-nonce" content="38aa0b0679f1e874030dfefac296a9cbed3fa16c">
<meta content="14a4a5b47526efc5cb8934b04809f1b646b1ab5f" name="form-nonce" />
<meta http-equiv="x-pjax-version" content="7c9e8c845288272e709a52e4163ff196">
<meta name="description" content="stacksmith-base - Dockerfiles for the base images used in Bitnami Stacksmith">
<meta name="go-import" content="github.com/bitnami/stacksmith-base git https://github.com/bitnami/stacksmith-base.git">
<meta content="5446553" name="octolytics-dimension-user_id" /><meta content="bitnami" name="octolytics-dimension-user_login" /><meta content="54024001" name="octolytics-dimension-repository_id" /><meta content="bitnami/stacksmith-base" name="octolytics-dimension-repository_nwo" /><meta content="true" name="octolytics-dimension-repository_public" /><meta content="false" name="octolytics-dimension-repository_is_fork" /><meta content="54024001" name="octolytics-dimension-repository_network_root_id" /><meta content="bitnami/stacksmith-base" name="octolytics-dimension-repository_network_root_nwo" />
<link href="https://github.com/bitnami/stacksmith-base/commits/master.atom" rel="alternate" title="Recent Commits to stacksmith-base:master" type="application/atom+xml">
<link rel="canonical" href="https://github.com/bitnami/stacksmith-base/blob/master/rootfs/opt/bitnami/updates-ca-cert.pem" data-pjax-transient>
</head>
<body class="logged-out env-production vis-public page-blob">
<div id="js-pjax-loader-bar" class="pjax-loader-bar"></div>
<a href="#start-of-content" tabindex="1" class="accessibility-aid js-skip-to-content">Skip to content</a>
<header class="site-header js-details-container" role="banner">
<div class="container-responsive">
<a class="header-logo-invertocat" href="https://github.com/" aria-label="Homepage" data-ga-click="(Logged out) Header, go to homepage, icon:logo-wordmark">
<svg aria-hidden="true" class="octicon octicon-mark-github" height="32" version="1.1" viewBox="0 0 16 16" width="32"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path></svg>
</a>
<button class="btn-link right site-header-toggle js-details-target" type="button" aria-label="Toggle navigation">
<svg aria-hidden="true" class="octicon octicon-three-bars" height="24" version="1.1" viewBox="0 0 12 16" width="18"><path d="M11.41 9H.59C0 9 0 8.59 0 8c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zm0-4H.59C0 5 0 4.59 0 4c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zM.59 11H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1H.59C0 13 0 12.59 0 12c0-.59 0-1 .59-1z"></path></svg>
</button>
<div class="site-header-menu">
<nav class="site-header-nav site-header-nav-main">
<a href="/personal" class="js-selected-navigation-item nav-item nav-item-personal" data-ga-click="Header, click, Nav menu - item:personal" data-selected-links="/personal /personal">
Personal
</a> <a href="/open-source" class="js-selected-navigation-item nav-item nav-item-opensource" data-ga-click="Header, click, Nav menu - item:opensource" data-selected-links="/open-source /open-source">
Open source
</a> <a href="/business" class="js-selected-navigation-item nav-item nav-item-business" data-ga-click="Header, click, Nav menu - item:business" data-selected-links="/business /business/features /business/customers /business">
Business
</a> <a href="/explore" class="js-selected-navigation-item nav-item nav-item-explore" data-ga-click="Header, click, Nav menu - item:explore" data-selected-links="/explore /trending /trending/developers /integrations /integrations/feature/code /integrations/feature/collaborate /integrations/feature/ship /explore">
Explore
</a> </nav>
<div class="site-header-actions">
<a class="btn btn-primary site-header-actions-btn" href="/join?source=header-repo" data-ga-click="(Logged out) Header, clicked Sign up, text:sign-up">Sign up</a>
<a class="btn site-header-actions-btn mr-2" href="/login?return_to=%2Fbitnami%2Fstacksmith-base%2Fblob%2Fmaster%2Frootfs%2Fopt%2Fbitnami%2Fupdates-ca-cert.pem" data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in">Sign in</a>
</div>
<nav class="site-header-nav site-header-nav-secondary">
<a class="nav-item" href="/pricing">Pricing</a>
<a class="nav-item" href="/blog">Blog</a>
<a class="nav-item" href="https://help.github.com">Support</a>
<a class="nav-item header-search-link" href="https://github.com/search">Search GitHub</a>
<div class="header-search scoped-search site-scoped-search js-site-search" role="search">
<!-- </textarea> --><!-- '"` --><form accept-charset="UTF-8" action="/bitnami/stacksmith-base/search" class="js-site-search-form" data-scoped-search-url="/bitnami/stacksmith-base/search" data-unscoped-search-url="/search" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
<label class="form-control header-search-wrapper js-chromeless-input-container">
<div class="header-search-scope">This repository</div>
<input type="text"
class="form-control header-search-input js-site-search-focus js-site-search-field is-clearable"
data-hotkey="s"
name="q"
placeholder="Search"
aria-label="Search this repository"
data-unscoped-placeholder="Search GitHub"
data-scoped-placeholder="Search"
autocapitalize="off">
</label>
</form></div>
</nav>
</div>
</div>
</header>
<div id="start-of-content" class="accessibility-aid"></div>
<div id="js-flash-container">
</div>
<div role="main">
<div itemscope itemtype="http://schema.org/SoftwareSourceCode">
<div id="js-repo-pjax-container" data-pjax-container>
<div class="pagehead repohead instapaper_ignore readability-menu experiment-repo-nav">
<div class="container repohead-details-container">
<ul class="pagehead-actions">
<li>
<a href="/login?return_to=%2Fbitnami%2Fstacksmith-base"
class="btn btn-sm btn-with-count tooltipped tooltipped-n"
aria-label="You must be signed in to watch a repository" rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-eye" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"></path></svg>
Watch
</a>
<a class="social-count" href="/bitnami/stacksmith-base/watchers">
27
</a>
</li>
<li>
<a href="/login?return_to=%2Fbitnami%2Fstacksmith-base"
class="btn btn-sm btn-with-count tooltipped tooltipped-n"
aria-label="You must be signed in to star a repository" rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-star" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74z"></path></svg>
Star
</a>
<a class="social-count js-social-count" href="/bitnami/stacksmith-base/stargazers">
1
</a>
</li>
<li>
<a href="/login?return_to=%2Fbitnami%2Fstacksmith-base"
class="btn btn-sm btn-with-count tooltipped tooltipped-n"
aria-label="You must be signed in to fork a repository" rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-repo-forked" height="16" version="1.1" viewBox="0 0 10 16" width="10"><path d="M8 1a1.993 1.993 0 0 0-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V6.5l3 3v1.78A1.993 1.993 0 0 0 5 15a1.993 1.993 0 0 0 1-3.72V9.5l3-3V4.72A1.993 1.993 0 0 0 8 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"></path></svg>
Fork
</a>
<a href="/bitnami/stacksmith-base/network" class="social-count">
4
</a>
</li>
</ul>
<h1 class="public ">
<svg aria-hidden="true" class="octicon octicon-repo" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"></path></svg>
<span class="author" itemprop="author"><a href="/bitnami" class="url fn" rel="author">bitnami</a></span><!--
--><span class="path-divider">/</span><!--
--><strong itemprop="name"><a href="/bitnami/stacksmith-base" data-pjax="#js-repo-pjax-container">stacksmith-base</a></strong>
</h1>
</div>
<div class="container">
<nav class="reponav js-repo-nav js-sidenav-container-pjax"
itemscope
itemtype="http://schema.org/BreadcrumbList"
role="navigation"
data-pjax="#js-repo-pjax-container">
<span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
<a href="/bitnami/stacksmith-base" aria-selected="true" class="js-selected-navigation-item selected reponav-item" data-hotkey="g c" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches /bitnami/stacksmith-base" itemprop="url">
<svg aria-hidden="true" class="octicon octicon-code" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path d="M9.5 3L8 4.5 11.5 8 8 11.5 9.5 13 14 8 9.5 3zm-5 0L0 8l4.5 5L6 11.5 2.5 8 6 4.5 4.5 3z"></path></svg>
<span itemprop="name">Code</span>
<meta itemprop="position" content="1">
</a> </span>
<span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
<a href="/bitnami/stacksmith-base/issues" class="js-selected-navigation-item reponav-item" data-hotkey="g i" data-selected-links="repo_issues repo_labels repo_milestones /bitnami/stacksmith-base/issues" itemprop="url">
<svg aria-hidden="true" class="octicon octicon-issue-opened" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg>
<span itemprop="name">Issues</span>
<span class="counter">0</span>
<meta itemprop="position" content="2">
</a> </span>
<span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
<a href="/bitnami/stacksmith-base/pulls" class="js-selected-navigation-item reponav-item" data-hotkey="g p" data-selected-links="repo_pulls /bitnami/stacksmith-base/pulls" itemprop="url">
<svg aria-hidden="true" class="octicon octicon-git-pull-request" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M11 11.28V5c-.03-.78-.34-1.47-.94-2.06C9.46 2.35 8.78 2.03 8 2H7V0L4 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0 0 10 15a1.993 1.993 0 0 0 1-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zM4 3c0-1.11-.89-2-2-2a1.993 1.993 0 0 0-1 3.72v6.56A1.993 1.993 0 0 0 2 15a1.993 1.993 0 0 0 1-3.72V4.72c.59-.34 1-.98 1-1.72zm-.8 10c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"></path></svg>
<span itemprop="name">Pull requests</span>
<span class="counter">1</span>
<meta itemprop="position" content="3">
</a> </span>
<a href="/bitnami/stacksmith-base/pulse" class="js-selected-navigation-item reponav-item" data-selected-links="pulse /bitnami/stacksmith-base/pulse">
<svg aria-hidden="true" class="octicon octicon-pulse" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path d="M11.5 8L8.8 5.4 6.6 8.5 5.5 1.6 2.38 8H0v2h3.6l.9-1.8.9 5.4L9 8.5l1.6 1.5H14V8z"></path></svg>
Pulse
</a>
<a href="/bitnami/stacksmith-base/graphs" class="js-selected-navigation-item reponav-item" data-selected-links="repo_graphs repo_contributors /bitnami/stacksmith-base/graphs">
<svg aria-hidden="true" class="octicon octicon-graph" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path d="M16 14v1H0V0h1v14h15zM5 13H3V8h2v5zm4 0H7V3h2v10zm4 0h-2V6h2v7z"></path></svg>
Graphs
</a>
</nav>
</div>
</div>
<div class="container new-discussion-timeline experiment-repo-nav">
<div class="repository-content">
<a href="/bitnami/stacksmith-base/blob/6ebb6b8034a5c2934761f306fa51316494be8224/rootfs/opt/bitnami/updates-ca-cert.pem" class="hidden js-permalink-shortcut" data-hotkey="y">Permalink</a>
<!-- blob contrib key: blob_contributors:v21:848392b11e9cb4b6dbb8acf5441d5c6b -->
<div class="file-navigation js-zeroclipboard-container">
<div class="select-menu branch-select-menu js-menu-container js-select-menu left">
<button class="btn btn-sm select-menu-button js-menu-target css-truncate" data-hotkey="w"
title="master"
type="button" aria-label="Switch branches or tags" tabindex="0" aria-haspopup="true">
<i>Branch:</i>
<span class="js-select-button css-truncate-target">master</span>
</button>
<div class="select-menu-modal-holder js-menu-content js-navigation-container" data-pjax aria-hidden="true">
<div class="select-menu-modal">
<div class="select-menu-header">
<svg aria-label="Close" class="octicon octicon-x js-menu-close" height="16" role="img" version="1.1" viewBox="0 0 12 16" width="12"><path d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"></path></svg>
<span class="select-menu-title">Switch branches/tags</span>
</div>
<div class="select-menu-filters">
<div class="select-menu-text-filter">
<input type="text" aria-label="Filter branches/tags" id="context-commitish-filter-field" class="form-control js-filterable-field js-navigation-enable" placeholder="Filter branches/tags">
</div>
<div class="select-menu-tabs">
<ul>
<li class="select-menu-tab">
<a href="#" data-tab-filter="branches" data-filter-placeholder="Filter branches/tags" class="js-select-menu-tab" role="tab">Branches</a>
</li>
<li class="select-menu-tab">
<a href="#" data-tab-filter="tags" data-filter-placeholder="Find a tag…" class="js-select-menu-tab" role="tab">Tags</a>
</li>
</ul>
</div>
</div>
<div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="branches" role="menu">
<div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/blob/bump-revisions/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="bump-revisions"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target js-select-menu-filter-text" title="bump-revisions">
bump-revisions
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/blob/disable-update-check-optionally/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="disable-update-check-optionally"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target js-select-menu-filter-text" title="disable-update-check-optionally">
disable-update-check-optionally
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open selected"
href="/bitnami/stacksmith-base/blob/master/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="master"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target js-select-menu-filter-text" title="master">
master
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/blob/revert-24-debian-r8/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="revert-24-debian-r8"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target js-select-menu-filter-text" title="revert-24-debian-r8">
revert-24-debian-r8
</span>
</a>
</div>
<div class="select-menu-no-results">Nothing to show</div>
</div>
<div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="tags">
<div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/tree/ubuntu/16.04-r1/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="ubuntu/16.04-r1"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target" title="ubuntu/16.04-r1">
ubuntu/16.04-r1
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/tree/ubuntu/16.04-r0/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="ubuntu/16.04-r0"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target" title="ubuntu/16.04-r0">
ubuntu/16.04-r0
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/tree/ubuntu/15.10-r1/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="ubuntu/15.10-r1"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target" title="ubuntu/15.10-r1">
ubuntu/15.10-r1
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/tree/ubuntu/15.10-r0/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="ubuntu/15.10-r0"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target" title="ubuntu/15.10-r0">
ubuntu/15.10-r0
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/tree/ubuntu/14.04-r8/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="ubuntu/14.04-r8"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target" title="ubuntu/14.04-r8">
ubuntu/14.04-r8
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/tree/ubuntu/14.04-r07/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="ubuntu/14.04-r07"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target" title="ubuntu/14.04-r07">
ubuntu/14.04-r07
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/tree/ubuntu/14.04-r06/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="ubuntu/14.04-r06"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target" title="ubuntu/14.04-r06">
ubuntu/14.04-r06
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/tree/ubuntu/14.04-r05/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="ubuntu/14.04-r05"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target" title="ubuntu/14.04-r05">
ubuntu/14.04-r05
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/tree/ubuntu/12.04-r1/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="ubuntu/12.04-r1"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target" title="ubuntu/12.04-r1">
ubuntu/12.04-r1
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/tree/ubuntu/12.04-r0/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="ubuntu/12.04-r0"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target" title="ubuntu/12.04-r0">
ubuntu/12.04-r0
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/tree/debian/wheezy-r8/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="debian/wheezy-r8"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target" title="debian/wheezy-r8">
debian/wheezy-r8
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/tree/debian/wheezy-r07/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="debian/wheezy-r07"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target" title="debian/wheezy-r07">
debian/wheezy-r07
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/tree/debian/wheezy-r7/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="debian/wheezy-r7"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target" title="debian/wheezy-r7">
debian/wheezy-r7
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/tree/debian/wheezy-r06/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="debian/wheezy-r06"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target" title="debian/wheezy-r06">
debian/wheezy-r06
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/tree/debian/wheezy-r05/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="debian/wheezy-r05"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target" title="debian/wheezy-r05">
debian/wheezy-r05
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/bitnami/stacksmith-base/tree/debian/jessie-r0/rootfs/opt/bitnami/updates-ca-cert.pem"
data-name="debian/jessie-r0"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path></svg>
<span class="select-menu-item-text css-truncate-target" title="debian/jessie-r0">
debian/jessie-r0
</span>
</a>
</div>
<div class="select-menu-no-results">Nothing to show</div>
</div>
</div>
</div>
</div>
<div class="btn-group right">
<a href="/bitnami/stacksmith-base/find/master"
class="js-pjax-capture-input btn btn-sm"
data-pjax
data-hotkey="t">
Find file
</a>
<button aria-label="Copy file path to clipboard" class="js-zeroclipboard btn btn-sm zeroclipboard-button tooltipped tooltipped-s" data-copied-hint="Copied!" type="button">Copy path</button>
</div>
<div class="breadcrumb js-zeroclipboard-target">
<span class="repo-root js-repo-root"><span class="js-path-segment"><a href="/bitnami/stacksmith-base"><span>stacksmith-base</span></a></span></span><span class="separator">/</span><span class="js-path-segment"><a href="/bitnami/stacksmith-base/tree/master/rootfs"><span>rootfs</span></a></span><span class="separator">/</span><span class="js-path-segment"><a href="/bitnami/stacksmith-base/tree/master/rootfs/opt"><span>opt</span></a></span><span class="separator">/</span><span class="js-path-segment"><a href="/bitnami/stacksmith-base/tree/master/rootfs/opt/bitnami"><span>bitnami</span></a></span><span class="separator">/</span><strong class="final-path">updates-ca-cert.pem</strong>
</div>
</div>
<div class="commit-tease">
<span class="right">
<a class="commit-tease-sha" href="/bitnami/stacksmith-base/commit/aa1e447b85f4474d3be25ee9cd7173cac295125b" data-pjax>
aa1e447
</a>
<relative-time datetime="2016-03-16T11:50:48Z">Mar 16, 2016</relative-time>
</span>
<div>
<img alt="@prydonius" class="avatar" height="20" src="https://avatars3.githubusercontent.com/u/1544861?v=3&amp;s=40" width="20" />
<a href="/prydonius" class="user-mention" rel="contributor">prydonius</a>
<a href="/bitnami/stacksmith-base/commit/aa1e447b85f4474d3be25ee9cd7173cac295125b" class="message" data-pjax="true" title="Initial commit">Initial commit</a>
</div>
<div class="commit-tease-contributors">
<button type="button" class="btn-link muted-link contributors-toggle" data-facebox="#blob_contributors_box">
<strong>1</strong>
contributor
</button>
</div>
<div id="blob_contributors_box" style="display:none">
<h2 class="facebox-header" data-facebox-id="facebox-header">Users who have contributed to this file</h2>
<ul class="facebox-user-list" data-facebox-id="facebox-description">
<li class="facebox-user-list-item">
<img alt="@prydonius" height="24" src="https://avatars1.githubusercontent.com/u/1544861?v=3&amp;s=48" width="24" />
<a href="/prydonius">prydonius</a>
</li>
</ul>
</div>
</div>
<div class="file">
<div class="file-header">
<div class="file-actions">
<div class="btn-group">
<a href="/bitnami/stacksmith-base/raw/master/rootfs/opt/bitnami/updates-ca-cert.pem" class="btn btn-sm " id="raw-url">Raw</a>
<a href="/bitnami/stacksmith-base/blame/master/rootfs/opt/bitnami/updates-ca-cert.pem" class="btn btn-sm js-update-url-with-hash">Blame</a>
<a href="/bitnami/stacksmith-base/commits/master/rootfs/opt/bitnami/updates-ca-cert.pem" class="btn btn-sm " rel="nofollow">History</a>
</div>
<button type="button" class="btn-octicon disabled tooltipped tooltipped-nw"
aria-label="You must be signed in to make or propose changes">
<svg aria-hidden="true" class="octicon octicon-pencil" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path d="M0 12v3h3l8-8-3-3-8 8zm3 2H1v-2h1v1h1v1zm10.3-9.3L12 6 9 3l1.3-1.3a.996.996 0 0 1 1.41 0l1.59 1.59c.39.39.39 1.02 0 1.41z"></path></svg>
</button>
<button type="button" class="btn-octicon btn-octicon-danger disabled tooltipped tooltipped-nw"
aria-label="You must be signed in to make or propose changes">
<svg aria-hidden="true" class="octicon octicon-trashcan" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z"></path></svg>
</button>
</div>
<div class="file-info">
34 lines (33 sloc)
<span class="file-info-divider"></span>
1.97 KB
</div>
</div>
<div itemprop="text" class="blob-wrapper data type-text">
<table class="highlight tab-size js-file-line-container" data-tab-size="8">
<tr>
<td id="L1" class="blob-num js-line-number" data-line-number="1"></td>
<td id="LC1" class="blob-code blob-code-inner js-file-line">-----BEGIN CERTIFICATE-----</td>
</tr>
<tr>
<td id="L2" class="blob-num js-line-number" data-line-number="2"></td>
<td id="LC2" class="blob-code blob-code-inner js-file-line">MIIFpTCCA42gAwIBAgIJAKt1o98RcsLQMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNV</td>
</tr>
<tr>
<td id="L3" class="blob-num js-line-number" data-line-number="3"></td>
<td id="LC3" class="blob-code blob-code-inner js-file-line">BAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEQMA4G</td>
</tr>
<tr>
<td id="L4" class="blob-num js-line-number" data-line-number="4"></td>
<td id="LC4" class="blob-code blob-code-inner js-file-line">A1UECgwHQml0bmFtaTEjMCEGA1UEAwwaQml0bmFtaSBQaG9uZSBIb21lIFJvb3Qg</td>
</tr>
<tr>
<td id="L5" class="blob-num js-line-number" data-line-number="5"></td>
<td id="LC5" class="blob-code blob-code-inner js-file-line">Q0EwHhcNMTUwNjE5MDAwMjA1WhcNMjUwNjE2MDAwMjA1WjBpMQswCQYDVQQGEwJV</td>
</tr>
<tr>
<td id="L6" class="blob-num js-line-number" data-line-number="6"></td>
<td id="LC6" class="blob-code blob-code-inner js-file-line">UzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xEDAOBgNVBAoM</td>
</tr>
<tr>
<td id="L7" class="blob-num js-line-number" data-line-number="7"></td>
<td id="LC7" class="blob-code blob-code-inner js-file-line">B0JpdG5hbWkxIzAhBgNVBAMMGkJpdG5hbWkgUGhvbmUgSG9tZSBSb290IENBMIIC</td>
</tr>
<tr>
<td id="L8" class="blob-num js-line-number" data-line-number="8"></td>
<td id="LC8" class="blob-code blob-code-inner js-file-line">IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArpIiJ+T9HOgvActkzXwTPjJF</td>
</tr>
<tr>
<td id="L9" class="blob-num js-line-number" data-line-number="9"></td>
<td id="LC9" class="blob-code blob-code-inner js-file-line">r48aAsQldu43XfmQ3Fp/og1r34ULwdSkSFgbwJ36h/Q16bk0WfRemugBNbOup2tf</td>
</tr>
<tr>
<td id="L10" class="blob-num js-line-number" data-line-number="10"></td>
<td id="LC10" class="blob-code blob-code-inner js-file-line">z9G6xv0PFZeTkv8U5emaGS3PneuG/3doPHutHGMjWie1vqOLHZuOxxvub3wv5YJO</td>
</tr>
<tr>
<td id="L11" class="blob-num js-line-number" data-line-number="11"></td>
<td id="LC11" class="blob-code blob-code-inner js-file-line">jKGgdUrwbC28Kag5UpcvouEq1WnrT1Mbjph3tHc/fDr6rSND4w2Aie5Z8GjYHaxR</td>
</tr>
<tr>
<td id="L12" class="blob-num js-line-number" data-line-number="12"></td>
<td id="LC12" class="blob-code blob-code-inner js-file-line">yXsykJguJQqlZbehPkRn2ywm2SWZiV1NQpH12lcSIXKG/hxd7QmUvaho1ZzOpwMt</td>
</tr>
<tr>
<td id="L13" class="blob-num js-line-number" data-line-number="13"></td>
<td id="LC13" class="blob-code blob-code-inner js-file-line">wMzz/+IVz1XvB/PELi7lm6jGz97kn2opBnY2P04tMK/ejRLB3DsiJ2CmAmOs9n44</td>
</tr>
<tr>
<td id="L14" class="blob-num js-line-number" data-line-number="14"></td>
<td id="LC14" class="blob-code blob-code-inner js-file-line">+6NG4Bu4Tgc/ZvgIGH0ix8w42vGKA3kR9KPIO3wWKMv6AeQS3J+ggae/e83H8uMF</td>
</tr>
<tr>
<td id="L15" class="blob-num js-line-number" data-line-number="15"></td>
<td id="LC15" class="blob-code blob-code-inner js-file-line">jPYchy6MkI9gyWktE1Um3iq7FgqcTmLHovvF1LABqbYMBnr85HTBlSYQ6mlz2VoN</td>
</tr>
<tr>
<td id="L16" class="blob-num js-line-number" data-line-number="16"></td>
<td id="LC16" class="blob-code blob-code-inner js-file-line">5muyL3LYC7WUYfQJVln5xs6j8VjXyVKTJWOAoJBIM1vgDanzHgbAmMK3CnRp2pF4</td>
</tr>
<tr>
<td id="L17" class="blob-num js-line-number" data-line-number="17"></td>
<td id="LC17" class="blob-code blob-code-inner js-file-line">VfszNlsjLguEf+hc7/GxslfQfW8MXhd+f3bnL2fsi5R5kNjzgHE2weKwwLkGMPKG</td>
</tr>
<tr>
<td id="L18" class="blob-num js-line-number" data-line-number="18"></td>
<td id="LC18" class="blob-code blob-code-inner js-file-line">aP96GxNPwlGSTG/tIuxPkye5vclEg0JaFXOg/pf2lH/P3NHeldLf1mUyXTprssy3</td>
</tr>
<tr>
<td id="L19" class="blob-num js-line-number" data-line-number="19"></td>
<td id="LC19" class="blob-code blob-code-inner js-file-line">nWkKllTJcq8zRU1r5kkCAwEAAaNQME4wHQYDVR0OBBYEFN2tSXBlE4PgqPxPy9VX</td>
</tr>
<tr>
<td id="L20" class="blob-num js-line-number" data-line-number="20"></td>
<td id="LC20" class="blob-code blob-code-inner js-file-line">Yimc/5kOMB8GA1UdIwQYMBaAFN2tSXBlE4PgqPxPy9VXYimc/5kOMAwGA1UdEwQF</td>
</tr>
<tr>
<td id="L21" class="blob-num js-line-number" data-line-number="21"></td>
<td id="LC21" class="blob-code blob-code-inner js-file-line">MAMBAf8wDQYJKoZIhvcNAQELBQADggIBAIvdKO/cXvNQ5/zEnfdQVDMnCUN+oQ4B</td>
</tr>
<tr>
<td id="L22" class="blob-num js-line-number" data-line-number="22"></td>
<td id="LC22" class="blob-code blob-code-inner js-file-line">45z/Te+zx990tRatdJR5d83LkyRdsl2n+VaxBXTE/ejIfuXcGguH1tEqAsG9R9cf</td>
</tr>
<tr>
<td id="L23" class="blob-num js-line-number" data-line-number="23"></td>
<td id="LC23" class="blob-code blob-code-inner js-file-line">2bs8hThkATydpPOCYF9QX+KFz/MiAqNDb0bUS7Uwk1cwSVwbE+9+FbPJGTgemNn9</td>
</tr>
<tr>
<td id="L24" class="blob-num js-line-number" data-line-number="24"></td>
<td id="LC24" class="blob-code blob-code-inner js-file-line">ZGGDMVLmYXu/Eh9tfZmHa0WYucsJG3hlxMoVymr5sZu9NStIkU+GaI42AXYOANOV</td>
</tr>
<tr>
<td id="L25" class="blob-num js-line-number" data-line-number="25"></td>
<td id="LC25" class="blob-code blob-code-inner js-file-line">Zh3E27zY0zYbaJIQXgVm8E4+KUuNSNotqZ5hOp9hLX60AVBd38R5zabsq2a2wAuE</td>
</tr>
<tr>
<td id="L26" class="blob-num js-line-number" data-line-number="26"></td>
<td id="LC26" class="blob-code blob-code-inner js-file-line">nLhkSP7SVQWisZKYI0J0Y7FSRKaEgI2NMxm8qXCbMSH/Yw3GXLpRCQS9YTNH0xYC</td>
</tr>
<tr>
<td id="L27" class="blob-num js-line-number" data-line-number="27"></td>
<td id="LC27" class="blob-code blob-code-inner js-file-line">AKII+oxIBEKCK/kWIvYjFnmGzUhrPUgxBiJzdaf+AdLsnH59+dn9ypw6GASJsrYa</td>
</tr>
<tr>
<td id="L28" class="blob-num js-line-number" data-line-number="28"></td>
<td id="LC28" class="blob-code blob-code-inner js-file-line">bWco5b2rcO3RNo0PgXf0fE/rUpKqcWE59DK8U9ihWegPSGO9J/hW8kBPWhk2Lcdo</td>
</tr>
<tr>
<td id="L29" class="blob-num js-line-number" data-line-number="29"></td>
<td id="LC29" class="blob-code blob-code-inner js-file-line">t39mAd63GiXiisQ2/VOu2nal/HycQds46BJIbq7gYoSsxwjdb3ANA5yR2xOCPLuj</td>
</tr>
<tr>
<td id="L30" class="blob-num js-line-number" data-line-number="30"></td>
<td id="LC30" class="blob-code blob-code-inner js-file-line">aCF63nnQ27U94h2qQwGvThrAVHa55+HmgxKQrWLVKTfRuDc9bc722rdmyaJS0RAV</td>
</tr>
<tr>
<td id="L31" class="blob-num js-line-number" data-line-number="31"></td>
<td id="LC31" class="blob-code blob-code-inner js-file-line">OBlWeNIKfzARPAvZVRhSrsYu/KtnrObd7i8efHQdKb3EFajQE/i6iX7eWMyZby3B</td>
</tr>
<tr>
<td id="L32" class="blob-num js-line-number" data-line-number="32"></td>
<td id="LC32" class="blob-code blob-code-inner js-file-line">0oj32J1Ls/y6</td>
</tr>
<tr>
<td id="L33" class="blob-num js-line-number" data-line-number="33"></td>
<td id="LC33" class="blob-code blob-code-inner js-file-line">-----END CERTIFICATE-----</td>
</tr>
</table>
</div>
</div>
<button type="button" data-facebox="#jump-to-line" data-facebox-class="linejump" data-hotkey="l" class="hidden">Jump to Line</button>
<div id="jump-to-line" style="display:none">
<!-- </textarea> --><!-- '"` --><form accept-charset="UTF-8" action="" class="js-jump-to-line-form" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
<input class="form-control linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line&hellip;" aria-label="Jump to line" autofocus>
<button type="submit" class="btn">Go</button>
</form></div>
</div>
<div class="modal-backdrop js-touch-events"></div>
</div>
</div>
</div>
</div>
<div class="container site-footer-container">
<div class="site-footer" role="contentinfo">
<ul class="site-footer-links right">
<li><a href="https://github.com/contact" data-ga-click="Footer, go to contact, text:contact">Contact GitHub</a></li>
<li><a href="https://developer.github.com" data-ga-click="Footer, go to api, text:api">API</a></li>
<li><a href="https://training.github.com" data-ga-click="Footer, go to training, text:training">Training</a></li>
<li><a href="https://shop.github.com" data-ga-click="Footer, go to shop, text:shop">Shop</a></li>
<li><a href="https://github.com/blog" data-ga-click="Footer, go to blog, text:blog">Blog</a></li>
<li><a href="https://github.com/about" data-ga-click="Footer, go to about, text:about">About</a></li>
</ul>
<a href="https://github.com" aria-label="Homepage" class="site-footer-mark" title="GitHub">
<svg aria-hidden="true" class="octicon octicon-mark-github" height="24" version="1.1" viewBox="0 0 16 16" width="24"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path></svg>
</a>
<ul class="site-footer-links">
<li>&copy; 2016 <span title="0.04414s from github-fe157-cp1-prd.iad.github.net">GitHub</span>, Inc.</li>
<li><a href="https://github.com/site/terms" data-ga-click="Footer, go to terms, text:terms">Terms</a></li>
<li><a href="https://github.com/site/privacy" data-ga-click="Footer, go to privacy, text:privacy">Privacy</a></li>
<li><a href="https://github.com/security" data-ga-click="Footer, go to security, text:security">Security</a></li>
<li><a href="https://status.github.com/" data-ga-click="Footer, go to status, text:status">Status</a></li>
<li><a href="https://help.github.com" data-ga-click="Footer, go to help, text:help">Help</a></li>
</ul>
</div>
</div>
<div id="ajax-error-message" class="ajax-error-message flash flash-error">
<svg aria-hidden="true" class="octicon octicon-alert" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path d="M8.865 1.52c-.18-.31-.51-.5-.87-.5s-.69.19-.87.5L.275 13.5c-.18.31-.18.69 0 1 .19.31.52.5.87.5h13.7c.36 0 .69-.19.86-.5.17-.31.18-.69.01-1L8.865 1.52zM8.995 13h-2v-2h2v2zm0-3h-2V6h2v4z"></path></svg>
<button type="button" class="flash-close js-flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
<svg aria-hidden="true" class="octicon octicon-x" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"></path></svg>
</button>
Something went wrong with that request. Please try again.
</div>
<script crossorigin="anonymous" src="https://assets-cdn.github.com/assets/compat-7db58f8b7b91111107fac755dd8b178fe7db0f209ced51fc339c446ad3f8da2b.js"></script>
<script crossorigin="anonymous" src="https://assets-cdn.github.com/assets/frameworks-404cdd1add1f710db016a02e5e31fff8a9089d14ff0c227df862b780886db7d5.js"></script>
<script async="async" crossorigin="anonymous" src="https://assets-cdn.github.com/assets/github-70f59e082c85a766a9d6f4e75d4c2fee34c0b5554f941d070170b1a3bb14d607.js"></script>
<div class="js-stale-session-flash stale-session-flash flash flash-warn flash-banner hidden">
<svg aria-hidden="true" class="octicon octicon-alert" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path d="M8.865 1.52c-.18-.31-.51-.5-.87-.5s-.69.19-.87.5L.275 13.5c-.18.31-.18.69 0 1 .19.31.52.5.87.5h13.7c.36 0 .69-.19.86-.5.17-.31.18-.69.01-1L8.865 1.52zM8.995 13h-2v-2h2v2zm0-3h-2V6h2v4z"></path></svg>
<span class="signed-in-tab-flash">You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span>
<span class="signed-out-tab-flash">You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span>
</div>
<div class="facebox" id="facebox" style="display:none;">
<div class="facebox-popup">
<div class="facebox-content" role="dialog" aria-labelledby="facebox-header" aria-describedby="facebox-description">
</div>
<button type="button" class="facebox-close js-facebox-close" aria-label="Close modal">
<svg aria-hidden="true" class="octicon octicon-x" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"></path></svg>
</button>
</div>
</div>
</body>
</html>
+123
View File
@@ -0,0 +1,123 @@
#!/bin/bash
set -e
print_usage() {
echo "Usage: bitnami-pkg <COMMAND> <PACKAGE>-<VERSION> [OPTIONS] -- [ARGS]"
echo ""
echo "Download and install Stacksmith packages"
echo ""
echo "Commands:"
echo " install Download and install a package."
echo " unpack Download and unpack a package."
echo ""
echo "Options:"
echo " -b, --bucket Package release bucket (default: stacksmith)."
echo " -c, --checksum SHA256 verification checksum."
echo " -h, --help Show this help message and exit."
echo ""
echo "Examples:"
echo " - Unpack package"
echo " \$ bitnami-pkg unpack nginx-1.9.10-0"
echo ""
echo " - Verify and Install package"
echo " \$ bitnami-pkg install nginx-1.9.10-0 --checksum 15565d06b18c2e3710fc08e579ddb3d0e39aa663264a0f7404f0743cb4cdb58d"
echo ""
echo " - Install package with arguments"
echo " \$ bitnami-pkg install mariadb-10.1.11-0 -- --password bitnami"
echo ""
echo " - Install package from testing"
echo " \$ bitnami-pkg install mariadb-10.1.11-0 --bucket testing"
echo ""
}
# break up command line for easy parsing and check legal options
ARGS=$(busybox getopt -o b:c:h -l "bucket:,checksum:,help" -n "bitnami-pkg" -- "$@")
if [ $? -ne 0 ];
then
exit 1
fi
eval set -- "$ARGS";
while true; do
case "$1" in
-b|--bucket)
shift
if [ -n "$1" ]; then
RELEASE_BUCKET=$1
shift
fi
;;
-c|--checksum)
shift
if [ -n "$1" ]; then
PACKAGE_SHA256=$1
shift
fi
;;
-h|--help)
print_usage
exit 0
;;
--)
shift
break
;;
esac
done
# weed out unrecognized commands
case "$1" in
install|unpack)
;;
*)
echo "ERROR: Unrecognized command: $1"
echo ""
print_usage
exit 1
;;
esac
# install/unpack command need to be supplied a package name
if [ $# -lt 2 ]; then
print_usage
exit 1
fi
INSTALL_ROOT=/tmp/bitnami/pkg/install
CACHE_ROOT=/tmp/bitnami/pkg/cache
PACKAGE="$2-linux-x64"
PACKAGE_ARGS=${@:3}
PACKAGE_NAME=$(echo $PACKAGE | sed 's/-[0-9].*//')
RELEASE_BUCKET=${RELEASE_BUCKET:-stacksmith}
mkdir -p $INSTALL_ROOT
cd $INSTALL_ROOT
echo "===> Downloading $PACKAGE package"
if [ -f $CACHE_ROOT/$PACKAGE.tar.gz ]; then
echo "===> $CACHE_ROOT/$PACKAGE_NAME.tar.gz already exists, skipping download."
cp $CACHE_ROOT/$PACKAGE.tar.gz .
else
# display cURL progress bar when a tty is attached
if tty -s; then
CURL_ARGS="-#"
else
CURL_ARGS="-sS"
fi
curl $CURL_ARGS -LO https://downloads.bitnami.com/files/$RELEASE_BUCKET/$PACKAGE.tar.gz
fi
if [ "$PACKAGE_SHA256" ]; then
echo "===> Verifying package integrity"
echo "$PACKAGE_SHA256 $PACKAGE.tar.gz" | sha256sum -c -
fi
tar xzf $PACKAGE.tar.gz
case "$1" in
install) echo "===> Installing $PACKAGE" ;;
unpack) echo "===> Unpacking $PACKAGE" ;;
esac
nami $1 $PACKAGE $PACKAGE_ARGS
rm -rf $INSTALL_ROOT
Executable
+8
View File
@@ -0,0 +1,8 @@
#!/bin/bash
set -eu
IMAGE_ID=$1
docker run --rm "$IMAGE_ID" nami --version
docker run --rm "$IMAGE_ID" bash -c "bitnami-pkg install memcached-1.4.25-2 --checksum b664b38a29a3e69f9ef61599aff647a868e00e8da8baccc976def58b2cd16b4e && [ -x /opt/bitnami/memcached/bin/memcached ]"
Executable
+15
View File
@@ -0,0 +1,15 @@
#!/bin/bash
DISTS="jessie
unstable
"
BASENAME=jamesw/minideb
NAMINAME=jamesw/mininami
for DIST in $DISTS; do
docker push $BASENAME:$DIST
docker push $NAMINAME:$DIST
done
docker push $BASENAME:latest
docker push $NAMINAME:latest
Executable
+11
View File
@@ -0,0 +1,11 @@
#!/bin/bash
set -eu
IMAGE_ID=$1
docker run --rm "$IMAGE_ID" dpkg -l apt
docker run --rm -e DEBIAN_FRONTEND=noninteractive "$IMAGE_ID" bash -c 'apt-get -q update && apt-get -q -y install less && less --help >/dev/null'
docker run --rm -e DEBIAN_FRONTEND=noninteractive "$IMAGE_ID" bash -c 'install_packages -q less && less --help >/dev/null && [ ! -e /var/cache/apt/archives ] && [ ! -e /var/lib/apt/lists ]'
docker run --rm -e DEBIAN_FRONTEND=noninteractive "$IMAGE_ID" bash -c '[ ! -e /debootstrap ]'