diff options
| author | talamon <nobody@nowhere> | 2012-10-29 05:27:40 +0000 | 
|---|---|---|
| committer | talamon <nobody@nowhere> | 2012-10-29 05:27:40 +0000 | 
| commit | d5efdfe2b6e6a9468149f82f714a4daacc426788 (patch) | |
| tree | b4b9a7f37a54242be3fc65b2fa59f603103b2270 /contrib/peer2anonet/peer2anonet-gentoo | |
| parent | b5e16e476f1665b88f4d24f17369a598a7062c89 (diff) | |
| download | resdb-d5efdfe2b6e6a9468149f82f714a4daacc426788.tar.gz resdb-d5efdfe2b6e6a9468149f82f714a4daacc426788.zip | |
	deleted:    contrib/peer2anonet/p2a.conf
	deleted:    contrib/peer2anonet/peer2anonet-gentoo
	deleted:    db/dom/Anonymous/ns/Anonymous
	deleted:    db/dom/Anonymous/ns/Coward
	deleted:    db/dom/Anonymous/ns/c.ns.talamon.ano
	deleted:    db/dom/Anonymous/owner
	deleted:    db/usr/Anonymous Coward/email
	deleted:    db/usr/Anonymous Coward/git
	deleted:    doc/www.anonet2.org/public_pod/.index.pod.swp
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 | 
