How to setup a Alpine Linux mirror: Difference between revisions

From Alpine Linux
(Add some useful rsync options and remove redundant ones)
m (added darkhttpd configuration)
Line 49: Line 49:


== Setting up HTTP access via lighttpd ==
== Setting up HTTP access via lighttpd ==
{{Note|You may wish to consider [[Darkhttpd]] as an alternative to [[Lighttpd]]}}


Install the lighttpd server
Install the lighttpd server
Line 68: Line 67:
{{Cmd|rc-service lighttpd start
{{Cmd|rc-service lighttpd start
rc-update add lighttpd}}
rc-update add lighttpd}}
{{Note|You may wish to consider [[Darkhttpd]] as an alternative to [[Lighttpd]]
If so, simply install, start and auto-start the webserver:
{{Cmd|apk add darkhttpd && rc-service darkhttpd start && rc-update add darkhttpd}}
Darkhttpd will, by default, offer directory listings and serve data from /var/www/localhost/htdocs/
See the main article on [[Darkhttpd]] for more configuration options}}


== Setting up rsyncd ==
== Setting up rsyncd ==

Revision as of 11:15, 7 June 2016

This document describes how to set up an Alpine Linux mirror and make it available via http and rsync.

We will:

  • create the dir where we have the mirror
  • set up a cron job to sync with master mirror every hour
  • set up lighttpd for http access
  • set up rsync so other mirrors can rsync from you

Make sure that you have enough disk space; each v3.x branch has around 20 GiB.

Setting up the cron job

Install rsync which will be used to sync from the master mirror.

apk add rsync

Save the following file as /etc/periodic/hourly/alpine-mirror

#!/bin/sh

# make sure we never run 2 rsync at the same time
lockfile="/tmp/alpine-mirror.lock"
if [ -z "$flock" ] ; then
  exec env flock=1 flock -n $lockfile "$0" "$@"
fi

src=rsync://rsync.alpinelinux.org/alpine/ 
dest=/var/www/localhost/htdocs/alpine/

# uncomment this to exclude old v2.x branches
#exclude="--exclude v2.*"

mkdir -p "$dest"
/usr/bin/rsync \
        --archive \
        --update \
        --hard-links \
        --delete \
        --delete-after \
        --delay-updates \
        --timeout=600 \
        $exclude \
        "$src" "$dest"

Make it executable:

chmod +x /etc/periodic/hourly/alpine-mirror

Now it will sync every hour. (given cron runs)

Setting up HTTP access via lighttpd

Install the lighttpd server

apk add lighttpd

Enable dir listings by uncommenting the following line in /etc/lighttpd/lighttpd.conf:

dir-listing.activate      = "enable"

Also set cache-control to force cache revalidate every 30 mins. Uncomment mod_setenv in /etc/lighttpd/lighttpd.conf:

"mod_setenv",

Add also the following lines to /etc/lighttpd/lighttpd.conf:

setenv.add-response-header += (           
        "Cache-Control" => "must-revalidate"
)

Start lighttpd and make it start at boot:

rc-service lighttpd start rc-update add lighttpd

Note: You may wish to consider Darkhttpd as an alternative to Lighttpd

If so, simply install, start and auto-start the webserver:

apk add darkhttpd && rc-service darkhttpd start && rc-update add darkhttpd

Darkhttpd will, by default, offer directory listings and serve data from /var/www/localhost/htdocs/

See the main article on Darkhttpd for more configuration options

Setting up rsyncd

Add the following lines to /etc/rsyncd.conf:

[alpine]
        path = /var/www/localhost/htdocs/alpine
        comment = My Alpine Linux Mirror

Optionally set a bandwidth limit in /etc/conf.d/rsyncd. In this example we limit to 500Kbytes/s (approx 5Mbit/s)

RSYNC_OPTS="--bwlimit=500"


Reference: File:Sync.sh