Compare commits

...

17 Commits

Author SHA1 Message Date
Jeffrey Paul 5fbe1f088a Merge branch 'sneak/prepfocal' of git.eeqj.de:sneak/docker-ubuntumirror into sneak/prepfocal
continuous-integration/drone/push Build is passing Details
2020-02-15 10:37:32 -08:00
Jeffrey Paul ca7375fab1 update sources.list 2020-02-15 10:37:17 -08:00
Jeffrey Paul d261e0763b Update '.drone.yml'
continuous-integration/drone/push Build was killed Details
2020-02-15 18:33:53 +00:00
Jeffrey Paul d90e22b44f update readme, fix some bugs
continuous-integration/drone/push Build is passing Details
2020-02-15 10:29:22 -08:00
Jeffrey Paul 4ff75ed861 update readme, fix bugs
continuous-integration/drone/push Build is failing Details
2020-02-15 10:21:00 -08:00
Jeffrey Paul 3e27d9bf26 move startup script
continuous-integration/drone/push Build is failing Details
2020-02-15 10:14:26 -08:00
Jeffrey Paul 866b8f4dfd update exmaple startup file 2020-02-15 10:14:11 -08:00
Jeffrey Paul 7083e9c0f1 update for focal, also to support source mirror 2020-02-15 09:55:25 -08:00
Jeffrey Paul 9cbf6878fd Update 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2020-02-15 17:45:58 +00:00
Jeffrey Paul 79cef474fd Update 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2020-02-15 17:44:46 +00:00
Jeffrey Paul 96f723f82b Update 'Dockerfile'
continuous-integration/drone/push Build is passing Details
2020-02-15 17:44:17 +00:00
Jeffrey Paul 4729a2490e Update '.drone.yml'
continuous-integration/drone/push Build is passing Details
2020-02-15 17:39:38 +00:00
Jeffrey Paul edc907b857 make mirror directory a docker volume
continuous-integration/drone/push Build is failing Details
2020-02-08 05:30:08 -08:00
Jeffrey Paul 645a3f9121 prepping for release in caprover
continuous-integration/drone/push Build is failing Details
2020-02-08 05:29:08 -08:00
Jeffrey Paul d857782830 Update '.drone.yml'
continuous-integration/drone/push Build is failing Details
2020-02-08 05:13:06 +00:00
Jeffrey Paul abac966eca Add '.drone.yml' 2020-02-08 05:01:23 +00:00
Jeffrey Paul f03fecaa5e
add local mirror startup script 2019-03-20 17:39:38 -07:00
7 changed files with 105 additions and 48 deletions

18
.drone.yml Normal file
View File

@ -0,0 +1,18 @@
kind: pipeline
name: default
steps:
- name: docker
image: plugins/docker
network_mode: bridge
settings:
repo: sneak/ubuntumirror
username:
from_secret: docker_username
password:
from_secret: docker_password
tags:
- ${DRONE_COMMIT_SHA}
- ${DRONE_BRANCH/\//-}

View File

@ -2,6 +2,32 @@ FROM phusion/baseimage:0.11
VOLUME /var/mirror
ENV MIRROR_UPDATE_INTERVAL_SECONDS 43200
ENV UBUNTU_MIRROR_ARCHITECTURES amd64
# set to anything but 'false' to mirror source code as well
ENV UBUNTU_ENABLE_SOURCE_MIRRORING false
ENV UBUNTU_MIRROR_CATEGORIES main,universe,restricted,multiverse
ENV UBUNTU_MIRROR_UPSTREAM archive.ubuntu.com
ENV UBUNTU_MIRROR_PROJECTS bionic,bionic-updates,bionic-security,bionic-backports,focal,focal-updates,focal-security,focal-backports
# The following is the URL populated in /mirrors.txt as used by mirror://
# protocol scheme in sources.list
# the idea is that you can DNS rewrite 'mirrors.ubuntu.com' to this mirror
# and it will return a "list" of mirrors that includes only itself.
# then you can safely use something like the following in your sources.list
# and it will work with max speed on your own dns-rewritten lan and in the
# unmodified datacenter talking to the real mirrors.ubuntu.com:
#
# MURM="main universe restricted multiverse"
# C="$(lsb_release -cs)"
# M="mirror://mirrors.ubuntu.com/mirrors.txt"
# echo "deb $M $C $MURM" > /etc/apt/sources.list.new
# echo "deb $M $C-updates $MURM" >> /etc/apt/sources.list.new
# echo "deb $M $C-backports $MURM" >> /etc/apt/sources.list.new
# echo "deb $M $C-security $MURM" >> /etc/apt/sources.list.new
# mv /etc/apt/sources.list.new /etc/apt/sources.list
ENV THIS_MIRROR_URL http://172.17.0.1/ubuntu/
ADD ./sources.list /etc/apt/sources.list
RUN echo "#!/bin/sh\nexit 101" > /usr/sbin/policy-rc.d
# phusion baseimage says i'm not supposed to do this
@ -24,4 +50,5 @@ RUN \
gpg --import /usr/share/keyrings/ubuntu-archive-keyring.gpg && \
cp $GNUPGHOME/pubring.kbx $GNUPGHOME/trustedkeys.kbx
EXPOSE 80

View File

@ -1,36 +1,61 @@
# sneak/ubuntumirror
Docker container for syncing bionic ubuntu LTS mirrors
to reduce network traffic and speed up build times.
Docker image for syncing ubuntu LTS mirrors to reduce network traffic and
speed up build times.
Then even your builds (where you can't specify links) will go fast.
Then even your builds (where you can't specify links to other containers by
hostname) will go fast.
# Levers
* `MIRROR_ARCHITECTURES`
* default `amd64`.
## Paths
The mirror stores all the data in a docker volume at path
`/var/mirror/ubuntu`. Map that somewhere else if you like.
## Environment Variables
* `UBUNTU_MIRROR_ARCHITECTURES`
* default `amd64`.
* You may want `i386,amd64`.
* `MIRROR_CATEGORIES`
* default `main,universe`.
* You may want `main,universe,restricted,multiverse`. Will use lots of
disk.
* `UBUNTU_MIRROR_CATEGORIES`
* Default `main,universe,restricted,multiverse`. Will use lots of disk.
* You may want `main,universe`.
* `UBUNTU_MIRROR_PROJECTS`
* default `xenial,xenial-updates,xenial-security,xenial-backports,bionic,bionic-updates,bionic-security,bionic-backports`.
* `UBUNTU_MIRROR_SOURCE`
* Default
`bionic,bionic-updates,bionic-security,bionic-backports,focal,focal-updates,focal-security,focal-backports`.
* You may want only `focal,focal-updates,focal-security,focal-backports`.
* `UBUNTU_MIRROR_UPSTREAM` - upstream server to mirror from
* default `archive.ubuntu.com`.
* You may want `xx.archive.ubuntu.com` (where `xx` is your country
code).
* `MIRROR_INTERVAL_SECONDS` - mirror sync interval
* `UBUNTU_ENABLE_SOURCE_MIRRORING` - do we want to mirror all the source code too?
* Default ``
* You may want `1` if you want to use up even more disk for your mirror
* `MIRROR_UPDATE_INTERVAL_SECONDS` - mirror update interval
* default `43200` (12h)
* You may want `10800` (3h)
# Example dnsmasq setup
# Example Startup
```
apt update && apt -y install dnsmasq
echo address=/mirrors.ubuntu.com/172.17.0.1 > /etc/dnsmasq.d/ubuntu-mirror-local
docker rm -f local-ubuntu-mirror
docker run -d --name local-ubuntu-mirror \
-v /storage/mirrors/ubuntu:/var/mirror/ubuntu \
--env MIRROR_UPDATE_INTERVAL_SECONDS=3600 \
--env UBUNTU_MIRROR_ARCHITECTURES=amd64 \
--env UBUNTU_MIRROR_UPSTREAM=us.archive.ubuntu.com \
--env UBUNTU_MIRROR_PROJECTS=focal,focal-updates,focal-security,focal-backports \
-p 8080:80 \
--restart unless-stopped \
sneak/ubuntumirror:latest
```
Then, just add `--dns 172.17.0.1` to your /etc/default/docker opts
and bounce the docker daemon. Future containers will talk to your local
mirror.
# Example CapRover Definition File
```
{
"schemaVersion": 2,
"imageName": "sneak/ubuntumirror:latest"
}
```

View File

@ -1,15 +0,0 @@
version: '2.0'
services:
mirror:
hostname: mirror
image: sneak/ubuntumirror
build: .
network_mode: bridge
volumes:
- "/mnt/scratch/mirror:/var/mirror"
ports:
- "172.17.0.1:80:80"
environment:
- UBUNTU_MIRROR_SOURCE=de.archive.ubuntu.com
- MIRROR_CATEGORIES=main,universe,restricted

View File

@ -6,8 +6,8 @@ export HOME=/root
# cleanup previous runs
rm -rf /var/mirror/ubuntu/.temp
while true ; do
while sleep 1 ; do
cd /opt/mirror && make
sleep ${MIRROR_INTERVAL_SECONDS:-43200}
sleep ${MIRROR_INTERVAL_SECONDS}
done

View File

@ -4,19 +4,24 @@ set -x
THISDIR="$(cd $(dirname "$BASH_SOURCE") && pwd -P)"
DST="/var/mirror"
echo "http://172.17.0.1/ubuntu/" > $DST/mirrors.txt
echo "$THIS_MIRROR_URL" > $DST/mirrors.txt
chmod a+r $DST/mirrors.txt
mkdir -p "$DST/ubuntu"
export GNUPGHOME="/etc/debmirror/ubuntu"
SOURCEOPT="--nosource"
if [[ "$UBUNTU_ENABLE_SOURCE_MIRRORING" != "false" ]]; then
SOURCEOPT="--source"
fi
debmirror \
-a ${MIRROR_ARCHITECTURES:-amd64} \
--no-source \
-s ${MIRROR_CATEGORIES:-main,universe} \
-h ${UBUNTU_MIRROR_SOURCE:-archive.ubuntu.com} \
-d ${UBUNTU_MIRROR_PROJECTS:-bionic,bionic-updates,bionic-security,bionic-backports} \
-a ${UBUNTU_MIRROR_ARCHITECTURES} \
-s ${UBUNTU_MIRROR_CATEGORIES} \
-h ${UBUNTU_MIRROR_UPSTREAM} \
-d ${UBUNTU_MIRROR_PROJECTS} \
$SOURCEOPT \
--ignore-small-errors \
-r /ubuntu \
--getcontents \

View File

@ -1,7 +1,4 @@
# this can't be {us.,}archive.ubuntu.org because on the box
# with dnsmasq changing that host to itself, rebuilding this fails
# unless the container is running already
deb http://mirrors.sonic.net/ubuntu bionic main universe
deb http://mirrors.sonic.net/ubuntu bionic-updates main universe
deb http://mirrors.sonic.net/ubuntu bionic-backports main universe
deb http://mirrors.sonic.net/ubuntu bionic-security main universe
deb mirror://mirrors.ubuntu.com/mirrors.txt bionic main universe restricted multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt bionic-updates main universe restricted multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt bionic-security main universe restricted multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt bionic-backports main universe restricted multiverse