Skip to content

Commit ed6b35c

Browse files
committed
new
0 parents  commit ed6b35c

8 files changed

+224
-0
lines changed

.dockerignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Ignore all
2+
*

.gitignore

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Ignore all
2+
*
3+
4+
# Avoid ignoring directory
5+
!*/
6+
7+
# Avoid ignoring some suffix
8+
!*.conf
9+
!*.sh
10+
11+
# Avoid ignoring default file
12+
!.dockerignore
13+
!.gitignore
14+
!Dockerfile
15+
!README.md
16+
!LICENSE
17+
18+
# Ignore some directory
19+
.*/

Dockerfile

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
2+
ARG ALPINE_VERSION=3.5
3+
4+
FROM alpine:$ALPINE_VERSION
5+
6+
LABEL maintainer="binave <[email protected]>"
7+
8+
ARG NETCAT_URL=https://github.com/mfreiholz/iF.SVNAdmin/archive/stable-1.6.2.tar.gz
9+
ARG REPO_MIRRORS_HOST=dl-cdn.alpinelinux.org
10+
11+
ARG SRV_URI_PREFIX=svnadmin
12+
ARG SVN_DATA_DIR=/svn
13+
14+
RUN export SVN_PARENT_PATH=$SVN_DATA_DIR/repositories \
15+
SVN_PASSWORD_FILE=$SVN_DATA_DIR/conf/passwd \
16+
SVN_ACCESS_FILE=$SVN_DATA_DIR/conf/authz; \
17+
sed -i 's@^root::@root:!:@' /etc/shadow; \
18+
sed -i "[email protected]@$REPO_MIRRORS_HOST@g" /etc/apk/repositories; \
19+
apk update --no-cache || exit 1; \
20+
: \
21+
: iF.SVNAdmin \
22+
; \
23+
apk add --no-cache --virtual .download curl tar && \
24+
mkdir -pv /opt/$SRV_URI_PREFIX && cd /opt/$SRV_URI_PREFIX && \
25+
curl $NETCAT_URL | tar -xzf - --strip=1 || exit 1; \
26+
apk del .download && \
27+
awk '!/^[#;]|^$/{if($1 ~ /^\[/){print "\n" $_} else print};END{print "\n"}' data/config.tpl.ini | \
28+
sed "s@^SVNAuthFile=@&$SVN_ACCESS_FILE@; \
29+
s@^SVNParentPath=@&$SVN_PARENT_PATH@; \
30+
s@^SvnExecutable=@&/usr/bin/svn@; \
31+
s@^SvnAdminExecutable=@&/usr/bin/svnadmin@; \
32+
s@^SVNUserFile=@&$SVN_PASSWORD_FILE@" > data/config.ini; \
33+
: \
34+
: Fix: https://github.com/mfreiholz/iF.SVNAdmin/issues/118 \
35+
; \
36+
sed -i ':1;N;$!b1;s@{.*return $check@{\n return version_compare(PHP_VERSION, $minimumVersion)@' \
37+
/opt/$SRV_URI_PREFIX/classes/util/global.func.php || exit 1; \
38+
: \
39+
: install apk \
40+
; \
41+
apk add --no-cache apache2 apache2-utils apache2-webdav mod_dav_svn && \
42+
apk add --no-cache subversion php7 php7-apache2 php7-session php7-json php7-ldap php7-xml || exit 1; \
43+
sed -i -e 's@^;\(extension=.*ldap\)@\1@' /etc/php7/php.ini && \
44+
mkdir -pv /run/apache2/ && cd /run/apache2/ && \
45+
printf "%s\n" \
46+
H4sIAAAAAAAAA+3UW2/TMBQA4D77VxwGYhJSmt4jyKgU1hYmlbZKuvHQTpWbuEtEGgfbCdq0H4/T \
47+
0DCYoE/lIs734vj4+NI6J2vOlVSCpnUZ1o6koVmWtWu1H9tGt2PVmh390Oo0u0W82Wq2OjVoHOtA \
48+
D2VSUQFQE/qP+FXeofF/1NMn5jpKTBkSsv0YRAKMNIdn3tVkNXPc4WSum/m7MjBw5s5qcOGaPk82 \
49+
NlE888N9qud9mLqD1ehiPLTJAgxZDjjn50PP24XhGu7vYUlAS0WUqA2cLm4Ez1J5vUyWycLUzQt4 \
50+
DaLonUL/0Qo28UP+OQHDBZpSP2Svyub704GZU2HG/MYsR1s2ITJPJBM5A8MIKNtyvYax4YIV2yeB \
51+
7hSX+/hXG0YcScUSI+VCQbv3sgHPidiCsQFTZMl+AzNUKg3qaRTYpAz5KgZjMJq6w7fu9HIysMmf \
52+
vuafktk6Z0JGPKkX13qUPQ7Wf6Nda7Z1htXtdNtWUf+9XgPr/3cYcxq850EWMwhovtKVstqWXTOT \
53+
uo6idfWa6/jqa05dcvJgJs1UeHdwbpVVzCZnY+5Tpd87MHWov/suDJwr0J3dsy7GGRUsUTOqwn1k \
54+
rOvxWxSmZaqjF57fpgzeUBn5VWhCtwxOvOoFB5elXEaKi9uTKulSfxhGUcyqwJ3exvF9JmUVdtmn \
55+
LBIMchpHgZHpGeTM3B+///fWNkIIIYQQQgghhBBCCCGEEEIIIYT+D18AH/jsdwAoAAA= \
56+
| base64 -d | tar -xzvf - || exit 1; \
57+
sed -i "s@SVNParentPath@& $SVN_PARENT_PATH@; \
58+
s@AuthUserFile@& $SVN_PASSWORD_FILE@; \
59+
s@AuthzSVNAccessFile@& $SVN_ACCESS_FILE@" subversion.conf && \
60+
mv -v subversion.conf /etc/apache2/conf.d/ && \
61+
sed -i "s@\$SVN_DATA_DIR@$SVN_DATA_DIR@g; \
62+
s@\$SVN_PARENT_PATH@$SVN_PARENT_PATH@; \
63+
s@\$SVN_PASSWORD_FILE@$SVN_PASSWORD_FILE@; \
64+
s@\$SVN_ACCESS_FILE@$SVN_ACCESS_FILE@;" bootstrap.sh && \
65+
chmod +x bootstrap.sh && \
66+
ln -sv /opt/$SRV_URI_PREFIX /var/www/localhost/htdocs/$SRV_URI_PREFIX && \
67+
chown -R apache:apache /opt/$SRV_URI_PREFIX/data; \
68+
: \
69+
: timezone \
70+
; \
71+
apk add --no-cache --virtual .tz tzdata || exit 1; \
72+
cp -fv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime || exit 1; \
73+
echo "Asia/Shanghai" > /etc/timezone && \
74+
apk del .tz
75+
76+
ENV HOME /home
77+
78+
EXPOSE 80 443 3690
79+
80+
VOLUME ["/var/log/apache2"]
81+
82+
ENTRYPOINT ["/run/apache2/bootstrap.sh"]

README.md

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
## iF.SVNAdmin-docker (alpine)
2+
3+
Dockerfile for iF.SVNAdmin, buile on Alpine linux.
4+
5+
import:
6+
* [iF.SVNAdmin](https://github.com/mfreiholz/iF.SVNAdmin)
7+
* [alpine linux](https://alpinelinux.org/)
8+
9+
10+
build
11+
12+
```sh
13+
14+
# auto build
15+
./build.sh
16+
17+
```
18+
19+
run
20+
21+
```sh
22+
docker run --detach \
23+
--name ifsvn \
24+
--restart always \
25+
--publish 80:80 --publish 443:443 --publish 3690:3690 \
26+
--volume /opt/ifsvn:/svn \
27+
binave/svnadmin:1.6.2-alpine3.6.5
28+
29+
```
30+
31+
http://127.0.0.1/svnadmin<br/>
32+
admin<br/>
33+
admin
34+
35+
36+
```sh
37+
svn co http://127.0.0.1/svn
38+
```
39+
40+

bootstrap.sh

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/bin/sh
2+
3+
mkdir -pv $SVN_PARENT_PATH $SVN_DATA_DIR/conf;
4+
touch $SVN_PASSWORD_FILE;
5+
[ -s $SVN_ACCESS_FILE ] || \
6+
printf '[groups]\n\n[/]\n* = r\n\n' > $SVN_ACCESS_FILE;
7+
chown -R apache:apache $SVN_DATA_DIR /var/log/apache2;
8+
9+
svnserve --daemon --foreground --root $SVN_PARENT_PATH --listen-port 3690 &
10+
rm -f /run/apache2/httpd.pid;
11+
apachectl -DFOREGROUND;

build.sh

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#!/bin/bash
2+
3+
_defined() {
4+
while [ "$1" ]; do
5+
eval printf \$$1 >/dev/null 2>&1 || {
6+
printf "[ERROR] variable '$1' not defined\n" >&2;
7+
return 1
8+
}
9+
shift
10+
done
11+
return 0
12+
}
13+
14+
which nc >/dev/null 2>&1 || {
15+
printf "'nc' command not found.\n" >&2;
16+
exit 1
17+
};
18+
19+
cd `dirname $0`;
20+
21+
[ -s "stable-1.6.2.tar.gz" ] || {
22+
curl -LO https://github.com/mfreiholz/iF.SVNAdmin/archive/stable-1.6.2.tar.gz || exit 1
23+
};
24+
25+
__ran_port () {
26+
port=$(($RANDOM % 55535 + 10000));
27+
}
28+
29+
use_ports=$(netstat -apn | awk '$4 ~ /:[1-9]/{gsub(/.*:/, "", $4); if(!m[$4]++)printf ","$4}'),;
30+
__ran_port;
31+
until [ "$use_ports" == "${use_ports/,${port},/}" ]; do
32+
__ran_port
33+
done
34+
35+
assets_url=$(docker network inspect --format '{{(index .IPAM.Config 0).Subnet}}' bridge);
36+
# sed -i "s@curl.*|@curl http://${assets_url%.*}.1:$port |@" Dockerfile;
37+
38+
{
39+
printf "HTTP/1.1 200 OK\n\n";
40+
cat stable-1.6.2.tar.gz
41+
} | ncat -l -p $port &
42+
43+
docker build --tag binave/svnadmin:1.6.2-alpine3.6.5 \
44+
--build-arg ALPINE_VERSION=3.6.5 \
45+
--build-arg REPO_MIRRORS_HOST=mirrors.tuna.tsinghua.edu.cn \
46+
--build-arg NETCAT_URL=http://${assets_url%.*}.1:$port \
47+
.

subversion.conf

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
LoadModule dav_svn_module /usr/lib/apache2/mod_dav_svn.so
2+
LoadModule authz_svn_module /usr/lib/apache2/mod_authz_svn.so
3+
4+
<Location /svn>
5+
DAV svn
6+
SVNParentPath
7+
SVNListParentPath On
8+
AuthType Basic
9+
AuthName "Subversion Repository"
10+
AuthUserFile
11+
AuthzSVNAccessFile
12+
Require valid-user
13+
</Location>

update.sh

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/bin/bash
2+
# commit 'bootstrap.sh' and 'subversion.conf' at Dockerfile
3+
4+
cd `dirname $0`;
5+
6+
sed -i ':1;N;$!b1;s@[0-9A-Za-z/+]\{76\}[[:space:]][^|]\+@'"`
7+
8+
tar -czf - bootstrap.sh subversion.conf | base64 | awk '{print $0 " \\\\\\\\\\\\"}'
9+
10+
`"\n'@' ${0%/*}/Dockerfile

0 commit comments

Comments
 (0)