Import dockerfiles from my dotfiles

This commit is contained in:
Sam Dodrill 2015-02-03 21:17:12 -08:00
parent 04e9a9c7e9
commit 10e565559b
54 changed files with 1686 additions and 0 deletions

3
cling/Dockerfile Normal file
View File

@ -0,0 +1,3 @@
FROM xena/base
ADD https://ecsft.cern.ch/dist/cling/current/cling-Ubuntu-14.04-64bit-2dc1fdc217.tar.bz2 /opt/cling

50
dev-vm/Dockerfile Normal file
View File

@ -0,0 +1,50 @@
FROM flitter/init:latest
USER root
# Package installs
RUN apt-get update && \
apt-get upgrade -qy && \
apt-get install -qy zsh git python wget build-essential libssl-dev vim tmux dtach dvtm cmake python-dev golang mercurial bzr
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Make user account
RUN useradd --create-home xena && \
echo 'root:screencast' | chpasswd && \
echo 'xena:user' | chpasswd
ENV HOME /home/xena
ENV DOCKER YES
ENV LANGUAGE en_US
ENV LC_ALL en_US.UTF-8
ENV LANG en_us.utf-8
ENV LC_CTYPE en_US.UTF-8
ENV GOPATH /home/xena/go
ENV PATH /usr/local/go/bin:$PATH
# To use Docker please pass the docker socket as a bind mount
RUN wget https://get.docker.com/builds/Linux/x86_64/docker-latest -O /usr/local/bin/docker && \
chmod 555 /usr/local/bin/docker
USER xena
WORKDIR /home/xena
# Dotfiles
RUN mkdir code
RUN git clone https://github.com/Xe/dotfiles code/dotfiles
ADD setup.sh /home/xena/
RUN bash setup.sh
RUN vim +GoInstallBinaries +qall
USER root
RUN chsh xena -s /bin/zsh
EXPOSE 22
CMD ["/sbin/my_init", "setuser", "xena", "/bin/zsh"]

44
dev-vm/setup.sh Executable file
View File

@ -0,0 +1,44 @@
#!/bin/bash -x
# Install oh my zsh
wget --no-check-certificate https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | bash
function setlink
{
ln -s $HOME/code/dotfiles/$1 $HOME/$1
}
rm ~/.zshrc
#set links
setlink .profile
setlink .zshrc
setlink .zsh
setlink .vim
setlink .vimrc
setlink .cheat
setlink .gitconfig
setlink .tmux.conf
# Setup vundle
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
head -n 40 ~/.vimrc >> ~/.vimrc-temp
vim -u ~/.vimrc-temp +PluginInstall +qall
rm ~/.vimrc-temp
(cd ~/.vim/bundle/YouCompleteMe; ./install.sh --clang-completer)
(cd ~/.vim/bundle/vimproc.vim; make)
vim +GoInstallBinaries
# Golang stuff
(mkdir -p ~/go/{pkg,bin,src})
go get github.com/mattn/todo
echo "Set up!"
rm $0

16
firefox/Dockerfile Normal file
View File

@ -0,0 +1,16 @@
FROM ubuntu:14.04
RUN apt-get update && apt-get install -y firefox
# Replace 1000 with your user / group id
RUN export uid=1000 gid=1000 && \
mkdir -p /home/developer && \
echo "developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash" >> /etc/passwd && \
echo "developer:x:${uid}:" >> /etc/group && \
echo "developer ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/developer && \
chmod 0440 /etc/sudoers.d/developer && \
chown ${uid}:${gid} -R /home/developer
USER developer
ENV HOME /home/developer
CMD /usr/bin/firefox

3
firefox/run.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v /home/xena/Downloads:/home/developer/Downloads -v /home/xena/.mozilla:/home/developer/.mozilla xena/firefox

6
fleetbuilder/Dockerfile Normal file
View File

@ -0,0 +1,6 @@
FROM deis/go
RUN mkdir /tmp/build && \
mkdir -p /go/src/github.com/coreos && cd /go/src/github.com/coreos && \
git clone http://github.com/coreos/fleet && cd fleet && \
./build && cp bin/* /tmp/build

View File

3
haskell/Dockerfile Normal file
View File

@ -0,0 +1,3 @@
FROM xena/base
RUN apt-get update && apt-get install haskell-platform -y

16
hexchat/Dockerfile Normal file
View File

@ -0,0 +1,16 @@
FROM ubuntu:14.04
RUN apt-get update && apt-get install -y hexchat ca-certificates
# Replace 1000 with your user / group id
RUN export uid=1000 gid=1000 && \
mkdir -p /home/xena && \
echo "xena:x:${uid}:${gid}:Developer,,,:/home/xena:/bin/bash" >> /etc/passwd && \
echo "xena:x:${uid}:" >> /etc/group && \
echo "xena ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/xena && \
chmod 0440 /etc/sudoers.d/xena && \
chown ${uid}:${gid} -R /home/xena
USER xena
ENV HOME /home/xena
CMD /usr/bin/hexchat

4
hexchat/run.sh Executable file
View File

@ -0,0 +1,4 @@
#!/bin/sh
docker run -dit -v /home/xena --name hexchat-data xena/hexchat /bin/bash
docker run -ti -d --name hexchat -e DISPLAY=$DISPLAY --volumes-from hexchat-data -v /tmp/.X11-unix:/tmp/.X11-unix xena/hexchat

32
hosted-znc/Dockerfile Normal file
View File

@ -0,0 +1,32 @@
FROM ubuntu:14.04
RUN apt-get update # ba393330-1508-11e4-8c21-0800200c9a66
RUN apt-get -qqy upgrade # c4da4cc0-1508-11e4-8c21-0800200c9a66
RUN apt-get build-dep -qqy znc-python # 3e582310-1509-11e4-8c21-0800200c9a66
RUN apt-get install -qqy wget # 0501f510-150d-11e4-8c21-0800200c9a66
RUN apt-get install -qqy libssl-dev # 4b7d79b0-150d-11e4-8c21-0800200c9a66
RUN apt-get install -qqy git automake autoconf # 3bc47ee0-1514-11e4-8c21-0800200c9a66
RUN adduser znc --disabled-password
RUN cd /home/znc; mkdir src; cd src; git clone https://github.com/znc/znc; cd znc; bash ./autogen.sh ; bash ./configure --enable-openssl --prefix=/home/znc/znc --enable-python; make; make install # 79751510-150a-11e4-8c21-0800200c9a66
ADD znc.conf /home/znc/.znc/configs/znc.conf
ADD athemesasl.py /home/znc/znc/lib/znc/
ADD athemeauth.py /home/znc/znc/lib/znc/
RUN chmod -R 777 /home/znc
USER znc
EXPOSE 6667
EXPOSE 6697
EXPOSE 8080
ENV HOME /home/znc
RUN /home/znc/znc/bin/znc -p
CMD /home/znc/znc/bin/znc -f

103
hosted-znc/athemeauth.py Normal file
View File

@ -0,0 +1,103 @@
from xmlrpc.client import ServerProxy, Fault
import znc
class Atheme:
def __init__(self, url):
self.url = url
self.proxy = ServerProxy(url)
self.cookie = "*"
self.username = "*"
self._privset = None
def login(self, username, password):
self.username = username
self.cookie = self.proxy.atheme.login(username, password)
self.privs()
def privs(self):
if self._privset is not None:
return self._privset
self._privset = self.proxy.atheme.privset(self.cookie, self.username).split()
return self._privset
class athemeauth(znc.Module):
module_types = [znc.CModInfo.GlobalModule]
def __init__(self):
pass
def OnLoginAttempt(self, auth):
username = auth.GetUsername()
password = auth.GetPassword()
atheme = Atheme("http://173.10.70.249:8069/xmlrpc")
user = znc.CZNC.Get().FindUser(username)
if user != None:
if user.GetPass() != "::":
#Allow normal ZNC accounts to log in
return znc.CONTINUE
try:
atheme.login(username, password)
except Fault:
return znc.CONTINUE
if user == None:
myuser = znc.CUser(username)
auth.GetSocket().Write(":bnc.yolo-swag.com NOTICE * :*** Creating account for %s...\r\n" % username)
auth.GetSocket().Write(":bnc.yolo-swag.com NOTICE * :*** Thank you for supporting ShadowNET!\r\n")
baseuser = znc.CZNC.Get().FindUser("scrub")
baseuser.thisown = 0
s = znc.String()
s.thisown = 0
if not myuser.Clone(baseuser, s, False):
print("WTF?", s)
return znc.CONTINUE
if not znc.CZNC.Get().AddUser(myuser, s):
print("WTF?", s)
return znc.CONTINUE
user = myuser
user.SetPass("::", znc.CUser.HASH_MD5, "::")
#this is a new user, set up stuff
user.SetNick(username)
user.SetAltNick(username + "`")
user.SetIdent(username[:8])
user.SetRealName("ShadowNET hosted bnc user %s" % username)
user.SetDenySetBindHost(True)
user.SetQuitMsg("Shutting down!")
user.SetMaxNetworks(1)
user.SetAdmin(False)
#They are going to want a network to talk on.
user.AddNetwork("ShadowNET", s)
network = user.FindNetwork("ShadowNET")
network.AddServer("cyka.yolo-swag.com +6697")
network.AddChan("#lobby", True)
network.AddChan("#bnc", True)
network.JoinChans()
fout = open("/tmp/znc-cookie-%s" % username, "w")
fout.write(atheme.cookie)
fout.close()
znc.CZNC.Get().WriteConfig()
auth.GetSocket().Write(":bnc.yolo-swag.com NOTICE * :*** Welcome to the ShadowNET BNC %s!\r\n" % username)
auth.GetSocket().Write(":bnc.yolo-swag.com NOTICE * :*** Your IP address is %s and may be checked for proxies.\r\n" % auth.GetRemoteIP())
auth.AcceptLogin(user)
user.thisown = 0
return znc.HALT

31
hosted-znc/athemesasl.py Normal file
View File

@ -0,0 +1,31 @@
import base64
import znc
class athemesasl(znc.Module):
module_types = [znc.CModInfo.UserModule]
def __init__(self):
self.description = "Atheme SASL"
def OnServerCapAvailable(self, scap):
self.cookie = self.getCookie()
self.username = self.GetUser().GetUserName()
return scap == "sasl"
def OnServerCapResult(self, scap, success):
if scap == "sasl":
if success:
self.PutIRC("AUTHENTICATE AUTHCOOKIE")
self.PutIRC("AUTHENTICATE " +
self.makeSaslAuthString(self.username, self.cookie))
self.PutUser(":bnc.yolo-swag.com NOTICE * :*** Authenticated over Atheme XMLRPC")
def makeSaslAuthString(self, username, cookie):
return (base64.b64encode(bytes("%s\0%s\0%s" %
(username, username, cookie), "utf-8"))).decode("utf-8")
def getCookie(self):
with open("/tmp/znc-cookie-%s" %
self.GetUser().GetUserName(), "r") as fin:
return fin.readline()

116
hosted-znc/znc.conf Normal file
View File

@ -0,0 +1,116 @@
// WARNING
//
// Do NOT edit this file while ZNC is running!
// Use webadmin or *controlpanel instead.
//
// Altering this file by hand will forfeit all support.
//
// But if you feel risky, you might want to read help on /znc saveconfig and /znc rehash.
// Also check http://en.znc.in/wiki/Configuration
AnonIPLimit = 10
ConnectDelay = 5
LoadModule = modpython
LoadModule = webadmin
LoadModule = athemeauth
MaxBufferSize = 500
ProtectWebSessions = true
ServerThrottle = 5
Skin = _default_
StatusPrefix = *
Version = 1.4
<Listener listener0>
AllowIRC = true
AllowWeb = true
IPv4 = true
IPv6 = true
Port = 6697
SSL = true
</Listener>
<Listener listener1>
AllowIRC = true
AllowWeb = true
IPv4 = true
IPv6 = true
Port = 6667
SSL = false
</Listener>
<Listener listener2>
AllowIRC = false
AllowWeb = true
IPv4 = true
IPv6 = true
Port = 8080
SSL = false
</Listener>
<User admin>
Admin = true
AltNick = admin_
AppendTimestamp = false
AutoClearChanBuffer = true
Buffer = 50
ChanModes = +stn
DenyLoadMod = false
DenySetBindHost = false
Ident = admin
JoinTries = 10
LoadModule = webadmin
LoadModule = controlpanel
MaxJoins = 0
MaxNetworks = 1
MultiClients = true
Nick = admin
PrependTimestamp = true
QuitMsg = ZNC - http://znc.in
RealName = Got ZNC?
TimestampFormat = [%H:%M:%S]
<Network ShadowNET>
AltNick = admin2
FloodBurst = 4
FloodRate = 1.00
IRCConnectEnabled = true
Nick = admin
RealName = ZNC Admin
Server = cyka.yolo-swag.com +6697
</Network>
<Pass password>
Method = sha256
Hash = e05a4fe1776a4ef8051d627d3bd24520dde448be810506a839502d28c795931d
Salt = ZpDUio3z5aDSk5uw5KUN
</Pass>
</User>
<User scrub>
Admin = false
Allow = *
AltNick = scrub
AppendTimestamp = false
AutoClearChanBuffer = true
Buffer = 50
DenyLoadMod = true
DenySetBindHost = false
Ident = scrub
JoinTries = 0
LoadModule = athemesasl
LoadModule = missingmotd
MaxJoins = 0
MaxNetworks = 0
MultiClients = true
Nick = scrub
PrependTimestamp = false
QuitMsg = ZNC - http://znc.in
RealName = scrub
TimestampFormat = [%H:%M:%S]
<Pass password>
Hash = 1e129e4686588e8cf26006b95cb9cb3c16b38a569c82cfc2cc34d40fb7459392
Method = SHA256
Salt = 8xXjCYN5;)3;l1?jiu25
</Pass>
</User>

13
influxdb/Dockerfile Normal file
View File

@ -0,0 +1,13 @@
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get install busybox
RUN busybox wget http://s3.amazonaws.com/influxdb/influxdb_latest_amd64.deb
RUN sudo dpkg -i influxdb_latest_amd64.deb
RUN rm influxdb_latest_amd64.deb
EXPOSE 8086
EXPOSE 8083
CMD /usr/bin/influxdb -config /opt/influxdb/shared/config.toml

9
ircd-devel/Dockerfile Normal file
View File

@ -0,0 +1,9 @@
FROM ubuntu:14.04
RUN apt-get install build-essential
RUN apt-get install git
RUN apt-get install bison flex
RUN apt-get install checkinstall
CMD ["/bin/bash"]

35
lapis/Dockerfile Normal file
View File

@ -0,0 +1,35 @@
FROM flitter/init
MAINTAINER Xena <xena@yolo-swag.com>
RUN apt-get update && \
apt-get -y install libreadline-dev libncurses5-dev libpcre3-dev libssl-dev perl make curl git-core
# build/install OpenResty
ENV SRC_DIR /opt
ENV OPENRESTY_VERSION 1.7.7.1
ENV OPENRESTY_PREFIX /app/openresty
ENV LAPIS_VERSION 1.0.6
RUN cd $SRC_DIR && curl -LO http://openresty.org/download/ngx_openresty-$OPENRESTY_VERSION.tar.gz \
&& tar xzf ngx_openresty-$OPENRESTY_VERSION.tar.gz && cd ngx_openresty-$OPENRESTY_VERSION \
&& ./configure --prefix=$OPENRESTY_PREFIX \
--with-luajit \
--with-http_realip_module \
&& make && make install && rm -rf ngx_openresty-$OPENRESTY_VERSION*
RUN apt-get -qqy install luarocks
RUN luarocks install moonrocks && \
moonrocks install --server=http://rocks.moonscript.org/manifests/leafo lapis $LAPIS_VERSION && \
moonrocks install moonscript && \
moonrocks install lapis-console && \
moonrocks install yaml
ADD prepare.moon /app/prepare.moon
ADD lapis /etc/service/lapis/run
ENTRYPOINT /sbin/my_init
ONBUILD ADD app.yaml /app/
ONBUILD RUN moon /app/prepare.moon /app/app.yaml
ONBUILD ADD . /app/src
ONBUILD RUN moonc /app/src

7
lapis/lapis Executable file
View File

@ -0,0 +1,7 @@
#!/bin/bash
cd /app/src
export LAPIS_OPENRESTY=/app/openresty/nginx/sbin/nginx
lapis server docker

24
lapis/prepare.moon Normal file
View File

@ -0,0 +1,24 @@
yaml = require "yaml"
manifest_path = ...
error "Missing manifest_path" if not manifest_path
strip = (str) -> str\match "^%s*(.-)%s*$"
read_cmd = (cmd) ->
f = io.popen cmd, "r"
with strip f\read"*a"
f\close!
fin = io.open manifest_path, "r"
app = yaml.load fin\read "*a"
fin\close!
print "installing dependencies for #{app.name}..."
for _, dep in pairs app.dependencies
print "installing dependency #{dep}"
read_cmd "moonrocks install #{dep}"
print "done!"

3
lua/Dockerfile Normal file
View File

@ -0,0 +1,3 @@
FROM xena/alpine
RUN apk update && apk upgrade && apk add lua

View File

@ -0,0 +1,6 @@
FROM xena/alpine:edge
ADD start.sh /
CMD /start.sh

4
minecraft/backup/start.sh Executable file
View File

@ -0,0 +1,4 @@
#!/bin/sh
tar czf "/mnt/host/backup".tgz /minecraft/server/*

View File

@ -0,0 +1,6 @@
FROM xena/alpine:3.0
ADD setup.sh /setup.sh
CMD /setup.sh

View File

@ -0,0 +1,7 @@
#!/bin/sh
adduser minecraft -D
chown -R minecraft /minecraft/server
chmod -R 777 /minecraft/server

12
minecraft/data/Dockerfile Normal file
View File

@ -0,0 +1,12 @@
FROM busybox
VOLUME /minecraft/server
ADD bukkit.yml /minecraft/server/
ADD server.properties /minecraft/server/
ADD start.sh /minecraft/
RUN chmod 777 /minecraft/start.sh
RUN chmod 777 /minecraft/server
CMD /minecraft/start.sh

37
minecraft/data/bukkit.yml Normal file
View File

@ -0,0 +1,37 @@
settings:
allow-end: true
warn-on-overload: true
permissions-file: permissions.yml
update-folder: update
ping-packet-limit: 100
use-exact-login-location: false
plugin-profiling: false
connection-throttle: 4000
query-plugins: true
deprecated-verbose: default
shutdown-message: Server closed
spawn-limits:
monsters: 70
animals: 15
water-animals: 5
ambient: 15
chunk-gc:
period-in-ticks: 600
load-threshold: 0
ticks-per:
animal-spawns: 400
monster-spawns: 1
autosave: 6000
auto-updater:
enabled: false
preferred-channel: beta
host: dl.bukkit.org
suggest-channels: true
aliases: now-in-commands.yml
database:
username: bukkit
isolation: SERIALIZABLE
driver: org.sqlite.JDBC
password: walrus
url: jdbc:sqlite:{DIR}{NAME}.db

View File

@ -0,0 +1,33 @@
generator-settings=
op-permission-level=4
allow-nether=true
level-name=world
enable-query=false
allow-flight=false
announce-player-achievements=true
server-port=25565
level-type=DEFAULT
enable-rcon=false
force-gamemode=false
level-seed=
server-ip=
max-build-height=256
spawn-npcs=true
white-list=false
spawn-animals=true
snooper-enabled=true
hardcore=false
online-mode=true
resource-pack=
pvp=true
difficulty=1
enable-command-block=false
player-idle-timeout=0
gamemode=0
max-players=10
spawn-monsters=true
view-distance=10
generate-structures=true
spawn-protection=16
motd=A Minecraft Server

2
minecraft/data/start.sh Normal file
View File

@ -0,0 +1,2 @@
adduser -D minecraft
chown -R minecraft /minecraft/server

182
minecraft/minecraft.py Executable file
View File

@ -0,0 +1,182 @@
#!/usr/bin/python2
# Copyright (C) 2014 Sam Dodrill <xena@yolo-swag.com> All rights reserved.
#
# This software is provided 'as-is', without any express or implied
# warranty. In no event will the authors be held liable for any damages
# arising from the use of this software.
#
# Permission is granted to anyone to use this software for any purpose,
# including commercial applications, and to alter it and redistribute it
# freely, subject to the following restrictions:
#
# 1. The origin of this software must not be misrepresented; you must not
# claim that you wrote the original software. If you use this software
# in a product, an acknowledgment in the product documentation would be
# appreciated but is not required.
#
# 2. Altered source versions must be plainly marked as such, and must not be
# misrepresented as being the original software.
#
# 3. This notice may not be removed or altered from any source
# distribution.
#
import baker
import docker
import json
import os
import subprocess
import time
client = docker.Client()
@baker.command
def build():
"""
Builds the docker images
"""
client.build(path="server", tag="xena/minecraft:server")
client.build(path="data", tag="xena/minecraft:data")
client.build(path="data-ambassador", tag="xena/minecraft:data-amb")
client.build(path="backup", tag="xena/minecraft:backup")
@baker.command
def establish(prefix):
"""
Establish a server name and setup its data container.
The prefix prefixes the server container names.
"""
spawn_data(prefix)
spawn(prefix)
@baker.command
def spawn(prefix):
"""
Respawn a server with prefix name
"""
server_id = client.create_container("xena/minecraft:server", name="%s-mc-server" % prefix,
ports=["25565"], stdin_open=True, tty=True)
client.start(server_id, publish_all_ports=True, volumes_from="%s-mc-data" % prefix)
print "Server %s started" % prefix
portinfo(prefix)
@baker.command
def spawn_data(prefix):
"""
Spawns the data container for a minecraft server
"""
data_id = client.create_container("xena/minecraft:data", name="%s-mc-data" % prefix,
detach=True)
client.start(data_id)
amb_id = client.create_container("xena/minecraft:data-amb", detach=False)
client.start(amb_id, volumes_from="%s-mc-data" % prefix)
client.wait(amb_id)
client.remove_container(amb_id)
print "Data for %s started and permissions set" % prefix
@baker.command
def addop(prefix, opname):
"""
Arbitrarily add a server operator
"""
subprocess.call(["bash", "scripts/addop.sh", opname, prefix])
print "Op %s on %s added." % (opname, prefix)
@baker.command
def portinfo(prefix):
"""
Gets the local and nonpersistent ip/port numbers for a server at prefix
"""
server_id = "%s-mc-server" % prefix
ip = None
port = None
container = client.inspect_container(server_id)
ip = container["NetworkSettings"]["IPAddress"]
port = container["NetworkSettings"]["Ports"]["25565/tcp"][0]["HostPort"]
print "IP: %s" % ip
print "Port: %s" % port
@baker.command
def logs(prefix):
"""
Get logs for a prefix
"""
subprocess.call(["docker", "logs", "%s-mc-server" % prefix])
@baker.command
def kill(prefix, purge=False):
"""
Kills a minecraft server, optionally purging it
"""
server_id = "%s-mc-server" % prefix
subprocess.call(["bash", "scripts/kill-server.sh", prefix])
client.stop(server_id)
client.remove_container(server_id)
print "stopped %s" % server_id
if purge:
data_id = "%s-mc-data" % prefix
client.stop(data_id)
client.remove_container(data_id)
print "Data for %s removed" % prefix
@baker.command
def backup(prefix, mega=False):
"""
Backup a minecraft server.
"""
subprocess.call(["bash", "scripts/backup.sh", prefix])
name = "%s-%s.tgz" % (prefix, time.time())
os.rename("backup.tgz", name)
print "Backup for %s written to %s." % (prefix, name)
if mega:
from mega import Mega
config = {}
with open(os.getenv("HOME") + "/.config/mineupload/conf.json", "r") as fin:
config = json.loads(fin.read())
username, password = config["u"], config["p"]
print "Logging into mega..."
mega = Mega({"verbose": True})
m = mega.login(username, password)
print "Uploading %s to mega..." % name
fpointer = m.upload(name)
print "URL: %s" % m.get_upload_link(fpointer)
print "Local copy removed"
os.remove(name)
baker.run()

17
minecraft/scripts/addop.sh Executable file
View File

@ -0,0 +1,17 @@
OP="$1"
PREFIX="$2"
if [ "$OP" = "" ]
then
exit -1
fi
if [ "$PREFIX" = "" ]
then
exit -1
fi
echo "Trying to op $OP on $PREFIX"
echo "op $OP" | docker attach "$PREFIX"-mc-server

1
minecraft/scripts/backup.sh Executable file
View File

@ -0,0 +1 @@
docker run --rm -v `pwd`:/mnt/host --volumes-from "$1"-mc-data xena/minecraft:backup

View File

@ -0,0 +1,10 @@
PREFIX="$1"
if [ "$PREFIX" = "" ]
then
exit -1
fi
echo "save-all" | docker attach $PREFIX-mc-server
echo "stop" | docker attach $PREFIX-mc-server

View File

@ -0,0 +1,48 @@
# Copyright (C) 2014 Sam Dodrill <xena@yolo-swag.com> All rights reserved.
#
# This software is provided 'as-is', without any express or implied
# warranty. In no event will the authors be held liable for any damages
# arising from the use of this software.
#
# Permission is granted to anyone to use this software for any purpose,
# including commercial applications, and to alter it and redistribute it
# freely, subject to the following restrictions:
#
# 1. The origin of this software must not be misrepresented; you must not
# claim that you wrote the original software. If you use this software
# in a product, an acknowledgment in the product documentation would be
# appreciated but is not required.
#
# 2. Altered source versions must be plainly marked as such, and must not be
# misrepresented as being the original software.
#
# 3. This notice may not be removed or altered from any source
# distribution.
#
from mega import Mega
import json
import os
import sys
mega = Mega()
if len(sys.argv) > 2:
print "Need file to upload"
sys.exit(-1)
fname = sys.argv[1]
config = {}
with open(os.getenv("HOME") + "/.config/mineupload/conf.json", "r") as fin:
config = json.loads(fin.read())
username, password = config["u"], config["p"]
m = mega.login(username, password)
fpointer = m.upload(fname)
print m.get_upload_link(fpointer)

View File

@ -0,0 +1,27 @@
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get -y upgrade
RUN apt-get -y install openjdk-7-jre-headless
RUN apt-get -y install wget
RUN mkdir -p /minecraft/server
RUN adduser minecraft --home /minecraft/user --disabled-password --gecos "Minecraft daemon"
RUN chmod 777 /minecraft/server
RUN chown minecraft /minecraft/server
RUN wget -O /minecraft/server.jar http://dl.bukkit.org/latest-beta/craftbukkit-beta.jar
EXPOSE 25565
ADD start.sh /minecraft/start.sh
RUN chmod 777 /minecraft/start.sh
USER minecraft
CMD /minecraft/start.sh

View File

@ -0,0 +1,4 @@
cd /minecraft/server
java -jar /minecraft/server.jar

8
moonscript/Dockerfile Normal file
View File

@ -0,0 +1,8 @@
FROM xena/base
RUN apt-get update && apt-get upgrade -y && \
apt-get install --assume-yes liblua5.1-dev lua5.1 luajit luarocks \
build-essential make git mercurial wget curl
RUN luarocks install --server=http://rocks.moonscript.org moonrocks
RUN moonrocks install moonscript

15
niinix/Dockerfile Normal file
View File

@ -0,0 +1,15 @@
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get -qy upgrade
RUN apt-get install -yq cron
# Add init stuff
ADD init/init /init
ADD scripts/rc /etc/rc
# Test app
ADD app /app
ENTRYPOINT /init

14
niinix/Makefile Normal file
View File

@ -0,0 +1,14 @@
all:
@echo "Please choose a make rule"
init:
(cd init && make build)
build:
@make init
docker build -t xena/niinix .
clean:
cd init && make clean
docker rmi xena/niinix

7
niinix/app/bin/boot Executable file
View File

@ -0,0 +1,7 @@
#!/bin/sh
while true ; do
echo "Hello at $(date)"
sleep 5
done

4
niinix/app/bin/entry Executable file
View File

@ -0,0 +1,4 @@
#!/bin/sh
echo "This is the entry script at $(date)"

5
niinix/init/Makefile Normal file
View File

@ -0,0 +1,5 @@
build:
gcc -static -o init ./init.c
clean:
rm init

60
niinix/init/init.c Normal file
View File

@ -0,0 +1,60 @@
// https://gist.github.com/rofl0r/6168719
#define _XOPEN_SOURCE 700
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include <unistd.h>
void properly_clean_up(int signum)
{
printf("init: %s Asked to die, terminating all processes\n", ctime(NULL));
kill(-1, SIGTERM);
pid_t err;
int i;
for (i = 0; i < 10; i++) {
err = waitpid(-1, 0, 0);
if(err == -1) {
sleep(1);
} else {
break;
}
}
printf("init: %s Killing all remaining processes. See you on the other side.\n", ctime(NULL));
kill(-1, SIGKILL);
exit(signum);
}
int main()
{
sigset_t set;
int status;
signal(SIGINT, properly_clean_up);
signal(SIGTERM, properly_clean_up);
if (getpid() != 1) return 1;
sigfillset(&set);
sigprocmask(SIG_BLOCK, &set, 0);
if (fork()) for (;;) wait(&status);
sigprocmask(SIG_UNBLOCK, &set, 0);
setsid();
setpgid(0, 0);
printf("init: %s starting up", ctime(NULL));
return execve("/etc/rc", (char *[]){ "rc", 0 }, (char *[]){ 0 });
}

21
niinix/scripts/rc Executable file
View File

@ -0,0 +1,21 @@
#!/bin/sh
# Start cron
cron -L 7
# Some deis containers need an extra entry step
if [ -x /app/bin/entry ]
then
/app/bin/entry
exitstatus="$?"
if [ "$exitstatus" != "0" ]; then
echo "The entry script failed"
exit $exitstatus
fi
fi
# Start the main container process
/app/bin/boot

3
python-3.4/Dockerfile Normal file
View File

@ -0,0 +1,3 @@
FROM xena/base
RUN apt-get update && apt-get -y install python3.4-dev python3.4

3
qo/Dockerfile Normal file
View File

@ -0,0 +1,3 @@
FROM xena/base
RUN setuser xena go get github.com/andlabs/qo

18
rtorrent/Dockerfile Normal file
View File

@ -0,0 +1,18 @@
FROM xena/alpine:3.0
RUN apk update
RUN apk add rtorrent rsync openssh
RUN adduser torrent -D -s /bin/sh
RUN echo "torrent:torrent" | chpasswd
RUN mkdir /torrents
RUN chown torrent /torrents
RUN chmod 777 /torrents
ADD rtorrent.rc /home/torrent/.rtorrent.rc
USER torrent
VOLUME /torrents

106
rtorrent/rtorrent.rc Normal file
View File

@ -0,0 +1,106 @@
# Maximum and minimum number of peers to connect to per torrent.
min_peers = 40
max_peers = 100
# Same as above but for seeding completed torrents (-1 = same as downloading)
min_peers_seed = 10
max_peers_seed = 50
# Maximum number of simultanious uploads per torrent.
max_uploads = 5
# Global upload and download rate in KiB. "0" for unlimited.
download_rate = 0
upload_rate = 0
# Default directory to save the downloaded torrents.
#directory = ./
directory = /torrents
# Default session directory. Make sure you don't run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
session = /torrents/session
# Watch a directory for new torrents, and stop those that have been
# deleted.
schedule = watch_directory,5,5,load_start=/torrents/seed/*.torrent
schedule = untied_directory,5,5,stop_untied=
# Close torrents when diskspace is low.
schedule = low_diskspace,5,60,close_low_diskspace=100M
# Stop torrents when reaching upload ratio in percent,
# when also reaching total upload in bytes, or when
# reaching final upload ratio in percent.
# example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
# schedule = ratio,60,60,stop_on_ratio=110,200M,200
# The ip address reported to the tracker.
#ip = 127.0.0.1
#ip = rakshasa.no
# The ip address the listening socket and outgoing connections is
# bound to.
#bind = 127.0.0.1
#bind = rakshasa.no
# Port range to use for listening.
port_range = 6900-6999
# Start opening ports at a random position within the port range.
port_random = yes
# Check hash for finished torrents. Might be usefull until the bug is
# fixed that causes lack of diskspace not to be properly reported.
check_hash = yes
# Set whetever the client should try to connect to UDP trackers.
use_udp_trackers = yes
# Alternative calls to bind and ip that should handle dynamic ip's.
#schedule = ip_tick,0,1800,ip=rakshasa
#schedule = bind_tick,0,1800,bind=rakshasa
# Encryption options, set to none (default) or any combination of the following:
# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
#
# The example value allows incoming encrypted connections, starts unencrypted
# outgoing connections but retries with encryption if they fail, preferring
# plaintext to RC4 encryption after the encrypted handshake
#
encryption = allow_incoming,enable_retry,prefer_plaintext
#
# Do not modify the following parameters unless you know what you're doing.
#
# Hash read-ahead controls how many MB to request the kernel to read
# ahead. If the value is too low the disk may not be fully utilized,
# while if too high the kernel might not be able to keep the read
# pages in memory thus end up trashing.
#hash_read_ahead = 10
# Interval between attempts to check the hash, in milliseconds.
#hash_interval = 100
# Number of attempts to check the hash while using the mincore status,
# before forcing. Overworked systems might need lower values to get a
# decent hash checking rate.
#hash_max_tries = 10
# Max number of files to keep open simultaniously.
#max_open_files = 128
# Number of sockets to simultaneously keep open.
#max_open_sockets = <no default>
# Example of scheduling commands: Switch between two ip's every 5
# seconds.
#schedule = "ip_tick1,5,10,ip=torretta"
#schedule = "ip_tick2,10,10,ip=lampedusa"
# Remove a scheduled event.
#schedule_remove = "ip_tick1"
#transmission-daemon is better for what it is worth

5
rust/Dockerfile Normal file
View File

@ -0,0 +1,5 @@
FROM xena/base
ADD . /var/setup/xena/rust
RUN /var/setup/xena/rust/rustup.sh

461
rust/rustup.sh Executable file
View File

@ -0,0 +1,461 @@
#!/bin/sh
# Copyright 2014 The Rust Project Developers. See the COPYRIGHT
# file at the top-level directory of this distribution and at
# http://rust-lang.org/COPYRIGHT.
#
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
# option. This file may not be copied, modified, or distributed
# except according to those terms.
msg() {
echo "rustup: $1"
}
step_msg() {
msg
msg "$1"
msg
}
warn() {
echo "rustup: WARNING: $1"
}
err() {
echo "rustup: error: $1"
exit 1
}
need_ok() {
if [ $? -ne 0 ]
then
err "$1"
fi
}
putvar() {
local T
eval T=\$$1
eval TLEN=\${#$1}
if [ $TLEN -gt 35 ]
then
printf "rustup: %-20s := %.35s ...\n" $1 "$T"
else
printf "rustup: %-20s := %s %s\n" $1 "$T" "$2"
fi
}
probe() {
local V=$1
shift
local P
local T
for P
do
T=$(which $P 2>&1)
if [ $? -eq 0 ]
then
VER0=$($P --version 2>/dev/null | head -1 \
| sed -e 's/[^0-9]*\([vV]\?[0-9.]\+[^ ]*\).*/\1/' )
if [ $? -eq 0 -a "x${VER0}" != "x" ]
then
VER="($VER0)"
else
VER=""
fi
break
else
VER=""
T=""
fi
done
eval $V=\$T
putvar $V "$VER"
}
probe_need() {
local V=$1
probe $*
eval VV=\$$V
if [ -z "$VV" ]
then
err "needed, but unable to find any of: $*"
fi
}
valopt() {
VAL_OPTIONS="$VAL_OPTIONS $1"
local OP=$1
local DEFAULT=$2
shift
shift
local DOC="$*"
if [ $HELP -eq 0 ]
then
local UOP=$(echo $OP | tr '[:lower:]' '[:upper:]' | tr '\-' '\_')
local V="CFG_${UOP}"
eval $V="$DEFAULT"
for arg in $CFG_ARGS
do
if echo "$arg" | grep -q -- "--$OP="
then
val=$(echo "$arg" | cut -f2 -d=)
eval $V=$val
fi
done
putvar $V
else
if [ -z "$DEFAULT" ]
then
DEFAULT="<none>"
fi
OP="${OP}=[${DEFAULT}]"
printf " --%-30s %s\n" "$OP" "$DOC"
fi
}
opt() {
BOOL_OPTIONS="$BOOL_OPTIONS $1"
local OP=$1
local DEFAULT=$2
shift
shift
local DOC="$*"
local FLAG=""
if [ $DEFAULT -eq 0 ]
then
FLAG="enable"
else
FLAG="disable"
DOC="don't $DOC"
fi
if [ $HELP -eq 0 ]
then
for arg in $CFG_ARGS
do
if [ "$arg" = "--${FLAG}-${OP}" ]
then
OP=$(echo $OP | tr 'a-z-' 'A-Z_')
FLAG=$(echo $FLAG | tr 'a-z' 'A-Z')
local V="CFG_${FLAG}_${OP}"
eval $V=1
putvar $V
fi
done
else
if [ ! -z "$META" ]
then
OP="$OP=<$META>"
fi
printf " --%-30s %s\n" "$FLAG-$OP" "$DOC"
fi
}
flag() {
BOOL_OPTIONS="$BOOL_OPTIONS $1"
local OP=$1
shift
local DOC="$*"
if [ $HELP -eq 0 ]
then
for arg in $CFG_ARGS
do
if [ "$arg" = "--${OP}" ]
then
OP=$(echo $OP | tr 'a-z-' 'A-Z_')
local V="CFG_${OP}"
eval $V=1
putvar $V
fi
done
else
if [ ! -z "$META" ]
then
OP="$OP=<$META>"
fi
printf " --%-30s %s\n" "$OP" "$DOC"
fi
}
validate_opt () {
for arg in $CFG_ARGS
do
isArgValid=0
for option in $BOOL_OPTIONS
do
if test --disable-$option = $arg
then
isArgValid=1
fi
if test --enable-$option = $arg
then
isArgValid=1
fi
if test --$option = $arg
then
isArgValid=1
fi
done
for option in $VAL_OPTIONS
do
if echo "$arg" | grep -q -- "--$option="
then
isArgValid=1
fi
done
if [ "$arg" = "--help" ]
then
echo
echo "No more help available for Configure options,"
echo "check the Wiki or join our IRC channel"
break
else
if test $isArgValid -eq 0
then
err "Option '$arg' is not recognized"
fi
fi
done
}
probe_need CFG_CURL curl
CFG_SRC_DIR="$(cd $(dirname $0) && pwd)/"
CFG_SELF="$0"
CFG_ARGS="$@"
HELP=0
if [ "$1" = "--help" ]
then
HELP=1
shift
echo
echo "Usage: $CFG_SELF [options]"
echo
echo "Options:"
echo
else
step_msg "processing $CFG_SELF args"
fi
OPTIONS=""
BOOL_OPTIONS=""
VAL_OPTIONS=""
flag uninstall "only uninstall from the installation prefix"
valopt prefix "" "set installation prefix"
opt cargo 1 "install cargo with rust"
if [ $HELP -eq 1 ]
then
echo
exit 0
fi
step_msg "validating $CFG_SELF args"
validate_opt
# Platform detection copied from `configure`
CFG_OSTYPE=$(uname -s)
CFG_CPUTYPE=$(uname -m)
if [ $CFG_OSTYPE = Darwin -a $CFG_CPUTYPE = i386 ]
then
# Darwin's `uname -s` lies and always returns i386. We have to use sysctl
# instead.
if sysctl hw.optional.x86_64 | grep -q ': 1'
then
CFG_CPUTYPE=x86_64
fi
fi
# The goal here is to come up with the same triple as LLVM would,
# at least for the subset of platforms we're willing to target.
case $CFG_OSTYPE in
Linux)
CFG_OSTYPE=unknown-linux-gnu
;;
FreeBSD)
CFG_OSTYPE=unknown-freebsd
;;
Darwin)
CFG_OSTYPE=apple-darwin
;;
MINGW32*)
CFG_OSTYPE=pc-mingw32
;;
# Thad's Cygwin identifers below
# Vista 32 bit
CYGWIN_NT-6.0)
CFG_OSTYPE=pc-mingw32
CFG_CPUTYPE=i686
;;
# Vista 64 bit
CYGWIN_NT-6.0-WOW64)
CFG_OSTYPE=w64-mingw32
CFG_CPUTYPE=x86_64
;;
# Win 7 32 bit
CYGWIN_NT-6.1)
CFG_OSTYPE=pc-mingw32
CFG_CPUTYPE=i686
;;
# Win 7 64 bit
CYGWIN_NT-6.1-WOW64)
CFG_OSTYPE=w64-mingw32
CFG_CPUTYPE=x86_64
;;
# We do not detect other OS such as XP/2003 using 64 bit using uname.
# If we want to in the future, we will need to use Cygwin - Chuck's csih helper in /usr/lib/csih/winProductName.exe or alternative.
*)
err "unknown OS type: $CFG_OSTYPE"
;;
esac
case $CFG_CPUTYPE in
xscale | arm)
CFG_CPUTYPE=arm
;;
x86_64 | x86-64 | x64 | amd64)
CFG_CPUTYPE=x86_64
;;
*)
err "unknown CPU type: $CFG_CPUTYPE"
esac
HOST_TRIPLE="${CFG_CPUTYPE}-${CFG_OSTYPE}"
# Is this a triple we have nightlies for?
case $HOST_TRIPLE in
x86_64-unknown-linux-gnu)
;;
i686-unknown-linux-gnu)
;;
x86_64-apple-darwin)
;;
i686-apple-darwin)
;;
*)
err "rustup.sh doesn't work for host $HOST_TRIPLE"
esac
msg "host triple: ${HOST_TRIPLE}"
PACKAGE_NAME=rust-nightly
PACKAGE_NAME_AND_TRIPLE="${PACKAGE_NAME}-${HOST_TRIPLE}"
TARBALL_NAME="${PACKAGE_NAME_AND_TRIPLE}.tar.gz"
REMOTE_TARBALL="https://static.rust-lang.org/dist/${TARBALL_NAME}"
TMP_DIR="./rustup-tmp-install"
LOCAL_TARBALL="${TMP_DIR}/${TARBALL_NAME}"
LOCAL_INSTALL_DIR="${TMP_DIR}/${PACKAGE_NAME_AND_TRIPLE}"
LOCAL_INSTALL_SCRIPT="${LOCAL_INSTALL_DIR}/install.sh"
CARGO_PACKAGE_NAME=cargo-nightly
CARGO_PACKAGE_NAME_AND_TRIPLE="${CARGO_PACKAGE_NAME}-${HOST_TRIPLE}"
CARGO_TARBALL_NAME="${CARGO_PACKAGE_NAME_AND_TRIPLE}.tar.gz"
CARGO_REMOTE_TARBALL="https://static.rust-lang.org/cargo-dist/${CARGO_TARBALL_NAME}"
CARGO_LOCAL_TARBALL="${TMP_DIR}/${CARGO_TARBALL_NAME}"
CARGO_LOCAL_INSTALL_DIR="${TMP_DIR}/${CARGO_PACKAGE_NAME_AND_TRIPLE}"
CARGO_LOCAL_INSTALL_SCRIPT="${CARGO_LOCAL_INSTALL_DIR}/install.sh"
rm -Rf "${TMP_DIR}"
need_ok "failed to remove temporary installation directory"
mkdir -p "${TMP_DIR}"
need_ok "failed to create create temporary installation directory"
msg "downloading rust installer"
"${CFG_CURL}" "${REMOTE_TARBALL}" > "${LOCAL_TARBALL}"
if [ $? -ne 0 ]
then
rm -Rf "${TMP_DIR}"
err "failed to download installer"
fi
if [ -z "${CFG_DISABLE_CARGO}" ]; then
msg "downloading cargo installer"
"${CFG_CURL}" "${CARGO_REMOTE_TARBALL}" > "${CARGO_LOCAL_TARBALL}"
if [ $? -ne 0 ]
then
rm -Rf "${TMP_DIR}"
err "failed to download cargo installer"
fi
fi
(cd "${TMP_DIR}" && tar xzf "${TARBALL_NAME}")
if [ $? -ne 0 ]
then
rm -Rf "${TMP_DIR}"
err "failed to unpack installer"
fi
MAYBE_UNINSTALL=
if [ -n "${CFG_UNINSTALL}" ]
then
MAYBE_UNINSTALL="--uninstall"
fi
MAYBE_PREFIX=
if [ -n "${CFG_PREFIX}" ]
then
MAYBE_PREFIX="--prefix=${CFG_PREFIX}"
fi
sh "${LOCAL_INSTALL_SCRIPT}" "${MAYBE_UNINSTALL}" "${MAYBE_PREFIX}"
if [ $? -ne 0 ]
then
rm -Rf "${TMP_DIR}"
err "failed to install Rust"
fi
if [ -z "${CFG_DISABLE_CARGO}" ]; then
(cd "${TMP_DIR}" && tar xzf "${CARGO_TARBALL_NAME}")
if [ $? -ne 0 ]
then
rm -Rf "${TMP_DIR}"
err "failed to unpack cargo installer"
fi
sh "${CARGO_LOCAL_INSTALL_SCRIPT}" "${MAYBE_UNINSTALL}" "${MAYBE_PREFIX}"
if [ $? -ne 0 ]
then
rm -Rf "${TMP_DIR}"
err "failed to install Cargo"
fi
fi
rm -Rf "${TMP_DIR}"
need_ok "couldn't rm temporary installation directory"

10
starbound/Dockerfile Normal file
View File

@ -0,0 +1,10 @@
FROM xena/starbound:seed
EXPOSE 21025
USER starbound
ADD start.sh /home/starbound/
CMD /home/starbound/start.sh

View File

@ -0,0 +1,13 @@
FROM ubuntu:14.04
RUN apt-get install python2.7 python-dev python-pip git python-sqlite python-twisted-words
RUN git clone https://github.com/CarrotsAreMediocre/StarryPy
USER root
RUN pip install -r StarryPy/requirements.txt
USER starbound

2
starbound/start.sh Executable file
View File

@ -0,0 +1,2 @@
cd /home/starbound/starbound/linux64
./starbound_server

12
weechat/Dockerfile Normal file
View File

@ -0,0 +1,12 @@
FROM flitter/init
RUN apt-get update && apt-get -y upgrade && apt-get -y install dvtm dtach weechat
RUN useradd --create-home xena && echo 'xena:user' | chpasswd
ADD start.sh /
ADD http://repo.or.cz/w/dvtm.git/blob_plain/HEAD:/dvtm.info /tmp/
RUN tic -s /tmp/dvtm.info
ENV HOME /home/xena
CMD /sbin/my_init setuser xena /start.sh

5
weechat/start.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/sh
export TERM=dvtm
dtach -A /tmp/weechat.dvtm -r winch dvtm 'weechat && killall dtach'