====== openQRM - Tabellen für weitere IP-Gruppen ====== Wenn diese Dateien ins System übernommen wurden, dann müssen die erforderlichen Anpassungen in der DNS-Konfiguration: [[openQRM - DNS]] noch vorgenommen werden, damit die DNS-Einträge für die zusätzlichen IP's auch automatisch beim anlegen der Appliance vorgenommen werden. ===== Die Dateien ===== ==== einpacken ==== # tar cvf /var/lib/dokuwiki/data/media/openqrm_zimmer.tar /opt/bin/netzcfg.sh /opt/etc/zimmer_ip.cfg /usr/lib/cgi-bin/zimmer_ip-machen.cgi /usr/lib/cgi-bin/zimmer_netzcfg.cgi /var/www/zimmer_ipgroup_loeschen.php /var/www/zimmer_ipgroup-machen.php /usr/lib/cgi-bin/zimmer_iptable-aendern.cgi /opt/bin/ziptables_zeigen.sh /opt/bin/in_zipgroups_eintragen.sh /opt/bin/aus_zipgroups_austragen.sh /opt/bin/zipgroups_managen.sh /opt/bin/zipgroups_zeigen_html.sh /usr/share/openqrm/web/base/server/appliance/appliance-index.php /usr/share/openqrm/web/base/server/appliance/appliance-new.php /var/www/zimmer_ipgroup-machen.php ==== Liste der verpackten Dateien ==== -rwxr-xr-x 1 root root 297 2010-08-06 14:19 /opt/bin/aus_zipgroups_austragen.sh -rwxr-xr-x 1 root root 1512 2010-08-06 14:20 /opt/bin/in_zipgroups_eintragen.sh -rwxr-xr-x 1 root root 2945 2010-10-15 18:40 /opt/bin/netzcfg.sh -rwxr-xr-x 1 root root 2377 2010-08-06 17:53 /opt/bin/zipgroups_managen.sh -rwxr-xr-x 1 root root 2127 2010-08-05 12:53 /opt/bin/zipgroups_zeigen_html.sh -rwxr-xr-x 1 root root 312 2010-08-06 13:41 /opt/bin/ziptables_zeigen.sh -rw-r--r-- 1 root root 1046 2010-08-03 14:51 /opt/etc/zimmer_ip.cfg -rwxr-xr-x 1 root root 15724 2010-10-19 11:42 /usr/lib/cgi-bin/zimmer_ip-machen.cgi -rwxr-xr-x 1 root root 9076 2010-08-05 14:56 /usr/lib/cgi-bin/zimmer_iptable-aendern.cgi -rwxr-xr-x 1 root root 623 2010-10-15 18:31 /usr/lib/cgi-bin/zimmer_netzcfg.cgi -rw-r--r-- 1 root root 12562 2010-08-06 13:36 /usr/share/openqrm/web/base/server/appliance/appliance-index.php -rw-r--r-- 1 root root 15234 2010-08-06 10:35 /usr/share/openqrm/web/base/server/appliance/appliance-new.php -rw-r--r-- 1 root root 916 2010-10-15 17:03 /var/www/zimmer_ipgroup_loeschen.php -rw-r--r-- 1 root root 3627 2010-10-15 16:25 /var/www/zimmer_ipgroup-machen.php ==== Dateien installieren ==== Die Datenbank-Tabellen werden automatisch angelegt, hier ist also keine Handarbeit nötig. === auspacken === # tar xvf /var/lib/dokuwiki/data/media/openqrm_zimmer.tar -C / # cp /opt/bin/netzcfg.sh /usr/share/openqrm/web/boot-service/netzcfg.sh === damit die IP-Vergabe geloggt werden kann === # touch /var/log/zipgroups_managen.log # chown www-data:www-data /var/log/zipgroups_managen.log ===== /opt/etc/openqrm_sudo ===== www-data ALL=(ALL) NOPASSWD: /etc/init.d/nagios3 www-data ALL=(ALL) NOPASSWD: /etc/init.d/bind9 www-data ALL=(ALL) NOPASSWD: /opt/bin/in_zipgroups_eintragen.sh www-data ALL=(ALL) NOPASSWD: /opt/bin/aus_zipgroups_austragen.sh Wichtig ist hierbei, dass //sudo// in diesem Verzeichnis keine symbolischen Link's akzeptiert! # cp /opt/etc/openqrm_sudo /etc/sudoers.d/ # chmod 0440 /etc/sudoers.d/openqrm_sudo Sollte dort ein symbolischen Link liegen, dann bekommt man solchen Output: sudo: /etc/sudoers.d/openqrm_sudo is not a regular file >>> /etc/sudoers.d/README: /etc/sudoers.d/openqrm_sudo near line 18 <<< sudo: parse error in /etc/sudoers.d/README near line 18 sudo: no valid sudoers sources found, quitting *** glibc detected *** sudo: double free or corruption (!prev): 0x0000000001328910 *** ======= Backtrace: ========= /lib/libc.so.6(+0x775b6)[0x7f523eab85b6] /lib/libc.so.6(cfree+0x73)[0x7f523eabee83] /lib/libc.so.6(fclose+0x14d)[0x7f523eaa8abd] sudo[0x41112b] sudo[0x4120c6] sudo[0x40fd24] sudo[0x4139ce] /lib/libc.so.6(__libc_start_main+0xfd)[0x7f523ea5fc4d] sudo[0x403739] ======= Memory map: ======== 00400000-00422000 r-xp 00000000 08:01 8438 /usr/bin/sudo 00621000-00622000 r--p 00021000 08:01 8438 /usr/bin/sudo 00622000-00624000 rw-p 00022000 08:01 8438 /usr/bin/sudo 00624000-00627000 rw-p 00000000 00:00 0 01324000-01345000 rw-p 00000000 00:00 0 [heap] 7f5238000000-7f5238021000 rw-p 00000000 00:00 0 7f5238021000-7f523c000000 ---p 00000000 00:00 0 7f523ddb6000-7f523ddcc000 r-xp 00000000 08:01 94384 /lib/libgcc_s.so.1 7f523ddcc000-7f523dfcb000 ---p 00016000 08:01 94384 /lib/libgcc_s.so.1 7f523dfcb000-7f523dfcc000 r--p 00015000 08:01 94384 /lib/libgcc_s.so.1 7f523dfcc000-7f523dfcd000 rw-p 00016000 08:01 94384 /lib/libgcc_s.so.1 7f523dfcd000-7f523dfd9000 r-xp 00000000 08:01 8798 /lib/libnss_files-2.11.1.so 7f523dfd9000-7f523e1d8000 ---p 0000c000 08:01 8798 /lib/libnss_files-2.11.1.so 7f523e1d8000-7f523e1d9000 r--p 0000b000 08:01 8798 /lib/libnss_files-2.11.1.so 7f523e1d9000-7f523e1da000 rw-p 0000c000 08:01 8798 /lib/libnss_files-2.11.1.so 7f523e1da000-7f523e1e4000 r-xp 00000000 08:01 8788 /lib/libnss_nis-2.11.1.so 7f523e1e4000-7f523e3e3000 ---p 0000a000 08:01 8788 /lib/libnss_nis-2.11.1.so 7f523e3e3000-7f523e3e4000 r--p 00009000 08:01 8788 /lib/libnss_nis-2.11.1.so 7f523e3e4000-7f523e3e5000 rw-p 0000a000 08:01 8788 /lib/libnss_nis-2.11.1.so 7f523e3e5000-7f523e3fc000 r-xp 00000000 08:01 8215 /lib/libnsl-2.11.1.so 7f523e3fc000-7f523e5fb000 ---p 00017000 08:01 8215 /lib/libnsl-2.11.1.so 7f523e5fb000-7f523e5fc000 r--p 00016000 08:01 8215 /lib/libnsl-2.11.1.so 7f523e5fc000-7f523e5fd000 rw-p 00017000 08:01 8215 /lib/libnsl-2.11.1.so 7f523e5fd000-7f523e5ff000 rw-p 00000000 00:00 0 7f523e5ff000-7f523e607000 r-xp 00000000 08:01 8787 /lib/libnss_compat-2.11.1.so 7f523e607000-7f523e806000 ---p 00008000 08:01 8787 /lib/libnss_compat-2.11.1.so 7f523e806000-7f523e807000 r--p 00007000 08:01 8787 /lib/libnss_compat-2.11.1.so 7f523e807000-7f523e808000 rw-p 00008000 08:01 8787 /lib/libnss_compat-2.11.1.so 7f523e808000-7f523e811000 r-xp 00000000 08:01 8217 /lib/libcrypt-2.11.1.so 7f523e811000-7f523ea11000 ---p 00009000 08:01 8217 /lib/libcrypt-2.11.1.so 7f523ea11000-7f523ea12000 r--p 00009000 08:01 8217 /lib/libcrypt-2.11.1.so 7f523ea12000-7f523ea13000 rw-p 0000a000 08:01 8217 /lib/libcrypt-2.11.1.so 7f523ea13000-7f523ea41000 rw-p 00000000 00:00 0 7f523ea41000-7f523ebbb000 r-xp 00000000 08:01 8795 /lib/libc-2.11.1.so 7f523ebbb000-7f523edba000 ---p 0017a000 08:01 8795 /lib/libc-2.11.1.so 7f523edba000-7f523edbe000 r--p 00179000 08:01 8795 /lib/libc-2.11.1.so 7f523edbe000-7f523edbf000 rw-p 0017d000 08:01 8795 /lib/libc-2.11.1.so 7f523edbf000-7f523edc4000 rw-p 00000000 00:00 0 7f523edc4000-7f523edc6000 r-xp 00000000 08:01 8799 /lib/libdl-2.11.1.so 7f523edc6000-7f523efc6000 ---p 00002000 08:01 8799 /lib/libdl-2.11.1.so 7f523efc6000-7f523efc7000 r--p 00002000 08:01 8799 /lib/libdl-2.11.1.so 7f523efc7000-7f523efc8000 rw-p 00003000 08:01 8799 /lib/libdl-2.11.1.so 7f523efc8000-7f523efd4000 r-xp 00000000 08:01 241987 /lib/libpam.so.0.82.2 7f523efd4000-7f523f1d3000 ---p 0000c000 08:01 241987 /lib/libpam.so.0.82.2 7f523f1d3000-7f523f1d4000 r--p 0000b000 08:01 241987 /lib/libpam.so.0.82.2 7f523f1d4000-7f523f1d5000 rw-p 0000c000 08:01 241987 /lib/libpam.so.0.82.2 7f523f1d5000-7f523f1f5000 r-xp 00000000 08:01 8216 /lib/ld-2.11.1.so 7f523f3e6000-7f523f3ea000 rw-p 00000000 00:00 0 7f523f3f2000-7f523f3f4000 rw-p 00000000 00:00 0 7f523f3f4000-7f523f3f5000 r--p 0001f000 08:01 8216 /lib/ld-2.11.1.so 7f523f3f5000-7f523f3f6000 rw-p 00020000 08:01 8216 /lib/ld-2.11.1.so 7f523f3f6000-7f523f3f7000 rw-p 00000000 00:00 0 7fffe4b96000-7fffe4bab000 rw-p 00000000 00:00 0 [stack] 7fffe4bff000-7fffe4c00000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] Aborted ===== /opt/etc/zimmer_ip.cfg ===== Hier werden die Tabellennamen für die Gruppentabelle und für die IP-Tabelle sowie die Sortierreihenfolge der Anzeigen festgelegt. . /usr/share/openqrm/etc/openqrm-server.conf ZIPGROUPS="zimmer_ipgroups" ZIPTABLES="zimmer_iptables" ZIPGORDER="ig_id" #ZIPGORDER="ig_name" ZIPTORDER="INET_ATON(ip_address)" DATABASENET='10.4.' EXTERNNET='10.7.' ### Tabellen anlegen, wenn nicht schon vorhanden! echo " CREATE DATABASE IF NOT EXISTS ${OPENQRM_DATABASE_NAME}; USE ${OPENQRM_DATABASE_NAME}; CREATE TABLE IF NOT EXISTS ${ZIPGROUPS} ( ig_id int(5) NOT NULL, ig_name varchar(50) NOT NULL, ig_domain varchar(50) default NULL, PRIMARY KEY (ig_id), KEY (ig_name) ) TYPE=MyISAM; CREATE TABLE IF NOT EXISTS ${ZIPTABLES} ( ip_ig_id int(5) NOT NULL, ip_eth varchar(8) default 'eth1', ip_hostname varchar(50), ip_domain varchar(50) NOT NULL, ip_address varchar(15) NOT NULL, ip_subnet varchar(15), ip_gateway varchar(15), ip_dns1 varchar(15), ip_dns2 varchar(15), PRIMARY KEY (ip_address) ) TYPE=MyISAM; " | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} ===== /opt/bin/netzcfg.sh ===== Dieses Script wird vom Clienten ausgeführt, um die zusätzliche Netzwerkkonfiguration durchzuführen. #!/bin/bash aptitude -y install links ethtool LINKS="$(which links)" if [ -n "${LINKS}" ] ; then . /var/openqrm/openqrm-resource.conf IFS="|" ${LINKS} -dump http://${resource_openqrmserver}/cgi-bin/zimmer_netzcfg.cgi?ip_hostname=$(hostname) | egrep -v '[\+\|]---------' | while read ANFANG ip_eth ip_hostname ip_domain ip_address ip_subnet ip_gateway ip_dns1 ip_dns2 ENDE do ip_eth="$(echo "${ip_eth}" | awk '{print $1}')" ip_hostname="$(echo "${ip_hostname}" | awk '{print $1}')" ip_domain="$(echo "${ip_domain}" | awk '{print $1}')" ip_address="$(echo "${ip_address}" | awk '{print $1}')" ip_subnet="$(echo "${ip_subnet}" | sed 's/%22//g' | awk '{print $1}')" ip_gateway="$(echo "${ip_gateway}" | sed 's/%22//g' | awk '{print $1}')" ip_dns1="$(echo "${ip_dns1}" | sed 's/%22//g' | awk '{print $1}')" ip_dns2="$(echo "${ip_dns2}" | sed 's/%22//g' | awk '{print $1}')" if [ -z "${1}" ] ; then if [ -n "${ip_address}" -a -n "${ip_eth}" -a "${ip_address}" != "NULL" -a "${ip_eth}" != "NULL" ] ; then echo "ip addr add ${ip_address}/${ip_subnet} dev ${ip_eth}" ip addr add ${ip_address}/${ip_subnet} dev ${ip_eth} echo "ip link set ${ip_eth} up" ip link set ${ip_eth} up fi if [ -n "${ip_gateway}" -a -n "${ip_eth}" -a "${ip_gateway}" != "NULL" -a "${ip_eth}" != "NULL" ] ; then if $(ip route | egrep ^default > /dev/null) ; then echo "ip route add ${ip_gateway} dev ${ip_eth}" ip route add ${ip_gateway} dev ${ip_eth} else echo "ip route add default via ${ip_gateway} dev ${ip_eth}" ip route add default via ${ip_gateway} dev ${ip_eth} fi fi if [ -n "${ip_domain}" -o -n "${ip_dns1}" -o -n "${ip_dns2}" -a "${ip_domain}" != "NULL" -a "${ip_dns1}" != "NULL" -a "${ip_dns2}" != "NULL" ] ; then echo "search idstein.alphatel.de victorvox.net med.alphatel.de alphatel.de database extern" \ # | tee /etc/resolv.conf fi if [ -n "${ip_domain}" -a "${ip_domain}" != "NULL" ] ; then echo "domain ${ip_domain}" \ # | tee -a /etc/resolv.conf fi if [ -n "${ip_dns1}" -a "${ip_dns1}" != "NULL" ] ; then echo "nameserver ${ip_dns1}" \ # | tee -a /etc/resolv.conf fi if [ -n "${ip_dns2}" -a "${ip_dns2}" != "NULL" ] ; then echo "nameserver ${ip_dns2}" \ # | tee -a /etc/resolv.conf fi else echo " ANFANG='${ANFANG}' ip_eth='${ip_eth}' ip_hostname='${ip_hostname}' ip_domain='${ip_domain}' ip_address='${ip_address}' ip_subnet='${ip_subnet}' ip_gateway='${ip_gateway}' ip_dns1='${ip_dns1}' ip_dns2='${ip_dns2}' ENDE='${ENDE}' " fi done else echo "links konnte nicht installiert werden" fi ===== /usr/lib/cgi-bin/zimmer_netzcfg.cgi ===== #!/bin/sh . /opt/etc/zimmer_ip.cfg ### GET AKTION="$(echo "${QUERY_STRING}" | awk -F'=' '{print $1}')" WERT="$(echo "${QUERY_STRING}" | awk -F'=' '{print $2}' | awk -F'&' '{print $1}')" if [ "${AKTION}" = "ip_hostname" ] ; then echo 'Content-type: text/html ' echo " SELECT ip_eth,ip_hostname,ip_domain,ip_address,ip_subnet,ip_gateway,ip_dns1,ip_dns2 FROM ${ZIPTABLES} WHERE ip_hostname='${WERT}' ORDER BY ip_eth DESC ; " | mysql -H -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} fi chmod 0755 /usr/lib/cgi-bin/zimmer_netzcfg.cgi ===== /usr/share/openqrm/web/base/top.php ===== Hier ist die Zeile mit **/cgi-bin/zimmer_ip-machen.cgi** eingefühgt worden: ....
.... ===== /usr/lib/cgi-bin/zimmer_ip-machen.cgi ===== Dieses Script ist das Herzstück, hier werden alle wichtigen Aktionen mit realisiert. #!/bin/sh DATENDATEI="$(mktemp /tmp/zimmer.XXXXXXXXXXXX)" ### POST-Daten werden in eine Datei geschrieben echo "$(dd bs=1 count=${CONTENT_LENGTH} 2> /dev/null | tr -s '&' '\n')" | tr -d '"' > ${DATENDATEI} 2>&1 . ${DATENDATEI} . /opt/etc/zimmer_ip.cfg ### GET AKTION="$(echo "${QUERY_STRING}" | awk -F'=' '{print $1}')" WERT="$(echo "${QUERY_STRING}" | awk -F'=' '{print $2}')" ### Achtung! # "action" englisch und klein geschrieben, ist die Variable aus dem POST-Datenstrom; # "AKTION" deutsch und groß geschrieben, ist aus der GET-Zeile if [ -n "${1}" -a -z "${AKTION}" ] ; then AKTION="$(echo "${1}" | awk -F'=' '{print $1}')" WERT="$(echo "${1}" | awk -F'=' '{print $2}')" fi ### mit dem richtigen "action"-Eintrag wird eine neue Gruppe erstelt if [ "${action}" = "angelegt" ] ; then #------------------------------------------------------------------------------# ### den neuen Wert für ig_id bestimmen ZAHLEN1="$(mktemp /tmp/zimmer.XXXXXXXXXXXX)" ZAHLEN2="$(mktemp /tmp/zimmer.XXXXXXXXXXXX)" igidmax="$(echo "SELECT ig_id FROM ${ZIPGROUPS} ORDER BY ${ZIPGORDER} DESC LIMIT 1;"|mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})" echo "$(seq 1 ${igidmax})" > ${ZAHLEN1} echo " SELECT ig_id FROM ${ZIPGROUPS} ORDER BY ${ZIPGORDER} ASC; "|mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} | egrep -v '^$' > ${ZAHLEN2} ig_id="$(sdiff ${ZAHLEN1} ${ZAHLEN2} | fgrep '<' | awk '{print $1}' | head -n1)" if [ -z "${ig_id}" -o "${ig_id}" = "0" ] ; then ig_id="$((${igidmax}+1))" fi rm -f ${ZAHLEN1} ${ZAHLEN2} ### der "action"-Eintrag wird entfernt sed -i -e 's/action=angelegt//' -e 's/ip_adressen=.*//' -e 's/ig_name=.*//' ${DATENDATEI} ### die neue Gruppe wird erstelt (echo "INSERT INTO ${ZIPGROUPS} (ig_id,ig_name,ig_domain) VALUES ('${ig_id}','${ig_name}','${ip_domain}');" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1 ### IPs in die Tabelle eintragen echo "${ip_adressen}" | sed -e 's#%0D%0A#\n#g' | egrep -v '^$' | while read ADRESSE do echo "INSERT INTO ${ZIPTABLES} (ip_ig_id,ip_address,$(cat ${DATENDATEI}|egrep -v '^$'|awk -F'=' '{print $1}'|tr -s '\n' ','|sed 's/,$//')) VALUES ('${ig_id}','${ADRESSE}',$(cat ${DATENDATEI}|egrep -v '^$'|awk -F'=' '{print $2}'|sed "s/.*/'&'/"|tr -s '\n' ','|sed "s/',$/'/"));" done) | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1 ### und noch ein schöner Gruß /usr/lib/cgi-bin/zimmer_ip-machen.cgi elif [ "${action}" = "aendern" ] ; then sed -i -e 's/action=aendern//' ${DATENDATEI} echo 'Content-type: text/html