Benutzer:Drcux: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
Keine Bearbeitungszusammenfassung
 
Zeile 1: Zeile 1:
= Arch Linux als Homeserver =
= pbuild.sh =


<nowiki>
#!/bin/bash


# buildroot
buildroot=/home/pbuild/buildroot


== Grundsystem ==
# break
trap "cleanupandexit" 0 1 2 3 15


=== Installation ===
cleanupandexit()
{
    # save exit code
    rc=$?


Installation gemäß Wiki!
    echo -e $message


Partitionierung:
    # umount /dev & /proc
    if [ $buildroot"x" != "x" ]
        then
            while [ -e $buildroot/proc/uptime ]
                do umount $buildroot/proc
                done
            while [ -e $buildroot/dev/urandom ]
                do umount $buildroot/dev
                done
    fi


* SWAP --> je nach Hauptspeicher
    echo -e "# STOP:\t\t\t" `date`
* /    --> 10GB empfohlen
* /srv --> Restlicher Speicher


Folgende Pakete sind zu installieren:
    exit $rc
}


* base
# start
* arch-install-scripts
echo -e "# START:\t\t" `date`
* bridge-utils
* net-tools
* iproute2


=== Netzwerk konfigurieren ===
# read pkgbuild
if [ -e PKGBUILD ]
    then
        . PKGBUILD
        echo -e "# Package:\t\t" $pkgname
    else
        message="# ERROR:\t\t No PKGBUILD in `pwd`!"
        exit 1
fi


Vorgaben:
# delete/create buildroot
echo -e "# Create buildroot:\t" $buildroot


Der Server hat zwei Netzwerkkarten, eine für das interne Netz und eine Richtung (DSL)Router. Das Netz soll folgendermaßen aussehen:
if [ -d $buildroot ]
    then
        rm -rf $buildroot
fi


Router (FritzBox o.ä.)  -> 192.168.5.254
# create /dev & /proc
Server extern (enp22s0)  -> 192.168.5.250
mkdir -p $buildroot/dev
Server intern (ens2/br0) -> 192.168.6.200
mkdir $buildroot/proc


Als erstes müssen wir dafür sorgen, das für die späteren Container kein DHCP genutzt wird:
# mount /dev & /proc
mount --bind /dev $buildroot/dev
mount --bind /proc $buildroot/proc


# ln -sf /dev/null /etc/systemd/network/80-container-host0.network
# install buildroot
mkdir -p $buildroot/var/lib/pacman
pacman -r $buildroot -Sy
pacman -r $buildroot --noconfirm --noscriptlet --noprogressbar -S base-devel ${makedepends[@]} ${depends[@]}


Als nächstes erstellen wir ein Bridgedevice für das interne Netz, damit kann jeder Serverdienst später eine eigene IP bekommen:
# create build user
echo 'build::1000:1000:build:/home/build:/bin/bash' >> $buildroot/etc/passwd
echo 'build::1000:' >>$buildroot/etc/group
mkdir -p $buildroot/home/build
chown -R 1000:1000 $buildroot/home/build


/etc/systemd/network/bridge.netdev
# copy resolv.conf
cp /etc/resolv.conf $buildroot/etc


[NetDev]
# copy pkg-files to buildroot
Name=br0
cp -R ./. $buildroot/home/build/
Kind=bridge


Die Netzwerkkarte (hier ens2) der Bridge hinzufügen:
# build package
chroot $buildroot su -l build -c "cd /home/build; makepkg"


/etc/systemd/network/ens2.network
# build error?
if [ $? -ne 0 ]
    then
        message="# ERROR:\t\t Build failed!"
        exit 1
fi


[Match]
# done
Name=ens2
message="# SUCCESS:\t\t Buildjob done!"
[Network]
Bridge=br0


Konfiguration der Bridge (internes Netz):
exit 0
 
</nowiki>
/etc/systemd/network/bridge.network
 
[Match]
Name=br0
[Network]
#DNS=192.168.6.201
Address=192.168.6.200/24
 
Den DNS-Eintrag lassen wir noch auskommentiert, da lokal noch kein DNS-Server läuft!
 
Konfiguration von enp22s0 (externes Netz):
 
/etc/systemd/network/enp22s0.network
 
[Match]
Name=enp22s0
[Network]
DNS=192.168.5.254
Address=192.168.5.250/24
Gateway=192.168.5.254
 
Hier nutzen wir noch den externen DNS!
 
Zum Schluss noch networkd und resolved aktivieren:
 
# systemctl enable systemd-networkd
# systemctl enable systemd-resolved
 
Nach einem Neustart sollte es dann so aussehen:
 
# ip a s
1: lo
2: ens2: <NO-CARRIER,BROADCAST,MULTICAST,UP>
3: enp22s0: <BROADCAST,MULTICAST,UP,LOWER_UP>
    inet 192.168.5.250/24 brd 192.168.5.255 scope global enp22s0
4: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP>
    inet 192.168.6.200/24 brd 192.168.6.255 scope global br0
 
# ip r s
default via 192.168.5.254 dev enp22s0  proto static
192.168.5.0/24 dev enp22s0  proto kernel  scope link  src 192.168.5.250
192.168.6.0/24 dev br0  proto kernel  scope link  src 192.168.6.200
 
== DNS/DHCP ==
 
Erstellen einer Chroot für den DHCP/DNS-Server:
 
# mkdir /srv/dhcpdns
# pacstrap -cd /srv/dhcpdns base dnsmasq
 
Einstellen des Netzwerks
 
# ln -s /dev/null /srv/dhcpdns/etc/systemd/network/80-container-host0.network
 
== SSH ==
 
== Routing/NAT ==
 
== Proxy ==
 
== NTP ==
 
== SAMBA ==
 
== Mailserver ==
 
== FTP ==
 
== NFS ==

Aktuelle Version vom 13. Dezember 2017, 19:44 Uhr

pbuild.sh

#!/bin/bash

# buildroot
buildroot=/home/pbuild/buildroot

# break
trap "cleanupandexit" 0 1 2 3 15

cleanupandexit()
{
    # save exit code
    rc=$?

    echo -e $message

    # umount /dev & /proc
    if [ $buildroot"x" != "x" ]
        then
            while [ -e $buildroot/proc/uptime ]
                do umount $buildroot/proc
                done
            while [ -e $buildroot/dev/urandom ]
                do umount $buildroot/dev
                done
    fi

    echo -e "# STOP:\t\t\t" `date`

    exit $rc
}

# start
echo -e "# START:\t\t" `date`

# read pkgbuild
if [ -e PKGBUILD ]
    then
        . PKGBUILD
        echo -e "# Package:\t\t" $pkgname
    else
        message="# ERROR:\t\t No PKGBUILD in `pwd`!"
        exit 1
fi

# delete/create buildroot
echo -e "# Create buildroot:\t" $buildroot

if [ -d $buildroot ]
    then
        rm -rf $buildroot
fi

# create /dev & /proc
mkdir -p $buildroot/dev
mkdir $buildroot/proc

# mount /dev & /proc
mount --bind /dev $buildroot/dev
mount --bind /proc $buildroot/proc

# install buildroot
mkdir -p $buildroot/var/lib/pacman
pacman -r $buildroot -Sy
pacman -r $buildroot --noconfirm --noscriptlet --noprogressbar -S base-devel ${makedepends[@]} ${depends[@]}

# create build user
echo 'build::1000:1000:build:/home/build:/bin/bash' >> $buildroot/etc/passwd
echo 'build::1000:' >>$buildroot/etc/group
mkdir -p $buildroot/home/build
chown -R 1000:1000 $buildroot/home/build

# copy resolv.conf
cp /etc/resolv.conf $buildroot/etc

# copy pkg-files to buildroot
cp -R ./. $buildroot/home/build/

# build package
chroot $buildroot su -l build -c "cd /home/build; makepkg"

# build error?
if [ $? -ne 0 ]
    then
        message="# ERROR:\t\t Build failed!"
        exit 1
fi

# done
message="# SUCCESS:\t\t Buildjob done!"

exit 0