diff options
Diffstat (limited to 'contrib/peer2anonet/peer2anonet-gentoo')
-rwxr-xr-x | contrib/peer2anonet/peer2anonet-gentoo | 751 |
1 files changed, 751 insertions, 0 deletions
diff --git a/contrib/peer2anonet/peer2anonet-gentoo b/contrib/peer2anonet/peer2anonet-gentoo new file mode 100755 index 0000000..340c3c2 --- /dev/null +++ b/contrib/peer2anonet/peer2anonet-gentoo @@ -0,0 +1,751 @@ +#!/bin/bash +if [[ $(id -u) != 0 ]]; then + echo "peer2anonet: root privileges required." + exit 1 +fi + +if [ -e /services/bird ]; then + [ -e /etc/peer2anonet/bird.tar ] || ( cd /services ; echo "creating /etc/peer2anonet/bird.tar backup" ;\ + tar cf /etc/peer2anonet/bird.tar bird ) +fi + +[ -e contrib/peer2anonet/peer2anonet ] || echo "peer2anonet: not in \$RESDB_ROOT" +[ -e contrib/peer2anonet/peer2anonet ] || exit 1 + +[ -w /etc/rc.local ] && chmod +x /etc/rc.local +[ -w /etc/rc.d/rc.local ] && chmod +x /etc/rc.d/rc.local + +USAGE(){ + echo -e '\npeer2anonet:' + echo -e '\n ./contrib/peer2anonet/peer2anonet --configure generate a new local configuration and exit' + echo -e '\n ./contrib/peer2anonet/peer2anonet --update regenerate peer configurations' + echo -e '\n ./contrib/peer2anonet/peer2anonet --configure-peer generate a new peer configuration and update' + echo -e '\n ./contrib/peer2anonet/peer2anonet --rm-peer remove a peer configuration and update' + echo -e '\n ./contrib/peer2anonet/peer2anonet --install-daemontools installs daemontools' + echo -e '\n ./contrib/peer2anonet/peer2anonet --install-ucspi-tcp installs ucspi-tcp' + echo -e '\n ./contrib/peer2anonet/peer2anonet --install-djbdns installs djbdns' + echo -e '\n ./contrib/peer2anonet/peer2anonet --install-nacl installs nacl' + echo -e '\n ./contrib/peer2anonet/peer2anonet --setup-qmail installs and configures qmail' + echo -e '\n ./contrib/peer2anonet/peer2anonet --configure-dns configures dnscache and tinydns zones' + echo -e '\n ./contrib/peer2anonet/peer2anonet --update-dns updates tinydns-ano zone\n' + exit 0 + } + +mkdir -p /service +mkdir -p /services +mkdir -p /services/bird +mkdir -p /etc/peer2anonet +mkdir -p /etc/peer2anonet/peers + +CONFIGURE(){ + echo -e '\nCONFIGURE:\n' + read -p " Enter your AnoNet subnet: " P2A_NET + read -p " Enter your AnoNet router: " P2A_ROUTE + read -p " Enter your peering ip: " P2A_IP + read -p " Enter your AnoNet asn: " P2A_ASN + + + echo "P2A_NET=\"$P2A_NET\"">/etc/peer2anonet/p2a.conf + echo "P2A_ROUTE=\"$P2A_ROUTE\"">>/etc/peer2anonet/p2a.conf + echo "P2A_IP=\"$P2A_IP\"">>/etc/peer2anonet/p2a.conf + echo "P2A_ASN=\"$P2A_ASN\"">>/etc/peer2anonet/p2a.conf + echo -e '\npeer2anonet: configured\n' + + NICK=`cat conf/git_name` + ./scripts/add_as $P2A_ASN $NICK + ./scripts/add_ip $P2A_NET/24 $NICK + [ -e "db/usr/$NICK" ] || mkdir -p "db/usr/$NICK" + [ -e "db/usr/$NICK/git" ] || echo "git://git.$NICK.ano/">"db/usr/$NICK/git" + [ -e "db/usr/$NICK/email" ] || echo "`cat conf/git_email`">"db/usr/$NICK/email" + exit 0 + } + +UPDATE(){ + if [ -e /etc/peer2anonet/p2a.conf ]; then + source /etc/peer2anonet/p2a.conf + else + CONFIGURE + exit 0 + fi + + echo -e '\nUPDATE:\n' + if [[ $(ls /etc/peer2anonet/peers) ]]; then + for PEER in `ls /etc/peer2anonet/peers`; do + if [ -e /etc/peer2anonet/peers/"$PEER"/remote_ip ]; then + if [[ $(echo X`cat /etc/peer2anonet/peers/"$PEER"/remote_ip`) == 'X' ]]; then + echo " fatal error: /etc/peer2anonet/peers/$PEER/remote_ip is void" + exit 1 + fi + else + echo " fatal error: /etc/peer2anonet/peers/$PEER/remote_ip not exists" + exit 1 + fi + + if [ -e /etc/peer2anonet/peers/"$PEER"/peering_ip ]; then + if [[ $(echo X`cat /etc/peer2anonet/peers/"$PEER"/peering_ip`) == 'X' ]]; then + echo " fatal error: /etc/peer2anonet/peers/$PEER/peering_ip is void" + exit 1 + fi + else + echo " fatal error: /etc/peer2anonet/peers/$PEER/peering_ip not exists" + exit 1 + fi + + if [ -e /etc/peer2anonet/peers/"$PEER"/remote_port ]; then + if [[ $(echo X`cat /etc/peer2anonet/peers/"$PEER"/remote_port`) == 'X' ]]; then + echo " fatal error: /etc/peer2anonet/peers/$PEER/remote_port is void" + exit 1 + fi + else + echo " fatal error: /etc/peer2anonet/peers/$PEER/remote_port not exists" + exit 1 + fi + + if [ -e /etc/peer2anonet/peers/"$PEER"/local_port ]; then + if [[ $(echo X`cat /etc/peer2anonet/peers/"$PEER"/local_port`) == 'X' ]]; then + echo " fatal error: /etc/peer2anonet/peers/$PEER/local_port is void" + exit 1 + fi + else + echo " fatal error: /etc/peer2anonet/peers/$PEER/local_port not exists" + exit 1 + fi + + if [ -e /etc/peer2anonet/peers/"$PEER"/asn ]; then + if [[ $(echo X`cat /etc/peer2anonet/peers/"$PEER"/asn`) == 'X' ]]; then + echo " fatal error: /etc/peer2anonet/peers/$PEER/asn is void" + exit 1 + fi + else + echo " fatal error: /etc/peer2anonet/peers/$PEER/asn not exists" + exit 1 + fi + + if [ -e /etc/peer2anonet/peers/"$PEER"/pubkey ]; then + if [[ $(echo X`cat /etc/peer2anonet/peers/"$PEER"/pubkey`) == 'X' ]]; then + echo " fatal error: /etc/peer2anonet/peers/$PEER/pubkey is void" + exit 1 + fi + else + echo " fatal error: /etc/peer2anonet/peers/$PEER/pubkey not exists" + exit 1 + fi + + if [ -e /etc/peer2anonet/peers/"$PEER"/seckey ]; then + if [[ $(echo X`cat /etc/peer2anonet/peers/"$PEER"/seckey`) == 'X' ]]; then + echo " fatal error: /etc/peer2anonet/peers/$PEER/seckey is void" + exit 1 + fi + else + echo " fatal error: /etc/peer2anonet/peers/$PEER/seckey not exists" + exit 1 + fi + done + else + echo " fatal error: peering configurations not exists" + exit 1 + fi + + echo '#!/bin/bash +bird -c bird.conf -d' > /services/bird/run + chmod +x /services/bird/run + + if [ -e /etc/peer2anonet/bird.conf ]; then + cp /etc/peer2anonet/bird.conf /services/bird/bird.conf + else + echo "function n_AnoNet_mine (prefix arg) { + if arg ~ [ $P2A_NET/24+ ] then return true; +return false; }; + +function n_AnoNet (prefix arg) { + if arg ~ [ 1.0.0.0/8+ ] then return true; +return false; }; + +filter only_AnoNet_ebgp { + if n_AnoNet(net) then + if !n_AnoNet_mine(net) then + accept \"AnoNet\"; + else reject \"mine\"; +reject \"non-AnoNet\"; }; + +filter only_AnoNet_ebgp_export { + if n_AnoNet(net) then accept \"AnoNet\"; +reject \"non-AnoNet\"; }; + +filter only_AnoNet { + if n_AnoNet(net) then accept \"AnoNet\"; +reject \"non-AnoNet\"; }; + +table AnoNet_routes; + +protocol pipe pipe_AnoNet_routes { peer table AnoNet_routes; mode transparent; + import filter only_AnoNet; + export filter only_AnoNet; +}; + +protocol static static_AnoNet_routes { table AnoNet_routes; + route $P2A_NET/24 drop; +} + +protocol kernel { + scan time 10; + import all; + export all; +} + +protocol device { + scan time 900; +} + +protocol direct direct_AnoNet_routes { table AnoNet_routes; + interface \"eth0\"; + import filter only_AnoNet; +}" > /services/bird/bird.conf + fi + + for PEER in `ls /etc/peer2anonet/peers`; do + mkdir -p /services/"$PEER" + REMOTEIP=`cat /etc/peer2anonet/peers/"$PEER"/remote_ip` + PEERIP=`cat /etc/peer2anonet/peers/"$PEER"/peering_ip` + PEERPORT=`cat /etc/peer2anonet/peers/"$PEER"/remote_port` + LOCALPORT=`cat /etc/peer2anonet/peers/"$PEER"/local_port` + PEERASN=`cat /etc/peer2anonet/peers/"$PEER"/asn` + PUBKEY=`cat /etc/peer2anonet/peers/"$PEER"/pubkey` + SECKEY=`cat /etc/peer2anonet/peers/"$PEER"/seckey` + + echo " +protocol bgp $PEER { table AnoNet_routes; + local as $P2A_ASN; + neighbor $PEERIP as $PEERASN; + source address $P2A_IP; + import filter only_AnoNet_ebgp; + export filter only_AnoNet_ebgp_export; +}" >> /services/bird/bird.conf + + if [ -e /etc/peer2anonet/peers/"$PEER"/run ]; then + test -L /services/"$PEER"/run || rm -f /services/"$PEER"/run + test -L /services/"$PEER"/run || ln -s /etc/peer2anonet/peers/"$PEER"/run /services/"$PEER"/run + else + echo "#!/bin/bash + +# uncomment for debugging. you'll need to use ./run to view output instead +# of svc -u /service/<peer name> +# +#export DEBUG=1 + +# uncomment if your peer has a dynamic IP +# +#export REMOTE_FLOAT=1 + +if [[ \$REMOTE_FLOAT != 1 ]]; then + export REMOTE_ADDRESS=\`cat /etc/peer2anonet/peers/$PEER/remote_ip\` + export REMOTE_PORT=\`cat /etc/peer2anonet/peers/$PEER/remote_port\` +fi + +# not recommended to change these values +# +export LOCAL_PORT=\`cat /etc/peer2anonet/peers/$PEER/local_port\` +export PRIVATE_KEY=\`cat /etc/peer2anonet/peers/$PEER/seckey\` +export PUBLIC_KEY=\`cat /etc/peer2anonet/peers/$PEER/pubkey\` +export TUN_MODE=1 +export INTERFACE=ppp-$PEER + +# uncomment if you want to nuke your default gateway and configure +# routes only to peers through IcannNet. If any of your peers use +# dynamic IP's or you use Tor or i2p then this is probably NOT a +# good idea. You may need to modify the DEFAULT_ROUTE code below. +# If you run into problems with this please /msg /relayhell/d3v11 +# so I can create a patch. +# +#DEFAULT_ROUTE=\`ip route show | grep default | cut -d' ' -f 3\` +#route del default gw \$DEFAULT_ROUTE +#route add \$REMOTE_ADDRESS gw \$DEFAULT_ROUTE + +( sleep 5; + ip addr add $P2A_IP peer \`cat /etc/peer2anonet/peers/$PEER/peering_ip\`/32 dev \$INTERFACE scope link + ip addr add $P2A_ROUTE/32 dev \$INTERFACE scope global + ip link set dev \$INTERFACE up + +# comment the following ping line to remove pinghack. this is a +# trick used to help bird connect. +# + ping -c 1 -I \$INTERFACE \`cat /etc/peer2anonet/peers/$PEER/peering_ip\` -r -w 5 + +) & +exec /usr/sbin/quicktun.nacltai" > /etc/peer2anonet/peers/$PEER/run + fi + chmod +x /etc/peer2anonet/peers/"$PEER"/run + test -L /services/"$PEER"/run || rm -f /services/"$PEER"/run + test -L /services/"$PEER"/run || ln -s /etc/peer2anonet/peers/"$PEER"/run /services/"$PEER"/run + test -L "/service/$PEER" && svc -t "/service/$PEER" + test -L "/service/$PEER" || ln -s "/services/$PEER" "/service/$PEER" + done + test -L /service/bird || ln -s /services/bird /service/bird + echo configure | birdc + } + +CONFIGURE_PEER(){ + if [ -e /etc/peer2anonet/p2a.conf ]; then + source /etc/peer2anonet/p2a.conf + else + CONFIGURE + exit 0 + fi + + echo -e '\nCONFIGURE PEER:\n' + read -p " Enter your peer's name: " PEER + read -p " Enter your peer's remote ip: " REMOTEIP + read -p " Enter your peer's peering ip: " PEERIP + read -p " Enter your peer's remote port: " PEERPORT + read -p " Enter your local port: " LOCALPORT + read -p " Enter your peer's asn: " PEERASN + read -p " Enter your peer's public key: " PUBKEY + read -p " Enter your private key: " SECKEY + [ -e /etc/peer2anonet/peers/"$PEER" ] && rm -r /etc/peer2anonet/peers/"$PEER" + mkdir -p /etc/peer2anonet/peers/"$PEER" + echo $REMOTEIP >/etc/peer2anonet/peers/"$PEER"/remote_ip + echo $PEERIP >/etc/peer2anonet/peers/"$PEER"/peering_ip + echo $PEERPORT >/etc/peer2anonet/peers/"$PEER"/remote_port + echo $LOCALPORT >/etc/peer2anonet/peers/"$PEER"/local_port + echo $PEERASN >/etc/peer2anonet/peers/"$PEER"/asn + echo $PUBKEY >/etc/peer2anonet/peers/"$PEER"/pubkey + echo $SECKEY >/etc/peer2anonet/peers/"$PEER"/seckey + echo -e "\n configured $PEER\n" + } + +RM_PEER(){ + if [ -e /etc/peer2anonet/p2a.conf ]; then + source /etc/peer2anonet/p2a.conf + else + CONFIGURE + exit 0 + fi + + echo -e '\nRM PEER:\n' + read -p " Enter your peer's name: " PEER + if [ -e /etc/peer2anonet/peers/"$PEER" ]; then + rm -r /etc/peer2anonet/peers/"$PEER" + echo + echo -e " removed /etc/peer2anonet/peers/$PEER\n" + else + echo + echo -e " fatal error: /etc/peer2anonet/peers/$PEER not exists\n" + exit 1 + fi + } + +INSTALL_DAEMONTOOLS(){ + echo -e '\nINSTALL DAEMONTOOLS:\n' + [[ $(echo X`which gcc`) == X ]] && echo ' fatal error: cannot find gcc' + [[ $(echo X`which gcc`) == X ]] && exit 1 + [[ $(echo X`which make`) == X ]] && echo ' fatal error: cannot find make' + [[ $(echo X`which make`) == X ]] && exit 1 + + if [ -w /etc/inittab ]; then : + elif [ -w /etc/rc.local ] && ! [ -w /etc/inittab ]; then + sed -i "s/exit 0/exec \/command\/svscanboot \&/" /etc/rc.local + chmod +x /etc/rc.local + else + echo ' fatal error: cannot create reliable startup' + exit 1 + fi + + mkdir -p /package + chmod 1755 /package + cd /package + wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz + gunzip daemontools-0.76.tar + tar -xpf daemontools-0.76.tar + rm -f daemontools-0.76.tar + cd admin/daemontools-0.76 + sed -i 's/gcc/gcc -include errno.h/g' src/conf-cc + package/install + exec /command/svscanboot >/dev/null 2>&1 & + } + +INSTALL_UCSPI_TCP(){ + echo -e '\nINSTALL UCSPI-TCP:\n' + [[ $(echo X`which gcc`) == X ]] && echo ' fatal error: cannot find gcc' + [[ $(echo X`which gcc`) == X ]] && exit 1 + [[ $(echo X`which make`) == X ]] && echo ' fatal error: cannot find make' + [[ $(echo X`which make`) == X ]] && exit 1 + cd /usr/local/src + wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz + gunzip ucspi-tcp-0.88.tar + tar -xf ucspi-tcp-0.88.tar + cd ucspi-tcp-0.88 + sed -i 's/gcc/gcc -include errno.h/g' conf-cc + make + make setup check + } + +SETUP_QMAIL(){ + echo -e '\nSETUP QMAIL:\n' + + echo -e '\tWARN:\n' + echo -e '\tYou should patch or firewall off qmail from' + echo -e '\treaching IcannNet so someone cannot harvest' + echo -e '\tyour IP with the mailerdaemon response.' + + [[ $(echo X`which gcc`) == X ]] && echo ' fatal error: cannot find gcc' + [[ $(echo X`which gcc`) == X ]] && exit 1 + [[ $(echo X`which make`) == X ]] && echo ' fatal error: cannot find make' + [[ $(echo X`which make`) == X ]] && exit 1 + [[ $(echo X`which tcpserver`) == X ]] && echo ' fatal error: needs ./contrib/peer2anonet/peer2anonet --install-ucspi-tcp' + [[ $(echo X`which tcpserver`) == X ]] && exit 1 + [[ $(echo X`which svscanboot`) == X ]] && echo ' fatal error: needs ./contrib/peer2anonet/peer2anonet --install-daemontools' + [[ $(echo X`which svscanboot`) == X ]] && exit 1 + + NICK=`cat conf/git_name` || exit 1 + MX_IP=`cat conf/gitd_ip` || exit 1 + MX_DOMAIN="a.mx.$NICK.ano" || exit 1 + + if [ -e /services/tinydns ]; then + ( + cd /services + echo "creating /etc/peer2anonet/tinydns.tar backup" + tar cf /etc/peer2anonet/tinydns.tar tinydns + echo "@$NICK.ano:$MX_IP:a:12801:86400">>/services/tinydns/root/data + ) + else + echo ' fatal error: needs ./contrib/peer2anonet/peer2anonet --configure-dns' + exit 1 + fi + + ( + cd /services/tinydns/root + make + cd /service + sleep 5 + svc -t dnscache tinydns tinydns-ano tinydns-root + ) + + useradd qmaillog || exit 1 + + if [ -w /etc/rc.local ]; then + if [[ $(cat /etc/rc.local) != *"ip addr add $MX_IP/32 dev lo &"* ]]; then + echo "ip addr add $MX_IP/32 dev lo &" >> /etc/rc.local + fi + elif [ -w /etc/rc.d/rc.local ]; then + if [[ $(cat /etc/rc.d/rc.local) != *"ip addr add $MX_IP/32 dev lo &"* ]]; then + echo "ip addr add $MX_IP/32 dev lo &" >> /etc/rc.d/rc.local + fi + else + echo " fatal error: cannot reliably assign ip's to startup" + exit 1 + fi + + ip addr add $MX_IP/32 dev lo > /dev/null 2>&1 + + if [ -e '/var/qmail/bin/qmail-qmtpd' ] || ! [ -e '/var/qmail/bin/qmail-smtpd' ]; then + cd /usr/local/src + wget http://www.srn.ano/software/qmail-1.03.tar.gz + tar xzf qmail-1.03.tgz + cd qmail-1.03 + unset http_proxy + wget -O- http://www.srn.ano/patches/qmail-1.03-qmtpc.patch | patch -p1 + mkdir /var/qmail + groupadd nofiles + useradd -g nofiles -d /var/qmail/alias alias + useradd -g nofiles -d /var/qmail qmaild + useradd -g nofiles -d /var/qmail qmaill + useradd -g nofiles -d /var/qmail qmailp + groupadd qmail + useradd -g qmail -d /var/qmail qmailq + useradd -g qmail -d /var/qmail qmailr + useradd -g qmail -d /var/qmail qmails + sed -i 's/gcc/gcc -include errno.h/g' conf-cc + make setup check + ./config-fast $MX_DOMAIN + echo yourdomain.ano >>/var/qmail/control/locals + echo yourdomain.ano >>/var/qmail/control/rcpthosts + (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root) + chmod 644 ~alias/.qmail* + fi + + mkdir -p /services/qmail + mkdir -p /services/qmail/log + mkdir -p /services/qmail/log/main + chown qmaillog /services/qmail/log/main + echo -e '#!/bin/sh\nexec env - PATH="/var/qmail/bin:/usr/local/bin:/usr/bin:/bin" qmail-start ./Mailbox' >/services/qmail/run + chmod +x /services/qmail/run + echo -e '#!/bin/sh\nexec setuidgid qmaillog multilog t s10000 n4 ./main' >/services/qmail/log/run + chmod +x /services/qmail/log/run + + ( cd / ; ln -s /services/qmail /service ) + + mkdir -p /services/qmail-smtpd + mkdir -p /services/qmail-smtpd/log + mkdir -p /services/qmail-smtpd/log/main + chown qmaillog /services/qmail-smtpd/log/main + echo -e echo -e '#!/bin/sh\nexec envuidgid qmaild tcpserver -U -c 100 '$MX_IP' smtp /var/qmail/bin/qmail-smtpd' >/services/qmail-smtpd/run + chmod +x /services/qmail-smtpd/run + echo -e '#!/bin/sh\nexec setuidgid qmaillog multilog t s10000 n4 ./main' >/services/qmail-smtpd/log/run + chmod +x /services/qmail-smtpd/log/run + + ( cd / ; ln -s /services/qmail-smtpd /service ) + + mkdir -p /services/qmail-qmtpd + mkdir -p /services/qmail-qmtpd/log + mkdir -p /services/qmail-qmtpd/log/main + chown qmaillog /services/qmail-qmtpd/log/main + echo -e echo -e '#!/bin/sh\nexec envuidgid qmaild tcpserver -U -c 100 '$MX_IP' qmtp /var/qmail/bin/qmail-qmtpd' >/services/qmail-qmtpd/run + chmod +x /services/qmail-qmtpd/run + echo -e '#!/bin/sh\nexec setuidgid qmaillog multilog t s10000 n4 ./main' >/services/qmail-qmtpd/log/run + chmod +x /services/qmail-qmtpd/log/run + + ( cd / ; ln -s /services/qmail-qmtpd /service ) + + ( + cd / + [ -e /usr/sbin/sendmail ] && mv /usr/sbin/sendmail /usr/sbin/sendmail.bak + ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail + ) + + echo 'export MAIL=~/Mailbox' >>/etc/profile + } + +INSTALL_DJBDNS(){ + echo -e '\nINSTALL DJBDNS:\n' + [[ $(echo X`which gcc`) == X ]] && echo ' fatal error: cannot find gcc' + [[ $(echo X`which gcc`) == X ]] && exit 1 + [[ $(echo X`which make`) == X ]] && echo ' fatal error: cannot find make' + [[ $(echo X`which make`) == X ]] && exit 1 + [[ $(echo X`which tcpserver`) == X ]] && echo ' fatal error: needs ./contrib/peer2anonet/peer2anonet --install-ucspi-tcp' + [[ $(echo X`which tcpserver`) == X ]] && exit 1 + [[ $(echo X`which svscanboot`) == X ]] && echo ' fatal error: needs ./contrib/peer2anonet/peer2anonet --install-daemontools' + [[ $(echo X`which svscanboot`) == X ]] && exit 1 + cd /usr/local/src + wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz + gunzip djbdns-1.05.tar + tar -xf djbdns-1.05.tar + cd djbdns-1.05 + echo gcc -O2 -include /usr/include/errno.h > conf-cc + make + make setup check + } + +CONFIGURE_DNS(){ + if [ -e /etc/peer2anonet/p2a.conf ]; then + source /etc/peer2anonet/p2a.conf + else + CONFIGURE + exit 0 + fi + + [[ $(echo X`which tcpserver`) == X ]] && echo ' fatal error: needs ./contrib/peer2anonet/peer2anonet --install-ucspi-tcp' + [[ $(echo X`which tcpserver`) == X ]] && exit 1 + [[ $(echo X`which svscanboot`) == X ]] && echo ' fatal error: needs ./contrib/peer2anonet/peer2anonet --install-daemontools' + [[ $(echo X`which svscanboot`) == X ]] && exit 1 + [[ $(echo X`which tinydns`) == X ]] && echo ' fatal error: needs ./contrib/peer2anonet/peer2anonet --install-djbdns' + [[ $(echo X`which tinydns`) == X ]] && exit 1 + + if [ -e /services/dnscache ]; then + [ -e /etc/peer2anonet/dnscache.tar ] || ( cd /services ; echo "creating /etc/peer2anonet/dnscache.tar backup" ;\ + tar cf /etc/peer2anonet/dnscache.tar dnscache ) + fi + if [ -e /services/tinydns ]; then + [ -e /etc/peer2anonet/tinydns.tar ] || ( cd /services ; echo "creating /etc/peer2anonet/tinydns.tar backup" ;\ + tar cf /etc/peer2anonet/tinydns.tar tinydns ) + fi + if [ -e /services/tinydns-ano ]; then + [ -e /etc/peer2anonet/tinydns-ano.tar ] || ( cd /services ; echo "creating /etc/peer2anonet/tinydns-ano.tar backup" ;\ + tar cf /etc/peer2anonet/tinydns-ano.tar tinydns-ano ) + fi + if [ -e /services/tinydns-root ]; then + [ -e /etc/peer2anonet/tinydns-root.tar ] || ( cd /services ; echo "creating /etc/peer2anonet/tinydns-root.tar backup" ;\ + tar cf /etc/peer2anonet/tinydns-root.tar tinydns-root ) + fi + + ( + cd /service + svc -d dnscache tinydns tinydns-ano tinydns-root >/dev/null 2>&1 + rm -f dnscache tinydns tinydns-ano tinydns-root + cd /services + rm -rf dnscache tinydns tinydns-ano tinydns-root + ) + + echo -e '\nCONFIGURE DNS:\n' + NICK=`cat conf/git_name` || exit 1 + TINYDNS_ROOT_IP=`cat conf/tinydns__rootsrvrip` || exit 1 + TINYDNS_ROOT_DOMAIN=`cat conf/tinydns__rootsrvrname` || exit 1 + TINYDNS_ANO_IP=`cat conf/tinydns__tldsrvrip` || exit 1 + TINYDNS_ANO_DOMAIN=`cat conf/tinydns__tldsrvrname` || exit 1 + TINYDNS_IP=`cat conf/tinydns__srvrip` || exit 1 + TINYDNS_DOMAIN=`cat conf/tinydns__srvrname` || exit 1 + GIT_IP=`cat conf/gitd_ip` || exit 1 + GIT_DOMAIN="git.$NICK.ano" + + ./scripts/add_dom $NICK.ano $NICK $TINYDNS_DOMAIN/$TINYDNS_IP > /dev/null 2>&1 + + if [ -w /etc/rc.local ]; then + if [[ $(cat /etc/rc.local) != *"ip addr add $TINYDNS_ROOT_IP/32 dev lo &"* ]]; then + echo "ip addr add $TINYDNS_ROOT_IP/32 dev lo &" >> /etc/rc.local + fi + if [[ $(cat /etc/rc.local) != *"ip addr add $TINYDNS_IP/32 dev lo &"* ]]; then + echo "ip addr add $TINYDNS_IP/32 dev lo &" >> /etc/rc.local + fi + if [[ $(cat /etc/rc.local) != *"ip addr add $TINYDNS_ANO_IP/32 dev lo &"* ]]; then + echo "ip addr add $TINYDNS_ANO_IP/32 dev lo &" >> /etc/rc.local + fi + if [[ $(cat /etc/rc.local) != *"ip addr add $GIT_IP/32 dev lo &"* ]]; then + echo "ip addr add $GIT_IP/32 dev lo &" >> /etc/rc.local + fi + elif [ -w /etc/rc.d/rc.local ]; then + if [[ $(cat /etc/rc.d/rc.local) != *"ip addr add $TINYDNS_ROOT_IP/32 dev lo &"* ]]; then + echo "ip addr add $TINYDNS_ROOT_IP/32 dev lo &" >> /etc/rc.d/rc.local + fi + if [[ $(cat /etc/rc.d/rc.local) != *"ip addr add $TINYDNS_IP/32 dev lo &"* ]]; then + echo "ip addr add $TINYDNS_IP/32 dev lo &" >> /etc/rc.d/rc.local + fi + if [[ $(cat /etc/rc.d/rc.local) != *"ip addr add $TINYDNS_ANO_IP/32 dev lo &"* ]]; then + echo "ip addr add $TINYDNS_ANO_IP/32 dev lo &" >> /etc/rc.d/rc.local + fi + if [[ $(cat /etc/rc.d/rc.local) != *"ip addr add $GIT_IP/32 dev lo &"* ]]; then + echo "ip addr add $GIT_IP/32 dev lo &" >> /etc/rc.d/rc.local + fi + else + ( + mkdir -p /services/tinydns-ips + echo "#!/bin/sh -e" > /services/tinydns-ips/run + echo "ip addr add $TINYDNS_ROOT_IP/32 dev lo &" >> /services/tinydns-ips/run + echo "ip addr add $TINYDNS_IP/32 dev lo &" >> /services/tinydns-ips/run + echo "ip addr add $TINYDNS_ANO_IP/32 dev lo &" >> /services/tinydns-ips/run + echo "ip addr add $GIT_IP/32 dev lo &" >> /services/tinydns-ips/run + echo "svc -d ." /services/tinydns-ips/run + chmod +x /services/tinydns-ips/run + test -L /service/tinydns-ips || ln -s /services/tinydns-ips /service/tinydns-ips + ) + fi + + ip addr add $TINYDNS_ROOT_IP/32 dev lo > /dev/null 2>&1 + ip addr add $TINYDNS_IP/32 dev lo > /dev/null 2>&1 + ip addr add $TINYDNS_ANO_IP/32 dev lo > /dev/null 2>&1 + ip addr add $GIT_IP/32 dev lo > /dev/null 2>&1 + + useradd Gdnscache + useradd Gdnslog + useradd Gtinydns + + dnscache-conf Gdnscache Gdnslog /services/dnscache + mv /services/dnscache/root/servers/@ /services/dnscache/root/servers/@.icann + echo $TINYDNS_ROOT_IP >/services/dnscache/root/servers/@ + echo 'nameserver 127.0.0.1' >/etc/resolv.conf + + + tinydns-conf Gtinydns Gdnslog /services/tinydns $TINYDNS_IP + ( + cd /services/tinydns/root + ./add-ns $NICK.ano $TINYDNS_IP + ./add-alias $GIT_DOMAIN $GIT_IP + ./add-alias $TINYDNS_ROOT_DOMAIN $TINYDNS_ROOT_IP + ./add-alias $TINYDNS_ANO_DOMAIN $TINYDNS_ANO_IP + make + ) + + tinydns-conf Gtinydns Gdnslog /services/tinydns-root $TINYDNS_ROOT_IP + ./scripts/nameserver_autogen/tinydns_root_datafile > /services/tinydns-root/root/data + ( cd /services/tinydns-root/root ; make ) + + tinydns-conf Gtinydns Gdnslog /services/tinydns-ano $TINYDNS_ANO_IP + ./scripts/nameserver_autogen/tinydns_tld_datafile > /services/tinydns-ano/root/data + ( cd /services/tinydns-ano/root ; make ) + + ( + cd / + ln -s /services/dnscache /service/dnscache + ln -s /services/tinydns /service/tinydns + ln -s /services/tinydns-ano /service/tinydns-ano + ln -s /services/tinydns-root /service/tinydns-root + cd /service ; sleep 5 ; svc -t dnscache tinydns tinydns-ano tinydns-root + ) + } + +INSTALL_DJBDNS(){ + echo -e '\nINSTALL DJBDNS:\n' + [[ $(echo X`which gcc`) == X ]] && echo ' fatal error: cannot find gcc' + [[ $(echo X`which gcc`) == X ]] && exit 1 + [[ $(echo X`which make`) == X ]] && echo ' fatal error: cannot find make' + [[ $(echo X`which make`) == X ]] && exit 1 + [[ $(echo X`which tcpserver`) == X ]] && echo ' fatal error: needs ./contrib/peer2anonet/peer2anonet --install-ucspi-tcp' + [[ $(echo X`which tcpserver`) == X ]] && exit 1 + [[ $(echo X`which svscanboot`) == X ]] && echo ' fatal error: needs ./contrib/peer2anonet/peer2anonet --install-daemontools' + [[ $(echo X`which svscanboot`) == X ]] && exit 1 + cd /usr/local/src + wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz + gunzip djbdns-1.05.tar + tar -xf djbdns-1.05.tar + cd djbdns-1.05 + echo gcc -O2 -include /usr/include/errno.h > conf-cc + make + make setup check + } + +UPDATE_DNS(){ + if [ -e /etc/peer2anonet/p2a.conf ]; then + source /etc/peer2anonet/p2a.conf + else + CONFIGURE + exit 0 + fi + + [[ $(echo X`which tcpserver`) == X ]] && echo ' fatal error: needs ./contrib/peer2anonet/peer2anonet --install-ucspi-tcp' + [[ $(echo X`which tcpserver`) == X ]] && exit 1 + [[ $(echo X`which svscanboot`) == X ]] && echo ' fatal error: needs ./contrib/peer2anonet/peer2anonet --install-daemontools' + [[ $(echo X`which svscanboot`) == X ]] && exit 1 + + if [ -e /services/tinydns-ano ]; then + ( + cd /services + echo "creating /etc/peer2anonet/tinydns-ano.tar backup" + tar cf /etc/peer2anonet/tinydns-ano.tar tinydns-ano + ) + fi + + echo -e '\nUPDATE DNS:\n' + ./scripts/nameserver_autogen/tinydns_tld_datafile > /services/tinydns-ano/root/data + ( cd /services/tinydns-ano/root ; make ) + + ( + cd /service + sleep 5 + svc -t dnscache tinydns tinydns-ano tinydns-root + ) + } + +INSTALL_NACL(){ + cd /usr/local/src + wget http://hyperelliptic.org/nacl/nacl-20110221.tar.bz2 + bunzip2 < nacl-20110221.tar.bz2 | tar -xf - + cd nacl-20110221 + ./do + } + + +if [ "$1" == '--configure' ]; then + CONFIGURE +elif [ "$1" == '--update' ]; then + UPDATE +elif [ "$1" == '--configure-peer' ]; then + CONFIGURE_PEER + UPDATE +elif [ "$1" == '--rm-peer' ]; then + RM_PEER + UPDATE +elif [ "$1" == '--install-daemontools' ]; then + INSTALL_DAEMONTOOLS +elif [ "$1" == '--install-ucspi-tcp' ]; then + INSTALL_UCSPI_TCP +elif [ "$1" == '--install-djbdns' ]; then + INSTALL_DJBDNS +elif [ "$1" == '--install-nacl' ]; then + INSTALL_NACL +elif [ "$1" == '--setup-qmail' ]; then + SETUP_QMAIL +elif [ "$1" == '--configure-dns' ]; then + CONFIGURE_DNS +elif [ "$1" == '--update-dns' ]; then + UPDATE_DNS +else + USAGE +fi |