Benutzer-Werkzeuge

Webseiten-Werkzeuge


raspberry:fedberry_quick_install

Fedberry Linux Betriebsystem mit dem Raspberry PI 2 für einen Ubiquiti Network Controller

November 2017

Aufgabe:

Ubiquiti Network Controller für die Wlan Infrastruktur von Haus und Büro auf einem Raspberry PI 2 aufsetzen, zusätzlich sollen auf dem System noch weitere Monitorring Script auf Python 3 Basis laufen.

Da auch redsleeve nicht mehr so frisch ausschaut, für das nächste Projekt auf http://fedberry.org/#about gesetzt.

Warum Raspberry PI 2? Ist noch übrig .-). Warum überhaupt selber bauen?

Im Prinzip kaufmänisch völlig uninteressant, Ubiquiti UniFi Cloud Key [Controller, 1x Gbit LAN, 1GB RAM] kostet um die 80€ und ist dann auch auto update fähig.

Die Bastel Lösung unter einem RedHat Derivat kann das hier nicht bieten, da die Package Funktionalität von Debian von der Unifi Software für das AutoUpdate verwendet wird.

Ablauf Installation Basis-System:

Ablauf Ubiquiti UniFi Controller

  • Software im RPM und im Debian Format organisieren
  • Software im RPM Format installieren
  • Scripte und Libs aus dem Debian Package ausleihen
  • Versuch den Autostart mit dem Java Demon Runner hinzubekommen (erstmal gescheitert …)

Basis System konfigurieren

Wird die Version XFCE & LXQt release images gewählt, wird doch noch eine Tastatur und Monitor benötigt.

Siehe auch erst hier ⇒ https://github.com/fedberry/fedberry

Alternativ bei einer Minimal Version:

Nach dem Einschalten wird eine dynamische IP Adresse vergeben, diese aus der IP Umgebung ermitteln z.b. über den DHCP Server oder über einen Netzwerkscan, hier sind die Tools von MobaXterm sehr praktisch, SSH session auf die gefundene IP Adresse mit z.b. MobaXterm aufbauen, root , PWD=fedberry

XFCE & LXQt release

Über die graphische Oberfläche:

  • Zeitzone einstellen
  • Netzwerk und Hostname
  • Root Password setzen
  • Admin User anlegen, hier den Hacken „Administrator“ setzen, damit der User auch das Sudo Recht hat!
  • Am System anmelden

Nach der Grundkonfiguration kann nun wieder entspannt weiter über die Console gearbeitet werden, ssh Session auf den den Server als Admin user starten, evtl. nächstes mal die Version ohne graphische Oberfläche wählen, braucht dann wohl auch weniger Platz.

Updates einspielen

sudo yum update

X beim boot ausschalten

su -
 
rm /etc/systemd/system/default.target
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target 
 
To switch back:
 
rm /etc/systemd/system/default.target
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

IPV6 disablen

Bei mir wollte dann immer der Unfi auf der IP V6 Adresse laufen, daher IPV6 ausgeschaltet, allerdings ist mir das auf dieser Distribution so nicht so recht gelungen, nach dem Start des Java Programms hat dieses doch wieder auf IPV6 Sockets gehorcht. hmm…

vi /etc/sysctl.conf
 
net.ipv6.conf.all.disable_ipv6 = 1
 
sysctl -w net.ipv6.conf.all.disable_ipv6=1
 
systemctl restart network
 
#Fedora??
vi /etc/modprobe.d/ipv6.conf
 
install ipv6 /bin/true
options ipv6 disable=1
 
 
# Hosts uncomment localhost entry
vi /etc/hosts
# ::1           localhost6.localdomain6 localhost6
 
# 
vi /etc/sysconfig/network-scripts/ifcfg-eth0
 
IPV6_AUTOCONF=no
IPV6INIT=no
 
# nun sollte es auch nach einem Boot klappen
reboot

Java 8 einrichten

Download from http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html File dk-8u151-linux-arm32-vfp-hflt.tar.gz

cp jdk-8u151-linux-arm32-vfp-hflt.tar.gz /srv
 
tar xvfz jdk-8u151-linux-arm32-vfp-hflt.tar.gz
 
cd /usr/lib/jvm
 
mv /srv/jdk1.8.0_151/ .
 
 
cd /usr/lib/jvm/jdk1.8.0_151/bin
 
./java -version
 
/usr/sbin/alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_151/bin/java  18151
 
 
# Versionen anzeigen
/usr/sbin/alternatives --display java
 
# Version einstellen
/usr/sbin/alternatives --config java
# Version auswählen
 
# testen
java -version
java version "1.8.0_151"

nmon - Htop für das Performance Monitoring

Siehe auch http://hisham.hm/htop/

 yum install htop

siehe auch http://nmon.sourceforge.net/pmwiki.php?n=Site.Download

nmon16b_arm.tar.gz

wget http://sourceforge.net/projects/nmon/files/nmon16b_arm.tar.gz
 
tar xvfz nmon16b_arm.tar.gz
 
chmod 777 nmon16b_arm_raspian
 
cp nmon16b_arm_raspian /sbin/nmon

Unifi Software installieren

Unfi User

groupadd -g 1100 unifi
useradd -u 1101 -g unifi unifi
mkdir /var/lib/unifi 
mkdir /var/log/unifi 
mkdir /var/run/unifi
chown -R unifi:unifi UniFi/
chown -R unifi /var/lib/unifi /var/log/unifi /var/run/unifi

Mongo DB Server

yum install mongodb-server
 
# Verzeichnisse anlegen
mkdir /srv/mongodb
mkdir /var/log/mongodb
 
# config Datei anlegen
vi /etc/mongodb.conf
 
# See http://www.mongodb.org/display/DOCS/File+Based+Configuration for format details
# Run mongod --help to see a list of options
 
bind_ip = 127.0.0.1
quiet = true
dbpath = /srv/mongodb
logpath = /var/log/mongodb/mongod.log
logappend = true
 
 
# Vorerst manuell starten mit
 
/usr/bin/mongod --config /etc/mongodb.conf
 
# Autostart muss dann noch eingerichtet werden!

Unifi Software

Für Fedberry bzw. Redhat Linux Derivate steht keinen direkteren Download zur Verfügung.

Aber in einem inoffiziellen Repostitory gibt es eine Variante für Linux auf X86

# Ein dnf install http://dl.marmotte.net/rpms/redhat/el7/x86_64/unifi-controller-5.6.22-1.el7/unifi-controller-5.6.22-1.el7.src.rpm
# klappt wegen falscher Architektur nicht
# RPM direkt verwendet
wget http://dl.marmotte.net/rpms/redhat/el7/x86_64/unifi-controller-5.6.22-1.el7/unifi-controller-5.6.22-1.el7.src.rpm
rpm -ivh --ignorearch unifi-controller-5.6.22-1.el7.x86_64.rpm
#Rechte vergeben
chown -R unifi:unifi /opt/UniFi
cd /opt/UniFi
cat Readme.txt
# hmm, mal sehen ob das dann auch sauber so läuft ...

Unifi Software starten

cd /opt/UniFi
 
#Port und IP Adresse einstellen
# Sonst horcht die Anwendung nicht auf der IP4 Adresse!
vi /opt/UniFi/data/system.properties
 
portal.http.port=8880
portal.https.port=8843
system_ip=192.168.1.210
unifi.http.port=8080
unifi.https.port=8443
#Starten mit :
java -jar lib/ace.jar start
 
# in einer zweiten Session prüfen ob das auch geklappt hat:
 
netstat -tlpn
 
#Firewall erstmal ausschalten
 
systemctl list-unit-files --state=enabled | grep firewall
 
systemctl stop firewalld.service
# Besser die richtigen Regeln eintragen!
systemctl disable  firewalld.service

Nun kann im Browser die Unifi Oberfläche aufgerufen werden http:\\<your_server>:8080.

Wizard durcharbeiten bzw. hier bereits das Backup einspielen.

Einstellungen vom alten Controler (Softwareversion) retten

Im nächsten Schritt will ich dann versuchen das Backup von meinem „Software“ Kontroller auf dem neuen „Hardware“ Kontroller zu aktivieren.

Über Settings/Maintaince ein Backup herunterladen und im neuen Kontroller wieder einspielen.



Feintuning

Bei der inoffiziellen Variante fehlen z.B. die Autostart Skripte, die Debian Variante lässt sich zwar nicht nach RPM umwandeln aber auspacken, d.h. wir können das auch manuell zusammensetzen und damit evtl. sogar eine Auto Update fähige Variante erhalten. Hierzu mit Alien das DB Package ausgepackt.

!Achtung, ab jetzt wird es ein gebastel und etwas wirr …..!

Alien verwenden um das Debian Package zu analysieren

yum install alien
cd /srv
 
wget http://dl.ubnt.com/unifi/5.6.22/unifi_sysvinit_all.deb
 
# alles auspacken in das RPM Format
alien --to-rpm   unifi_sysvinit_all.deb --scripts -v --generate
 
# Wieder ein RPM Bauen
rpmbuild --buildroot=/srv/unifi-5.6.22 -bb unifi-5.6.22-10206.spec
 
#das läßt sich dann leider nicht so einfach einspielen da die Pfade komplett anders lauten

Nun haben wir aber alle Scripte aus dem Debian Package + den Code der Applikation und können das auch so installieren, bzw. die Start Skripte entsprechend umbauen.

Scripte übernehmen:

cd /srv/unifi-5.6.22_arm/usr/lib/unifi/bin
 
cp ubnt-apttool unifi.init /opt/UniFi/bin/
 
#anpassen 
vi /opt/UniFi/bin/unifi.init
 
 
set_java_home () {
 
        # hack add your acutal Java 8 Home directly
        JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.fc25.arm
        return
 
...
BASEDIR="/opt/UniFi"
....
 
 
# nach 
cd /srv/unifi-5.6.22_arm/lib/systemd/system
#Datei unifi.service anpassen
 
vi unifi.service
 
[Unit]
Description=unifi
After=local-fs.target remote-fs.target network-online.target
Wants=network-online.target
Conflicts=shutdown.target
 
[Service]
Type=forking
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
RemainAfterExit=yes
ExecStart=/opt/UniFi/bin/unifi.init start
ExecStop=/opt/UniFi/bin/unifi.init stop
ExecReload=/opt/UniFi/bin/unifi.init reload
 
[Install]
WantedBy=multi-user.target
 
 
# Datei nach /usr/lib/systemd/system/ kopieren
 
#save copy 
mv /usr/lib/systemd/system/unifi.service /tmp
 
cp unifi.service /usr/lib/systemd/system/
 
 
systemctl enable unifi
Created symlink /etc/systemd/system/multi-user.target.wants/unifi.service → /usr/lib/systemd/system/unifi.service.
 
 
# /lib/lsb/init-functions nach installieren
yum install redhat-lsb-core
# jsvc - Java start as service
yum install apache-commons-daemon-jsvc
 
 
mkdir /var/lib/unifi
mkdir /var/log/unifi
mkdir /var/run/unifi
 
#https://serverfault.com/questions/643006/what-is-status-of-proc-and-how-do-i-call-it
# add to /lib/lsb/init-functions
 
vi /lib/lsb/init-functions
 
status_of_proc () 
{ 
    local pidfile daemon name status OPTIND;
    pidfile=;
    OPTIND=1;
    while getopts p: opt; do
        case "$opt" in 
            p)
                pidfile="$OPTARG"
            ;;
        esac;
    done;
    shift $(($OPTIND - 1));
    if [ -n "$pidfile" ]; then
        pidfile="-p $pidfile";
    fi;
    daemon="$1";
    name="$2";
    status="0";
    pidofproc $pidfile $daemon > /dev/null || status="$?";
    if [ "$status" = 0 ]; then
        log_success_msg "$name is running";
        return 0;
    else
        if [ "$status" = 4 ]; then
            log_failure_msg "could not access PID file for $name";
            return $status;
        else
            log_failure_msg "$name is not running";
            return $status;
        fi;
    fi
}
log_daemon_msg () {
    # Dummy function to be replaced by LSB library.
 
    echo $@
}
 
log_end_msg () {
    # Dummy function to be replaced by LSB library.
 
    if test "$1" != "0"; then
      echo "Error with $DESCRIPTION: $NAME"
    fi
    return $1
}
 
#jetzt fehlt noch die Commons Demon jar .-(
 
# https://commons.apache.org/proper/commons-daemon/download_daemon.cgi
 
cd /srv/
wget http://mirrors.ae-online.de/apache//commons/daemon/binaries/commons-daemon-1.1.0-bin.tar.gz
 
tar xvfz commons-daemon-1.1.0-bin.tar.gz
 
cd  /srv/commons-daemon-1.1.0
 
ln -s  /srv/commons-daemon-1.1.0/commons-daemon-1.1.0.jar /usr/share/java/commons-daemon.jar

Leider start der Controller nicht sauber, keine echten Fehlermeldungen .. tippe auf ein Problem mit Pfaden bzw. Klassenpfaden.

Hmm, mal sehen ob sich die Mühe lohnt oder doch lieber kaufen…

Demnächst mehr (vieleicht …)


Quellen

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
"Autor: Gunther Pipperr"
raspberry/fedberry_quick_install.txt · Zuletzt geändert: 2018/01/30 16:20 von Gunther Pippèrr