Targetcli Skript

Hi,

wenn man einen Standard-Linux-Server zur Bereitstellung von Speicher per Fibre-Channel nutzen möchte, kann man das Tool Targetcli benutzen.
Ich habe ein Skript zum Konfigurieren eines Fibre-Channel Targets auf einem Linux Host geschrieben.
Nachdem das Target angelegt ist, soll eine Lun angelegt werden und die entsprechend gezonten Server Zugriff erhalten.

Hinweis: Hier wird ein Qlogic 2562 HBA verwendet. Dieser funktioniert mit targetcli sehr gut.

addfclun.sh

#!/bin/bash
port1=`targetcli “/qla2xxx/ info” |awk ‘/Allowed WWNs list/’ |cut -d’:’ -f2 |awk -F’,’ ‘{print $1}’|cut -c2-21`
port2=`targetcli “/qla2xxx/ info” |awk ‘/Allowed WWNs list/’ |cut -d’:’ -f2 |awk -F’,’ ‘{print $2}’|cut -c2-21`

function createtarget {
targetcli /qla2xxx create $port1
targetcli /qla2xxx create $port2
}
function createlun {
read -p “Bitte den Namen der Lun angeben: ” lunname
ls /dev/mapper
read -p “Bitte Logical-Volume angeben (voller Pfad): ” lv
targetcli /backstores/block create $lunname $lv
targetcli /qla2xxx/$port1/luns create /backstores/block/$lunname
targetcli /qla2xxx/$port2/luns create /backstores/block/$lunname
}
function maplun {
read -p “Bitte die WWN des ersten Ports des anzubindenden Servers angeben: ” wwn1
targetcli /qla2xxx/$port1/acls create $wwn1
read -p “Bitte die WWN des zweiten Ports des anzubindenden Servers angeben: ” wwn2
targetcli /qla2xxx/$port2/acls create $wwn2
}

PS3=”Auswahl: ”
echo “Was moechten sie tun: ”
select aufgabe in “Target anlegen” “Lun anlegen” “Lun mappen” “beenden”;
do
case $aufgabe in
“Target anlegen”) createtarget;;
“Lun anlegen”) createlun ;;
“Lun mappen”) maplun ;;
“beenden”) break;;
esac
done

Cisco Nexus 5k with Cisco UCS scripted FC-Zoning configuration

Infrastruktur

Seit ca einem Jahr haben wir im Datacenter-Bereich eine homogene Cisco-Infrastruktur. Im Rahmen eines Projektes sind Cisco UCS Systeme zusammen mit Cisco Nexus 5k Datacenter Switches beschafft worden.
Wir haben an zwei Standorten jeweiles zwei Nexus-Switches, an dem pro Seite jeweils ein Storage-System angeschlossen ist.
Zusätzlich haben wir an beiden Standorten Cisco-Ucs-Systeme aufgebaut.
Wir haben uns nun überlegt, wie wir unsere Server (und Blades) an die Nexus-Infrastruktur anbinden und haben uns dann für Fibre-Channel entschieden.
Dann stellte sich die Frage, wie man dann das Zoning über die Nexus-Switches löst. Klar ist, diese Aufgabe müssen wir Serveradmins übernehmen. Nachdem wir uns den Cisco Prime Datacenter Network Manager angeschaut hatten (Gui Lösung zum Managen von unter anderem auch Nexus-Switches) war uns klar, dass wir das lieber über die Konsole per Script machen wollen.
Natürlich ist bei vielen die Infrastruktur unterschiedlich und wir haben es bei uns auch bewusst relativ einfach gehalten.
Es wird also nur in einer Fabric ein Port des Storages auf einen Port des Servers gezont.

Skriptaufbau

Wir haben auf einem zentralen Linux-Server ein Skript gebaut, welches einen bestendenden Storage mit einem Server verbindet.
Was soll das Skript nun genau tun?
Das Skript soll sich zu den Fabric-Interconnects verbinden, sich von dort die Service-Profile holen und diese in einem Auswahlmenü präsentieren.
Dann soll die WWPN der vHBAs des ausgewählten Service-Profils besorgt werden und in ein Array geladen werden.
Schließlich soll der Device-Alias angelegt, die Zone gebaut und zum Zoneset hinzugefügt werden. Nach einer Sichtprüfung soll abgefragt werden ob die Zone jetzt aktiviert werden soll.
Das wars im Prinzip schon. Die eigentliche Konfiguration der Nexus-Switches wird per Shell-Funktion vorgenommen.
Hier das Skript.

#!/bin/bash
#
# Funktion zum Überprüfen ob ein (der Funktion mitgegebenes) Element im Array der Service-Profiles von FI-E12 existiert
function exists() {
element=${1}
for i in ${arraye12[@]}; 
do
if [ $i == $element ]; 
then
echo "1"
fi
done
return 0
}
# Wegschreiben der Daten in einen Ordner, der nach dem aktuellen Datum + Uhrzeit benannt ist
DATE=`date +%d%m%y-%H%M`
mkdir -p /home/vi-admin/Backup/Zoning/$DATE
FOLDER=/home/vi-admin/Backup/Zoning/$DATE
#
# Fest definierter Storage, mit dem gezont werden soll. Achtung: Diese Namen müssen als Device-Alias im jeweiligen Nexus existieren.
STORAGE1="VSTORE1"
STORAGE2="VSTORE2"
# Funktion zum Erstellen der Zone auf NX1
function createzonenx1 {
echo "conf t" > createzonenx1_$ziel.txt
echo "zone name $ziel"_Port1" vsan 1234" >> createzonenx1_$ziel.txt
echo "member device-alias $STORAGE1"_Port1"" >> createzonenx1_$ziel.txt
echo "member device-alias $ziel"_Port1"" >> createzonenx1_$ziel.txt
echo "sh zone" >> createzonenx1_$ziel.txt
ssh fczoning@nexus1 < createzonenx1_$ziel.txt 
mv createzonenx1_$ziel.txt $FOLDER/ 
} 
# Funktion zum Erstellen der Zone auf NX2 
function createzonenx2 { 
echo "conf t" > createzonenx2_$ziel.txt
echo "zone name $ziel"_Port2" vsan 4321" >> createzonenx2_$ziel.txt
echo "member device-alias $STORAGE1"_Port2"" >> createzonenx2_$ziel.txt
echo "member device-alias $ziel"_Port2"" >> createzonenx2_$ziel.txt
echo "sh zone" >> createzonenx2_$ziel.txt
ssh fczoning@nexus2 < createzonenx2_$ziel.txt 
mv createzonenx2_$ziel.txt $FOLDER/ 
}
# Funktion zum Erstellen der Zone auf NX3 
function createzonenx3 { 
echo "conf t" > createzonenx3_$ziel.txt
echo "zone name $ziel"_Port1" vsan 1234" >> createzonenx3_$ziel.txt
echo "member device-alias $STORAGE2"_Port1"" >> createzonenx3_$ziel.txt
echo "member device-alias $ziel"_Port1"" >> createzonenx3_$ziel.txt
echo "sh zone" >> createzonenx3_$ziel.txt
ssh fczoning@nexus3 < createzonenx3_$ziel.txt 
mv createzonenx3_$ziel.txt $FOLDER/ 
} 
# Funktion zum Erstellen der Zone auf NX4 
function createzonenx4 { 
echo "conf t" > createzonenx4_$ziel.txt
echo "zone name $ziel"_Port2" vsan 4321" >> createzonenx4_$ziel.txt
echo "member device-alias $STORAGE2"_Port2"" >> createzonenx4_$ziel.txt
echo "member device-alias $ziel"_Port2"" >> createzonenx4_$ziel.txt
echo "sh zone" >> createzonenx4_$ziel.txt
ssh fczoning@nexus4 < createzonenx4_$ziel.txt 
mv createzonenx4_$ziel.txt $FOLDER/ 
} 
# Funktion zum Hinzufügen der Zone zum Zoneset auf NX1 
function addzonesetnx1 {
echo "conf t" > addzonesetnx1_$ziel.txt
echo "zoneset name FABRICA_UCS1 vsan 1234" >> addzonesetnx1_$ziel.txt
echo "member $ziel"_Port1"" >> addzonesetnx1_$ziel.txt
echo "sh zoneset" >> addzonesetnx1_$ziel.txt
ssh fczoning@nexus1 < addzonesetnx1_$ziel.txt 
mv addzonesetnx1_$ziel.txt $FOLDER/ 
} 
# Funktion zum Hinzufügen der Zone zum Zoneset auf NX2 
function addzonesetnx2 { 
echo "conf t" > addzonesetnx2_$ziel.txt
echo "zoneset name FABRICB_UCS1 vsan 4321" >> addzonesetnx2_$ziel.txt
echo "member $ziel"_Port2"" >> addzonesetnx2_$ziel.txt
echo "sh zoneset" >> addzonesetnx2_$ziel.txt
ssh fczoning@nexus2 < addzonesetnx2_$ziel.txt 
mv addzonesetnx2_$ziel.txt $FOLDER/ 
} 
# Funktion zum Hinzufügen der Zone zum Zoneset auf NX3 
function addzonesetnx3 { 
echo "conf t" > addzonesetnx3_$ziel.txt
echo "zoneset name FABRICA_UCS1 vsan 1234" >> addzonesetnx3_$ziel.txt
echo "member $ziel"_Port1"" >> addzonesetnx3_$ziel.txt
echo "sh zoneset" >> addzonesetnx3_$ziel.txt
ssh fczoning@nexus3 < addzonesetnx3_$ziel.txt 
mv addzonesetnx3_$ziel.txt $FOLDER/ 
} 
# Funktion zum Hinzufügen der Zone zum Zoneset auf NX4 
function addzonesetnx4 { 
echo "conf t" > addzonesetnx4_$ziel.txt
echo "zoneset name FABRICB_UCS1 vsan 4321" >> addzonesetnx4_$ziel.txt
echo "member $ziel"_Port2"" >> addzonesetnx4_$ziel.txt
echo "sh zoneset" >> addzonesetnx4_$ziel.txt
ssh fczoning@nexus4 < addzonesetnx4_$ziel.txt 
mv addzonesetnx4_$ziel.txt $FOLDER/ 
} 
# Funktion zum Erstellen des Device-Alias des Service-Profiles auf NX1 
function createdevicealiasnx1 { 
echo "conf t" > createdevicealiasnx1_$ziel.txt
echo "device-alias database" >> createdevicealiasnx1_$ziel.txt
echo "device-alias name $ziel"_Port1" pwwn $i" >> createdevicealiasnx1_$ziel.txt
echo "device-alias commit" >> createdevicealiasnx1_$ziel.txt
echo "sh device-alias database" >> createdevicealiasnx1_$ziel.txt
ssh fczoning@nexus1 < createdevicealiasnx1_$ziel.txt 
mv createdevicealiasnx1_$ziel.txt $FOLDER/ 
} 
# Funktion zum Erstellen des Device-Alias des Service-Profiles auf NX2 
function createdevicealiasnx2 { 
echo "conf t" > createdevicealiasnx2_$ziel.txt
echo "device-alias database" >> createdevicealiasnx2_$ziel.txt
echo "device-alias name $ziel"_Port2" pwwn $i" >> createdevicealiasnx2_$ziel.txt
echo "device-alias commit" >> createdevicealiasnx2_$ziel.txt
echo "sh device-alias database" >> createdevicealiasnx2_$ziel.txt
ssh fczoning@nexus2 < createdevicealiasnx2_$ziel.txt 
mv createdevicealiasnx2_$ziel.txt $FOLDER/ 
} 
# Funktion zum Erstellen des Device-Alias des Service-Profiles auf NX3 
function createdevicealiasnx3 { 
echo "conf t" > createdevicealiasnx3_$ziel.txt
echo "device-alias database" >> createdevicealiasnx3_$ziel.txt
echo "device-alias name $ziel"_Port1" pwwn $i" >> createdevicealiasnx3_$ziel.txt
echo "device-alias commit" >> createdevicealiasnx3_$ziel.txt
echo "sh device-alias database" >> createdevicealiasnx3_$ziel.txt
ssh fczoning@nexus3 < createdevicealiasnx3_$ziel.txt 
mv createdevicealiasnx3_$ziel.txt $FOLDER/ 
} 
# Funktion zum Erstellen des Device-Alias des Service-Profiles auf NX4 
function createdevicealiasnx4 { 
echo "conf t" > createdevicealiasnx4_$ziel.txt
echo "device-alias database" >> createdevicealiasnx4_$ziel.txt
echo "device-alias name $ziel"_Port2" pwwn $i" >> createdevicealiasnx4_$ziel.txt
echo "device-alias commit" >> createdevicealiasnx4_$ziel.txt
echo "sh device-alias database" >> createdevicealiasnx4_$ziel.txt
ssh fczoning@nexus4 < createdevicealiasnx4_$ziel.txt 
mv createdevicealiasnx4_$ziel.txt $FOLDER/ 
} 
# Funktion zum Aktivieren des Zonesets auf NX1 
function activatezonesetnx1 { 
echo "conf t" > activatezonesetnx1_$ziel.txt
echo "zoneset activate name FABRICA_UCS1 vsan 1234" >> activatezonesetnx1_$ziel.txt
echo "wr" >> activatezonesetnx1_$ziel.txt
ssh fczoning@nexus1 < activatezonesetnx1_$ziel.txt 
mv activatezonesetnx1_$ziel.txt $FOLDER/ 
} 
# Funktion zum Aktivieren des Zonesets auf NX2 
function activatezonesetnx2 { 
echo "conf t" > activatezonesetnx2_$ziel.txt
echo "zoneset activate name FABRICB_UCS1 vsan 4321" >> activatezonesetnx2_$ziel.txt
echo "wr" >> activatezonesetnx2_$ziel.txt
ssh fczoning@nexus2 < activatezonesetnx2_$ziel.txt 
mv activatezonesetnx2_$ziel.txt $FOLDER/ 
} 
# Funktion zum Aktivieren des Zonesets auf NX3 
function activatezonesetnx3 { 
echo "conf t" > activatezonesetnx3_$ziel.txt
echo "zoneset activate name FABRICA_UCS1 vsan 1234" >> activatezonesetnx3_$ziel.txt
echo "wr" >> activatezonesetnx3_$ziel.txt
ssh fczoning@nexus3 < activatezonesetnx3_$ziel.txt 
mv activatezonesetnx3_$ziel.txt $FOLDER/ 
} 
# Funktion zum Aktivieren des Zonesets auf NX4 
function activatezonesetnx4 { 
echo "conf t" > activatezonesetnx4_$ziel.txt
echo "zoneset activate name FABRICB_UCS1 vsan 4321" >> activatezonesetnx4_$ziel.txt
echo "wr" >> activatezonesetnx4_$ziel.txt
ssh fczoning@nexus4 < activatezonesetnx4_$ziel.txt 
mv activatezonesetnx4_$ziel.txt $FOLDER/ 
} 
# Alle Service-Profiles von fi1 und fi2 laden und in jeweils ein Array laden 
arraye12=(`ssh fczoning@fi1 "scope org AAA;show service-profile" |awk {'print $1'} |egrep -v "(Service|-)"| cut -c5-`) 
arraye21=(`ssh fczoning@fi2 "scope org AAA;show service-profile" |awk {'print $1'} |egrep -v "(Service|-)"| cut -c5-`) 
# Per Menü ein Service-Profile auswählen 
PS3="Auswahl: " echo "Bitte das Service Profil auswählen: " 
select ziel in "${arraye12[@]}" "${arraye21[@]}" "beenden"; 
do 
if [ $ziel == "beenden" ]; 
then 
break 
fi 
echo $ziel 
# Wenn das gewählte Service-Profile in Arraye12 existiert, dann Methoden für fi1 bzw nx1 und nx2 ausführen 
if [ "$(exists $ziel)" == "1" ]; 
then 
arrhbae12=(`ssh fczoning@fi1 "scope org AAA;scope service-profile \$ziel;show vhba" | awk {'print $3'} | tr '[:upper:]' '[:lower:]' |egrep -v "(id|-)" | tail -n +3`) 
# 3. Element des Arrays abfragen -> Entspricht dem 3.HBA des Service-Profiles
for i in "${arrhbae12[2]}"
do
# Funktionsaufruf. Hier wird der jeweilige Nexus konfiguriert
createdevicealiasnx1
createzonenx1
addzonesetnx1

# Abfrage ob die Zone nun aktiviert werden soll. Mit den Ausgaben der jeweiligen Funktionen kann man überprüfen ob das alles so korrekt ist.
read -p "zoneset jetzt aktivieren? j n: " activate
if [ $activate == "j" ];
then
activatezonesetnx1
fi

done
for i in "${arrhbae12[3]}"
do
# Funktionsaufruf. Hier wird der jeweilige Nexus konfiguriert
createdevicealiasnx2
createzonenx2
addzonesetnx2

# Abfrage ob die Zone nun aktiviert werden soll. Mit den Ausgaben der jeweiligen Funktionen kann man überprüfen ob das alles so korrekt ist.
read -p "zoneset jetzt aktivieren? j n: " activate
if [ $activate == "j" ];
then
activatezonesetnx2
fi
done
exit 0
else
arrhbae21=(`ssh fczoning@fi2 "scope org AAA;scope service-profile \$ziel;show vhba" | awk {'print $3'} | tr '[:upper:]' '[:lower:]' |egrep -v "(id|-)" | tail -n +3`)
# 4. Element des Arrays abfragen -> Entspricht dem 3.HBA des Service-Profiles
for i in "${arrhbae21[2]}"
do
# Funktionsaufruf. Hier wird der jeweilige Nexus konfiguriert
createdevicealiasnx3
createzonenx3
addzonesetnx3

# Abfrage ob die Zone nun aktiviert werden soll. Mit den Ausgaben der jeweiligen Funktionen kann man überprüfen ob das alles so korrekt ist.
read -p "zoneset jetzt aktivieren? j n: " activate
if [ $activate == "j" ];
then
activatezonesetnx3
fi
done
for i in "${arrhbae21[3]}"
do
# Funktionsaufruf. Hier wird der jeweilige Nexus konfiguriert
createdevicealiasnx4
createzonenx4
addzonesetnx4

# Abfrage ob die Zone nun aktiviert werden soll. Mit den Ausgaben der jeweiligen Funktionen kann man überprüfen ob das alles so korrekt ist.
read -p "zoneset jetzt aktivieren? j n: " activate
if [ $activate == "j" ];
then
activatezonesetnx4
fi
done
fi
break
done

[Motorola Xoom] Ethernet Schnittstelle

Hallo,

dies ist mein erster Beitrag auf meinem Blog zum Thema Android, von daher bitte nicht zu kritisch sein 🙂

OK was brauchen wir dazu?

– Motorola Xoom, klar (leider eignet sich nicht jedes Tablet dazu, Das Gerät muss über USB Strom bereitstellen)
– Root bzw. Custom-Rom
– USB-OTG Adapter
– D-Link DUB-E100-Adapter (geht möglicherweise auch mit anderen, allerdings hab ichs nur mit diesem getestet)
– App namens Ethernet Droid https://play.google.com/store/apps/details?id=com.jrm.trueonline.ethernet&hl=de

Otg-Adapter anschließen, USB-Ethernet-Adapter dran und los gehts.

In der App kann man noch die IP von Hand konfigurieren, wenn man kein DHCP zu Verfügung hat oder nicht nutzen möchte.

IMG_20131022_212039

So sieht der Testaufbau nun aus. Auf dem Tablet läuft ein Ping aufs Standardgateway.

[Powershell]Printserver der Fritzbox neustarten

Hallo,

meine Eltern beklagten sich schon seit längerem darüber, dass ihr Drucker sporadisch nicht drucken bzw. mitten im Druckjob abbrechen würde. Der Drucker ist per USB an eine Fritzbox 7170 angeschlossen und an den Clients per Socket eingebunden.

Ich schaute mir also den Status des USB-Hosts in der Fritzbox an und stellte fest, dass der Drucker im Leerlauf als “beim Drucken” angezeigt wurde.

Da war für mich klar, dass vermutlich der Printserver der Fritzbox das Problem sein würde.

Blöderweise gibt es auf der Fritzbox-Oberfläche keine Möglichkeit, das USB-Subsystem neuzustarten ohne die ganze Fritzbox neu starten zu müssen. Gut, der Anschluss ist keine Komponente, die jederzeit verfübar sein muss, trotzdem ist es nervig.

Ich hatte im Hinterkopf, dass die Fritzbox einen Telnet-Zugang hat. Als alter Linuxer dachte ich mir, dass man über die dann verfügbare Shell das USB-Subsystem per init-skript o.ä durchzustarten.

Genau so funktionierte es auch. Blöderweise verfügen meine Eltern nicht über die Fähigkeit sich per telnet zu connecten und den Service neuzustarten ^^. Ich überlegt also, wie man diesen Vorgang Automatisieren könnte.

Die Lösung: Powershell! Mit der Powershell besteht die Möglichkeit, eine TCP-Verbindung über einen bestimmten Port aufzubauen und darüber Kommandos auszuführen.

Hier also das Skript:

param(
[string] $remoteHost = "",
[int] $port = 23,
[string] $password = "",
[string] $command1 = "/etc/init.d/rc.usbhost stop",
[string] $command2 = "/etc/init.d/rc.usbhost start",
[int] $commandDelay = 1000
)
[string] $output = ""
## Read output from a remote host
function GetOutput
{
## Create a buffer to receive the response
$buffer = new-object System.Byte[] 1024
$encoding = new-object System.Text.AsciiEncoding
$outputBuffer = ""
$foundMore = $false
## Read all the data available from the stream, writing it to the
## output buffer when done.
do
{
## Allow data to buffer for a bit
start-sleep -m 1000
## Read what data is available
$foundmore = $false
$stream.ReadTimeout = 1000
do
{
try
{
$read = $stream.Read($buffer, 0, 1024)
if($read -gt 0)
{
$foundmore = $true
$outputBuffer += ($encoding.GetString($buffer, 0, $read))
}
} catch { $foundMore = $false; $read = 0 }
} while($read -gt 0)
} while($foundmore)
$outputBuffer
}
function Main
{
## Open the socket, and connect to the computer on the specified port
write-host "Connecting to $remoteHost on port $port"
trap { Write-Error "Could not connect to remote computer: $_"; exit }
$socket = new-object System.Net.Sockets.TcpClient($remoteHost, $port)
write-host "Connected. Press ^D followed by [ENTER] to exit.`n"
$stream = $socket.GetStream()
$writer = new-object System.IO.StreamWriter $stream
## Receive the output that has buffered so far
$SCRIPT:output += GetOutput
Start-Sleep -m $commandDelay
$writer.WriteLine($password)
$writer.Flush()
Start-Sleep -m $commandDelay
$writer.WriteLine($command1)
$writer.Flush()
Start-Sleep -m $commandDelay
$writer.WriteLine($command2)
$writer.Flush()
$SCRIPT:output += GetOutput
## Close the streams
$writer.Close()
$stream.Close()
$output | Out-File ("C:\Temp\$remoteHost.txt") #Change this to suit your environment
}
. Main

Canon MG5250 WLAN Linux Printer

Hi,

hier geht es um die Einbindung des Druckers per WLAN auf Linux-Systemen.

Dazu folgendermaßen vorgehen:

  1. Konfigurieren der WLAN-Einstellungen auf dem Drucker
  2. Installieren des Druckertreibers auf dem Linux-System
  3. Auslesen der MAC-Adresse der WLAN-Schnittstelle des Druckers
  4. Hinzufügen des Druckers

Konfigurieren der WLAN-Einstellungen auf dem Drucker

ist eigentlich selbsterklärend. Per Connection-Wizard das Netzwerk hinzufügen.

Installieren des Druckertreibers auf dem Linux-System

Bei mir wurde hier Opensuse 12.3 eingesetzt. Daher also von hier

Hi,

hier geht es um die Einbindung des Druckers per WLAN auf Linux-Systemen.

Dazu folgendermaßen vorgehen:

  1. Konfigurieren der WLAN-Einstellungen auf dem Drucker
  2. Installieren des Druckertreibers auf dem Linux-System
  3. Auslesen der MAC-Adresse der WLAN-Schnittstelle des Druckers
  4. Hinzufügen des Druckers

Konfigurieren der WLAN-Einstellungen auf dem Drucker

ist eigentlich selbsterklärend. Per Connection-Wizard das Netzwerk hinzufügen.

Installieren des Druckertreibers auf dem Linux-System

Bei mir wurde hier Opensuse 12.3 eingesetzt. Daher also von hier http://support-au.canon.com.au/P/search?model=PIXMA+MG5250&menu=download&filter=0&tagname=g_os&g_os=Linux 

die RPM-Version herunterladen.

Auf dem System dann das File entpacken und installieren.

sudo tar -xzvf cnijfilter-mg5200series-3.40-1-rpm.tar.gz

cd cnijfilter-mg5200series-3.40-1-rpm/

sudo sh install.sh

Direkt im Anschluss wird ein Skript ausgeführt, welches eigentlich den Drucker hinzufügen sollte, allerdings habe ich den Eindruck, dass dieses Skript einfach nicht funktioniert. Laut Skript sollte eine Auswahl dargestellt werden, wo der User bestimmt, ob der Drucker per USB oder WLAN angeschlossen wird. Diese wird allerdings nicht gebracht und es wird kein Drucker gefunden. Daher müssen wir das ganze manuell machen.

Auslesen der MAC-Adresse der WLAN-Schnittstelle des Druckers

Hinweis:Hierzu muss nmap auf dem System verfügbar sein!

sudo nmap -sU -p 8611,8612 –script bjnp-discover xxx.xxx.xx.xx

Ausgabe sollte so aussehen:

Starting Nmap 6.25 ( http://nmap.org ) at 2013-08-11 22:30 CEST
Nmap scan report for xxxxxxxxxxx (xxx.xxx.xx.xx)
Host is up (0.11s latency).
PORT     STATE SERVICE
8611/udp open  canon-bjnp1
| bjnp-discover:
|   Manufacturer: Canon
|   Model: MG5200 series
|   Description: Canon MG5200 series
|   Firmware version: 1.050
|_  Command: BJL,BJRaster3,BSCCe,NCCe,IVEC,IVECPLI
8612/udp open  canon-bjnp2
| bjnp-discover:
|   Manufacturer: Canon
|   Model: MG5200 series
|   Description: Canon MG5200 series
|_  Command: MultiPass 2.1,IVEC
MAC Address: 11:22:33:44:55:66 (Canon)

Hinzufügen des Druckers

Da wir jetzt die MAC-Adresse des Druckers kennen können wir diesen mit dem von Canon vorgesehen Kommando hinzufügen:

sudo /usr/sbin/lpadmin -p MG5250WLAN -m canonmg5200.ppd -v cnijnet:/11-22-33-44-55-66 -E

So das wärs, der Drucker ist drin!

[Ubuntu] TimeMachine Backup mit Netatalk + Avahi

Hallo,

viele Besitzer eines Macbooks/iMacs mögen sich vielleicht fragen, wie man TimeMachine dazu bringt zu sichern wenn man
a) kein QNAP-NAS o.ä besitzt
und
b) nicht auf eine USB-HDD sichern möchte

Die Lösung hierfür lautet:

Ubuntu System mit Netatalk und Avahi!

Here we go:

Zuerst holt man sich das Pgpgpg-Package, damit erkennt das System Pakete, die mit einem Schlüssel versehen wurden.
Ist möglicherweise Schwachsinn, bei mir hats einmal nicht ohne funktioniert, aber schaden kanns auf jeden Fall auch nicht.

sudo apt-get install pgpgpg

Installation Netatalk

  • Sources Verzeichnis erstellen

sudo mkdir -p ~/src/netatalk
cd ~/src/netatalk

  • Netatalk Sources über Repositorys laden

sudo apt-get source netatalk
sudo apt-get build-dep netatalk
cd netatalk-2.0.5/

  • Netatalk zusammenbauen

Anmerkung: Netatalk wird hier mit ssl gebuildet, dies ist unbedingt erforderlich, da neuere Versionen von OSX nur noch Anmeldung am Share per ssl zulassen!
sudo DEB_OPTIONS=ssl dpkg-buildpackage -us -uc
sudo debi
echo “netatalk hold” | sudo dpkg –set-selections

Netatalk konfigurieren

  • Anpassen der defaults

Folgende Anpassungen in der Datei /etc/default/netatalk vornehmen:

sudo vi /etc/default/netatalk

ATALKD_RUN=no
PAPD_RUN=no
CNID_METAD_RUN=no
AFPD_RUN=yes
TIMELORD_RUN=no
A2BOOT_RUN=no

  • Danach müssen die Apple Volumes definiert werden, dazu folgende Datei edieren:

sudo vi /etc/netatalk/AppleVolumes.default

  • Wenn man die Home-Verzeichnisse der User freigeben möchte folgende Zeile einfügen:

~/ “$u” allow:user1 cnidscheme:cdb //Der User hier ist durch einen gültigen User auf dem Ubuntu Server zu ersetzen

  • Erstellen des TimeMachine-Ordners im Homelaufwerk von User1

cd /home/user1

mkdir TimeMachine

  • Eintragen des TimeMachine-Volumes

sudo vi /etc/netatalk/AppleVolumes.default

/home/user1/TimeMachine TimeMachine allow:user1 cnidscheme:cdb options:tm,upriv

  • Netatalk neustarten

sudo /etc/init.d/netatalk restart

Nsswitch.conf konfigurieren

sudo vi /etc/nsswitch.conf

folgende Line ans Ende hinzufügen:

hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 mdns

Avahi konfigurieren

  • neue Datei erstellen:

sudo vi /etc/avahi/services/afpd.service

  • folgendes reinkopieren:

<?xml version=”1.0″ standalone=’no’?><!–*-nxml-*–>
<!DOCTYPE service-group SYSTEM “avahi-service.dtd”>
<service-group>
<name replace-wildcards=”yes”>%h</name>
<service>
<type>_afpovertcp._tcp</type>
<port>548</port>
</service>
<service>
<type>_device-info._tcp</type>
<port>0</port>
<txt-record>model=Xserve</txt-record>
</service>
</service-group>

  • Avahi neustarten

sudo /etc/init.d/avahi-daemon restart

Portfreigaben einrichten

sudo ufw allow afpovertcp

sudo ufw allow 14013/tcp

  • auf macbook folgende zeile über terminal eingeben:

defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1

Cisco Pix 501: Portfreigabe & ACL

Portfreigabe auf einer Pix einrichten:

Die Einrichtung einer einfachen Portfreigabe ist gar nicht so einfach wie man im ersten Moment vermuten mag.

Ich empfehle hier die Kommandozeile zu benutzen, da PDM grad bei statischen Routen und ACL’s häufig mist baut.

Lets start:

  1. Per Hyperterminal mit der Pix verbinden
  2. in enable Modus wechseln
  3. per conf t in Konfigurationsmodus wechseln
  4. Zunächst muss eine statische Route definiert werden: “static (inside, outside) <tcp/udp> <outside-ip-der-Pix> <gewünschter Port> <Ziel-Host-im-Inside-Interface> <gewünschter Port> netmask 255.255.255.255 0 0”
  5. Anschließend definiert man nun die ACL damit der Traffic auf dem entsprechenden Port auch durchgelassen wird: “access-list <acl-name> permit <tcp/udp> any host <outside-ip-der-Pix> eq <gewünschter Port>”
  6. Dann muss die ACL noch einer Access-Group zugeordnet werden: “access-group <acl-name> in interface outside”
  7. “wr mem” nicht vergessen 🙂

Its done!