Compare commits
41 Commits
Author | SHA1 | Date | |
---|---|---|---|
b4c6017871 | |||
6f8da3c8e4 | |||
caece7197d | |||
c549c75107 | |||
bc3736a5a4 | |||
6f8096650c | |||
2e84d93951 | |||
be0d3cb859 | |||
d402abd69b | |||
a2b750a71e | |||
3b4e6fdc38 | |||
587425b1ed | |||
0d8f43c685 | |||
1256279e1c | |||
9217e7367e | |||
0b821850d2 | |||
a18f1b41fa | |||
5fbe1f088a | |||
ca7375fab1 | |||
d261e0763b | |||
d90e22b44f | |||
4ff75ed861 | |||
3e27d9bf26 | |||
866b8f4dfd | |||
7083e9c0f1 | |||
9cbf6878fd | |||
79cef474fd | |||
96f723f82b | |||
4729a2490e | |||
edc907b857 | |||
645a3f9121 | |||
d857782830 | |||
abac966eca | |||
f03fecaa5e | |||
18828fdc8e | |||
d607b6ddc4 | |||
449d0f31a2 | |||
38a1da6c68 | |||
d84229454c | |||
b1e8729290 | |||
79a90753c7 |
18
.drone.yml
Normal file
18
.drone.yml
Normal 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_BRANCH//\//-}-${DRONE_COMMIT_SHA:0:8}
|
||||||
|
- ${DRONE_COMMIT_SHA}
|
||||||
|
- ${DRONE_BRANCH/\//-}
|
||||||
|
- latest
|
34
Dockerfile
34
Dockerfile
@ -1,13 +1,40 @@
|
|||||||
FROM phusion/baseimage:0.9.18
|
FROM phusion/baseimage:0.11
|
||||||
|
|
||||||
VOLUME /var/mirror
|
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,main/debian-installer
|
||||||
|
ENV UBUNTU_MIRROR_UPSTREAM archive.ubuntu.com
|
||||||
|
ENV UBUNTU_MIRROR_UPSTREAM_PATH /ubuntu
|
||||||
|
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
|
ADD ./sources.list /etc/apt/sources.list
|
||||||
RUN echo "#!/bin/sh\nexit 101" > /usr/sbin/policy-rc.d
|
RUN echo "#!/bin/sh\nexit 101" > /usr/sbin/policy-rc.d
|
||||||
# phusion baseimage says i'm not supposed to do this
|
# phusion baseimage says i'm not supposed to do this
|
||||||
# and i don't care:
|
# and i don't care:
|
||||||
RUN apt-get update && apt-get upgrade -y
|
RUN apt-get update && apt-get upgrade -y
|
||||||
RUN apt-get install -y run-one nginx make debmirror
|
RUN apt-get install -y run-one nginx make debmirror xz-utils
|
||||||
|
|
||||||
ADD ./mirror /opt/mirror
|
ADD ./mirror /opt/mirror
|
||||||
ADD ./mirror.run /etc/service/mirror/run
|
ADD ./mirror.run /etc/service/mirror/run
|
||||||
@ -22,6 +49,7 @@ RUN \
|
|||||||
mkdir -p $GNUPGHOME && \
|
mkdir -p $GNUPGHOME && \
|
||||||
chmod go-rwx $GNUPGHOME && \
|
chmod go-rwx $GNUPGHOME && \
|
||||||
gpg --import /usr/share/keyrings/ubuntu-archive-keyring.gpg && \
|
gpg --import /usr/share/keyrings/ubuntu-archive-keyring.gpg && \
|
||||||
cp $GNUPGHOME/pubring.gpg $GNUPGHOME/trustedkeys.gpg
|
cp $GNUPGHOME/pubring.kbx $GNUPGHOME/trustedkeys.kbx
|
||||||
|
|
||||||
|
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
|
@ -1,45 +1,70 @@
|
|||||||
# sneak/ubuntumirror
|
# sneak/ubuntumirror
|
||||||
|
|
||||||
Docker container for syncing trusty and xenial ubuntu LTS mirrors
|
Docker image for syncing ubuntu LTS mirrors to reduce network traffic and
|
||||||
to reduce network traffic and speed up build times.
|
speed up build times.
|
||||||
|
|
||||||
I recommend deploying this with a `--dns 172.17.0.1` in your
|
Then even your builds (where you can't specify links to other containers by
|
||||||
`/etc/default/docker` and dnsmasq bound to 172.17.0.1:53 to rewrite
|
hostname) will go fast.
|
||||||
`archive.ubuntu.com` to `172.17.0.1` (which this image will be listening and
|
|
||||||
serving on).
|
|
||||||
|
|
||||||
Then even your builds (where you can't specify links) will go fast.
|
|
||||||
|
|
||||||
# Levers
|
# Levers
|
||||||
|
|
||||||
* `MIRROR_ARCHITECTURES`
|
## 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`.
|
* default `amd64`.
|
||||||
* You may want `i386,amd64`.
|
* You may want `i386,amd64`.
|
||||||
* `MIRROR_CATEGORIES`
|
* `UBUNTU_MIRROR_CATEGORIES`
|
||||||
* default `main,universe`.
|
* Default `main,universe,restricted,multiverse`. Will use lots of disk.
|
||||||
* You may want `main,universe,restricted,multiverse`. Will use lots of
|
* You may want `main,universe`.
|
||||||
disk.
|
* `UBUNTU_MIRROR_PROJECTS`
|
||||||
* `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`.
|
* default `archive.ubuntu.com`.
|
||||||
* You may want `xx.archive.ubuntu.com` (where `xx` is your country
|
* You may want `xx.archive.ubuntu.com` (where `xx` is your country
|
||||||
code).
|
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)
|
* default `43200` (12h)
|
||||||
* You may want `10800` (3h)
|
* You may want `10800` (3h)
|
||||||
|
|
||||||
# Example dnsmasq setup
|
# Example Startup
|
||||||
|
|
||||||
```
|
```
|
||||||
apt-get update && apt-get -y install dnsmasq
|
docker rm -f local-ubuntu-mirror
|
||||||
cat > /etc/dnsmasq.d/docker <<EOF
|
docker run -d --name local-ubuntu-mirror \
|
||||||
no-resolv
|
-v /storage/mirrors/ubuntu:/var/mirror/ubuntu \
|
||||||
server=8.8.8.8
|
--env MIRROR_UPDATE_INTERVAL_SECONDS=3600 \
|
||||||
server=8.8.4.4
|
--env UBUNTU_MIRROR_ARCHITECTURES=amd64 \
|
||||||
EOF
|
--env UBUNTU_MIRROR_UPSTREAM=us.archive.ubuntu.com \
|
||||||
echo "172.17.0.1 archive.ubuntu.com" >> /etc/hosts
|
--env UBUNTU_MIRROR_PROJECTS=focal,focal-updates,focal-security,focal-backports \
|
||||||
service dnsmasq restart
|
-p 8080:80 \
|
||||||
|
--restart unless-stopped \
|
||||||
|
sneak/ubuntumirror@sha256:7de7cc8245106bb574029a2dedca5aa218af08d802b989cdc7857fb57f876a02
|
||||||
```
|
```
|
||||||
|
|
||||||
Then, just add `--dns 172.17.0.1` to your /etc/default/docker opts
|
# Example CapRover Definition File
|
||||||
and bounce the docker daemon. Future containers will talk to your local
|
|
||||||
mirror.
|
```
|
||||||
|
{
|
||||||
|
"schemaVersion": 2,
|
||||||
|
"imageName": "sneak/ubuntumirror@sha256:7de7cc8245106bb574029a2dedca5aa218af08d802b989cdc7857fb57f876a02"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# Author
|
||||||
|
|
||||||
|
sneak <[sneak@sneak.berlin](mailto:sneak@sneak.berlin)>
|
||||||
|
|
||||||
|
# License
|
||||||
|
|
||||||
|
This software is released into the public domain.
|
||||||
|
|
||||||
|
@ -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
|
|
@ -6,8 +6,8 @@ export HOME=/root
|
|||||||
# cleanup previous runs
|
# cleanup previous runs
|
||||||
rm -rf /var/mirror/ubuntu/.temp
|
rm -rf /var/mirror/ubuntu/.temp
|
||||||
|
|
||||||
while true ; do
|
while sleep 1 ; do
|
||||||
cd /opt/mirror && make
|
cd /opt/mirror && make
|
||||||
|
|
||||||
sleep ${MIRROR_INTERVAL_SECONDS:-43200}
|
sleep ${MIRROR_UPDATE_INTERVAL_SECONDS}
|
||||||
done
|
done
|
||||||
|
45
mirror/syncubuntu.sh
Executable file → Normal file
45
mirror/syncubuntu.sh
Executable file → Normal file
@ -4,25 +4,42 @@ set -x
|
|||||||
THISDIR="$(cd $(dirname "$BASH_SOURCE") && pwd -P)"
|
THISDIR="$(cd $(dirname "$BASH_SOURCE") && pwd -P)"
|
||||||
DST="/var/mirror"
|
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
|
chmod a+r $DST/mirrors.txt
|
||||||
|
|
||||||
mkdir -p "$DST/ubuntu"
|
mkdir -p "$DST/ubuntu"
|
||||||
|
|
||||||
export GNUPGHOME="/etc/debmirror/ubuntu"
|
export GNUPGHOME="/etc/debmirror/ubuntu"
|
||||||
|
|
||||||
debmirror \
|
SOURCEOPT="--nosource"
|
||||||
-a ${MIRROR_ARCHITECTURES:-amd64} \
|
if [[ "$UBUNTU_ENABLE_SOURCE_MIRRORING" != "false" ]]; then
|
||||||
--no-source \
|
SOURCEOPT="--source"
|
||||||
-s ${MIRROR_CATEGORIES:-main,universe} \
|
fi
|
||||||
-h ${UBUNTU_MIRROR_SOURCE:-archive.ubuntu.com} \
|
|
||||||
-d trusty,trusty-updates,trusty-security,trusty-backports \
|
|
||||||
-d xenial,xenial-updates,xenial-security,xenial-backports \
|
|
||||||
--ignore-small-errors \
|
|
||||||
-r /ubuntu \
|
|
||||||
--progress \
|
|
||||||
--method=http \
|
|
||||||
$DST/ubuntu
|
|
||||||
|
|
||||||
|
DONE=0
|
||||||
|
|
||||||
chmod -R a+rX $DST
|
DIDIST="$(
|
||||||
|
echo -n "$UBUNTU_MIRROR_PROJECTS" | tr "," "\n" | grep -v "\-" | tr "\n" ","
|
||||||
|
)"
|
||||||
|
|
||||||
|
while [[ $DONE -eq 0 ]]; do
|
||||||
|
debmirror \
|
||||||
|
-a ${UBUNTU_MIRROR_ARCHITECTURES} \
|
||||||
|
-s ${UBUNTU_MIRROR_CATEGORIES} \
|
||||||
|
-h ${UBUNTU_MIRROR_UPSTREAM} \
|
||||||
|
-d ${UBUNTU_MIRROR_PROJECTS} \
|
||||||
|
$SOURCEOPT \
|
||||||
|
--di-dist="$DIDIST" \
|
||||||
|
--di-arch=arches \
|
||||||
|
--ignore-small-errors \
|
||||||
|
-r "$UBUNTU_MIRROR_UPSTREAM_PATH" \
|
||||||
|
--getcontents \
|
||||||
|
--progress \
|
||||||
|
--method=http \
|
||||||
|
$DST/ubuntu
|
||||||
|
if [[ $? -eq 0 ]]; then
|
||||||
|
DONE=1
|
||||||
|
fi
|
||||||
|
chmod -R a+rX $DST
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
@ -3,11 +3,14 @@ worker_processes auto;
|
|||||||
|
|
||||||
pid /var/run/nginx.pid;
|
pid /var/run/nginx.pid;
|
||||||
|
|
||||||
|
error_log /dev/stdout info;
|
||||||
|
|
||||||
events {
|
events {
|
||||||
worker_connections 1024;
|
worker_connections 1024;
|
||||||
}
|
}
|
||||||
|
|
||||||
http {
|
http {
|
||||||
|
access_log /dev/stdout;
|
||||||
include /etc/nginx/mime.types;
|
include /etc/nginx/mime.types;
|
||||||
default_type application/octet-stream;
|
default_type application/octet-stream;
|
||||||
|
|
||||||
@ -30,12 +33,12 @@ http {
|
|||||||
|
|
||||||
index index.html index.htm;
|
index index.html index.htm;
|
||||||
|
|
||||||
#location /ubuntu/ {
|
location /ubuntu/ {
|
||||||
# # alias, not root!
|
# # alias, not root!
|
||||||
# # trailing slash important!
|
# # trailing slash important!
|
||||||
# alias /var/mirror/ubuntu/;
|
# alias /var/mirror/ubuntu/;
|
||||||
# autoindex on;
|
autoindex on;
|
||||||
#}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
deb mirror://mirrors.ubuntu.com/mirrors.txt trusty main universe
|
deb mirror://mirrors.ubuntu.com/mirrors.txt bionic main universe restricted multiverse
|
||||||
deb mirror://mirrors.ubuntu.com/mirrors.txt trusty-updates main universe
|
deb mirror://mirrors.ubuntu.com/mirrors.txt bionic-updates main universe restricted multiverse
|
||||||
deb mirror://mirrors.ubuntu.com/mirrors.txt trusty-backports main universe
|
deb mirror://mirrors.ubuntu.com/mirrors.txt bionic-security main universe restricted multiverse
|
||||||
deb mirror://mirrors.ubuntu.com/mirrors.txt trusty-security main universe
|
deb mirror://mirrors.ubuntu.com/mirrors.txt bionic-backports main universe restricted multiverse
|
||||||
|
Loading…
Reference in New Issue
Block a user