Schlagwort-Archive: commandline

HowTo – Ext3 FS für den Einsatz mit einem USB Stick optimieren

Problem:
Ich möchte einen 2GB USB-Stick mit ext3 formatieren und dauerhaft mit einer Fritzbox nutzen. Gibt es mögliche Optimierungen für diesen UseCase?

Lösung:
Ja, bzw. sollte! =)
Die Partitionierung und Formatierung kann der Bequemlichkeit halber mit gparted durchgeführt werden. Soweit – sogut.
Im Anschluss sollte man die manpage des Tools „tune2fs“ studieren, um das jeweilige Filesystem (je Partition!) zu tunen.
Nach der Erstellung und Formatierung der Partition mittels gparted hat man folgenden Zustand:

user@hostname:~$ sudo tune2fs -l /dev/sde1
tune2fs 1.42.9 (4-Feb-2014)
Filesystem volume name: rootfs
Last mounted on:
Filesystem UUID: d34e5d7a-e3c6-4cbe-8ac4-39b979352331
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype sparse_super
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 128016
Block count: 512000
Reserved block count: 25600
Free blocks: 485301
Free inodes: 128005
First block: 1
Block size: 1024
Fragment size: 1024
Reserved GDT blocks: 256
Blocks per group: 8192
Fragments per group: 8192
Inodes per group: 2032
Inode blocks per group: 254
Filesystem created: Sun Mar 23 14:17:53 2014
Last mount time: n/a
Last write time: Sun Mar 23 14:17:58 2014
Mount count: 0
Maximum mount count: -1
Last checked: Sun Mar 23 14:17:53 2014
Check interval: 0 ()
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: d0ba6c40-c20c-40b9-bd25-08a7a32940a4
Journal backup: inode blocks

Ich lege euch ans Herz, die nachfolgend verwendeten Optionen in Eurem Fall DOPPELT zu prüfen. Ich warne ausdrücklich und gebe keine Garantie auf Richtigkeit – das jedoch gilt ja eh für den ganzen Blog. tune2fs kann auch nachträglich verwendet werden. In einem solchen Fall sollte man sich immer vergewissern, dass ein aktuelles Backup vorliegt.
Das Device ist natürlich entsprechend den Gegebenheiten anzupassen.


sudo tune2fs -m 0 -o journal_data_writeback,^acl,^user_xattr -c 0 -i 52w /dev/sde1

Ausgabe:

tune2fs 1.42.9 (4-Feb-2014)
Die maximale Anzahl von Einhängungen wird auf -1 gesetzt
Das Intervall zwischen zwei Checks wird auf 31449600 Sekunden gesetzt
Der Prozentsatz reservierter Böcke wird auf 0% (0 Blöcke) gesetzt

Ich erläutere kurz, was ich mir hier gedacht habe:

# reservierter Speicher auf null setzen, sollte bei einem RootFS sinnvoll gesetzt werden
-m 0
# Entfernen von acl und xattr, und das FS Journal wird nicht so streng gehandhabt
# dadurch arbeitet der Stick etwas schneller im Vergleich zum Standard
# INFORMIERT EUCH ÜBER DIE AUSWIRKUNG DER OPTION!!
-o journal_data_writeback,^acl,^user_xattr
# automatischen fsck nach x Tagen deaktivieren
-c 0
# alle 52 Wochen wird aber ein fsck forciert, fürs Gewissen 😉
-i 52w

HowTo – OSX Mavericks Bootmedium erstellen

Problem:
OSX Mavericks gibt es bekanntlich ja nur als App- bzw iTunes-Store Download oder eben vorinstalliert. Eine Installation zB per DVD ist wohl nicht vorgesehen. Ich hätte aber gerne eine bootbare DVD zur Hand.

Lösung:
Es gibt hierzu 2 Lösungen


# Mount the installer image
hdiutil attach /Applications/Install OS X Mavericks.app/Contents/SharedSupport/InstallESD.dmg -noverify -nobrowse -mountpoint /Volumes/install_app

# Convert the boot image to a sparse bundle
hdiutil convert /Volumes/install_app/BaseSystem.dmg -format UDSP -o /tmp/Mavericks

# Increase the sparse bundle capacity to accommodate the packages
hdiutil resize -size 8g /tmp/Mavericks.sparseimage

# Mount the sparse bundle for package addition
hdiutil attach /tmp/Mavericks.sparseimage -noverify -nobrowse -mountpoint /Volumes/install_build

# Remove Package link and replace with actual files
rm /Volumes/install_build/System/Installation/Packages
cp -rp /Volumes/install_app/Packages /Volumes/install_build/System/Installation/

# Unmount the installer image
hdiutil detach /Volumes/install_app

# Unmount the sparse bundle
hdiutil detach /Volumes/install_build

# Resize the partition in the sparse bundle to remove any free space
hdiutil resize -size `hdiutil resize -limits /tmp/Mavericks.sparseimage | tail -n 1 | awk '{ print $1 }'`b /tmp/Mavericks.sparseimage

# Convert the sparse bundle to ISO/CD master
hdiutil convert /tmp/Mavericks.sparseimage -format UDTO -o /tmp/Mavericks

# Remove the sparse bundle
rm /tmp/Mavericks.sparseimage

# Rename the ISO and move it to the desktop
mv /tmp/Mavericks.cdr ~/Desktop/Mavericks.iso

Debian für Freetz Kompilierung vorbereiten

Problem:
Ich möchte mir ein freetz Image für den Router erstellen – was muss ich tun?

Lösung:
Zuerst sucht man sich ein Plätzchen für die Quellen, ich nutze dazu /opt/sources – dort dürfen nur die User der Gruppe src schreiben. Mit „id“ kann man prüfen, ob man Mitglied der Gruppe ist.

sudo mkdir /opt/sources
sudo chmod 775 /opt/sources
sudo chgrp src /opt/sources
cd /opt/sources

Jetzt müssen noch einige Pakete installiert werden

sudo apt-get install subversion zlib1g-dev libacl1-dev libncurses5-dev libcap-dev autoconf automake libtool bison flex libc6-dev-i386 gcc-multilib lib32ncurses5-dev

Nun kanns schon losgehn

cd /opt/sources
# Entwicklertrunk ist mir am liebsten 😉
svn co http://svn.freetz.org/trunk freetz-devel
cd freetz-devel
make menuconfig
make

Oracle Java Package erstellen unter Debian

Problem:
Oracles Java wird benötigt, ist aber in keinem Repo verfügbar.

Lösung:
Ich habe hier schon einen anderen Beitrag zur manuellen Installation von Java verfasst, dieser ist hiermit ungültig und sollte NICHT MEHR VERWENDET WERDEN!!

Um die Dinge der Installation rückgängig zu machen, empfiehlt sich die Ausführung folgender Befehle als root

Achtung, hier wird die 64bit Version genutzt! Für 32bit müssen die Pfade (amd64 –> i386) entsprechend angepasst werden!


update-alternatives --remove java /usr/lib/jvm/java-7-oracle/bin/java
update-alternatives --remove javac /usr/lib/jvm/java-7-oracle/bin/javac
update-alternatives --remove javaws /usr/lib/jvm/java-7-oracle/bin/javaws
update-alternatives --remove javadoc /usr/lib/jvm/java-7-oracle/bin/javadoc
update-alternatives --remove javah /usr/lib/jvm/java-7-oracle/bin/javah
update-alternatives --remove javap /usr/lib/jvm/java-7-oracle/bin/javap
update-alternatives --remove java_vm /usr/lib/jvm/java-7-oracle/jre/bin/java_vm
update-alternatives --remove jvisualvm /usr/lib/jvm/java-7-oracle/bin/jvisualvm
update-alternatives --remove policytool /usr/lib/jvm/java-7-oracle/jre/bin/policytool
update-alternatives --remove ControlPanel /usr/lib/jvm/java-7-oracle/jre/bin/ControlPanel
update-alternatives --remove iceweasel-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so
update-alternatives --remove firefox-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so
update-alternatives --remove mozilla-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so
update-alternatives --remove midbrowser-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so
update-alternatives --remove iceape-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so
update-alternatives --remove xulrunner-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so
update-alternatives --remove xulrunner-addons-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so

Im Anschluss sollte das aktuellste, verfügbare Paket java-package installiert werden

apt-get install java-package

Ich habe die Debian Backports eingebunden (Howto) und habe daher zusätzlich folgenden apt-get Schalter genutzt.
-t wheezy-backport
Nun ist das Tool make-jpkg bereitgestellt, mit welchem künftig das Installationspaket / Update generiert werden wird! =)

Zuerst lädt mal auf der Java-Webseite das aktuelle Paket für die verwendete Architekture (i386/amd64) herunter. Dann führt man als User (!! Wichtig, als root wirds mit Fehler enden !!)

make-jpkg jdk-7u51-linux-x64.tar.gz

aus.

Am Ende erhält man daraus ein Paket, in meinem Fall oracle-java7-jdk_7u51_amd64.deb
Dieses kann als root wie gewohnt installiert werden!

dpkg -i oracle-java7-jdk_7u51_amd64.deb

Im Anschluss sollte man sich vergewissern, welche Applikationen denn für die Bereitstellung von „java“ noch installiert sind. Diese kann man eigentlich alle Deinstallieren sofern keine Abhängkeit zu anderen Paketen besteht.
update-alternatives --list java zeigt die installiert-/registrierten Binaries. Welchem zu deinstallierendem Debian Paket die jeweilige Binary gehört, kann mit „dpkg -S“ rausgefunden werden.

Hier ein Beispiel:

user@host:~$ update-alternatives --list java
/usr/lib/jvm/jdk-7-oracle-x64/jre/bin/java
user@host:~$ dpkg -S /usr/lib/jvm/jdk-7-oracle-x64/jre/bin/java
oracle-java7-jdk: /usr/lib/jvm/jdk-7-oracle-x64/jre/bin/java

Ergebnis: oracle-java7-jdk wäre nun ein Ergebnis – aber das ist in diesem Fall auch gut so! 😉

gnome-shell nach Absturz wieder beleben unter Debian

Problem:
Ich habe in der Mittagspause meinen Rechner gesperrt, natürlich waren viele Dokumente offen und nicht gespeichert. Als ich Ihn wieder entsperren will, reagiert die Gnome-Shell nicht mehr.
Wie kann ich jetzt Datenverlust vermeiden?

Lösung:
Die hängende Obrfläche befindet sich auf tty7. Ich wechsle also zuerst in eine andere Konsole und melde mich dort an.
Nach der Anmeldung muss geprüft werden, ob der Prozess „gnome-shell“ noch existiert.
Sollte der Prozess NICHT mehr existieren, dann sollte man diesen Beitrag erst komplett durchlesen 😉

user@workstation:~$ ps uax | grep gnome-shell
user 7168 0.3 4.4 946116 174620 ? Rl Jul05 27:32 /usr/bin/gnome-shell

Dieser Prozess muss nun also ersetzt werden. Wie geht man vor?
Zuerst muss man rausfinden, auf welchem Display der aktive Xorg Server läuft

user@workstation:~$ ps uax | grep Xorg
root 5534 0.3 1.2 160088 49264 tty7 Rs+ Jul05 28:20 /usr/bin/Xorg :0 -br -verbose -novtswitch -auth /var/run/gdm3/auth-for-Debian-gdm-htekEo/database -nolisten tcp vt7

Der Server läuft auf dem Display „:0“
Die Display Variable muss auf der Konsole exportiert werden, ich prüfe auch gleich auf die Existenz der Variablen

user@workstation:~$ export DISPLAY=:0
user@workstation:~$ env | grep DISPLAY
DISPLAY=:0

Jetzt sind die Vorraussetzungen geschaffen, um die Oberfläche zu ersetzen.
Nun ersetze ich die kaputte Oberfläche auf tty7

user@workstation:~$ gnome-shell --replace &

Sollte oben festgestellt worden sein, dass der Prozess komplett fehlt, muss der Befehl wie folgt lauten

user@workstation:~$ gnome-shell &

Gutes Gelingen! – ansonsten kann man nur noch den Desktopmanager neu starten was jedoch Datenverlust bedeutet!

HOWTO – FFMpeg Komprimierung unter Linux – WMV

Problem:
Ich habe verschiedene Videos encodiert in verschiedenen Codecs, welche nun für Windows bereit gestellt werden müssen.
Der betroffene WindowsUser hat keine Rechte auf seinem PC und kann somit selbstständig keine zusätzlichen Codecs installieren.

Lösung:
Ich nutze vom Mediaplayer unterstützte Formate und encodiere die Videos mit FFMpeg neu. Ich nutze einen recht niedrigen qscale Wert um keine Qualitätseinbußen zu bekommen.

Weitere Infos zum Thema „qscale“ finden sich auch auf dieser informativen Seite
http://www.kilobitspersecond.com/2007/05/24/ffmpeg-quality-comparison/

Die Installation von FFMpeg wird hier natürlich voraus gesetzt.


ffmpeg -i input.mp4 -qscale 2 -vcodec msmpeg4 -acodec wmav2 output.wmv

Bei Bedarf kann noch getunt werden =)

Dropbox Installation und Updates unter Debian

Problem:
Ich möchte Dropbox unter Debian und Nautilus nutzen

Lösung:
Installation des Paketes „nautilus-dropbox“

Zuerst also als root….

apt-get install nautilus-dropbox # Installation incl. Abhängigkeiten
dropbox start -i #Download und Installation des Daemons - aber dann keine Kontodaten eingeben!

und nach dem Download als User dann:

dropbox start #hier trägt man seine Dropbox Daten ein

Von Zeit zu Zeit sollte man den Daemon updaten.
Zuerst beendet man als User Dropbox

dropbox stop

und das Update wird als root durchgeführt

dropbox update

und im Anschluss kann man als User wieder Dropbox starten

dropbox start

Done!

Eigenen SSH Key verwalten unter Linux

DSA/RSA Schlüssel sind eine praktische Sache zur Identifikation zB gegenüber eines GIT, SSH oder SFTP Servers. Die Nutzungsmöglichkeiten sind hier breit gefächert. Ich notiere hier nun mal das kleine 1mal1 der Schlüsselverwaltung, evtl kann es jemand gebrauchen.

Bzgl der Art des Keys kann jeder mal im Netz stöbern, es steht RSA und DSA (zusätzlich zur gewählten bit-Stärke) zur Wahl. Gerne wird mit der Schlüsselberechnung durch Quantencomputer argumentiert. Ich kenne niemanden mit einem QC, falls Ihr jemanden kennt, dann schreibt mir doch bitte.
Per Default wird jedenfalls (unter Wheezy) ein RSA Schlüssel generiert, das war nicht immer so. AFAIK lag das an der Patentierung (die wohl im Jahr 2000 ausgelaufen ist) von RSA.
Ich finde RSA gut – aber entscheidet selbst was Ihr nutzen möchtet!

Das Tool „ssh-keygen“ kommt hier zum Einsatz, es ist zur Erzeugung und zum Management der Schlüssel zu gebrauchen und steckt im Paket „openssh-client“.

Der private Schlüssel kann mit einem Kommentar (-C „Kommentar“) bestückt werden, dieser ist nach Schlüsselerzeugung nicht mehr abänderbar!!
Der öffentliche Schlüssel hingegen kann abgeändert werden, dort steht der Kommentar im Klartext am Ende des Schlüssels. Ohne Kommentarangabe lautet der Kommentar username@machine

Bei jeder der folgenden Aktionen kann ein -f /pfad/zum/schluesselname.key hinzugefügt werden, dann fällt die Abfrage nach dem Schlüsselnamen weg. Wer mehrere Schlüssel pflegen muss, wird darauf angewiesen sein.

Ach, nur dass es gesagt wurde – WICHTIG: Den Privaten Schlüssel NIE aus der Hand geben – sagt ja auch der Name schon.
Der private Schlüssel kann mit einem Passwort versehen werden um unbefugten die Nutzung zu verwehren, aber richtig sicher ist das trotzdem nicht. Ein Passwort kann manchmal störend sein, dieses wird bei jeder Nutzung des Schlüssels abgefragt. Es kommt also immer auf den Einsatzzweck an, ob ein Passwort nötig/sinnvoll ist.

1. Generieren eines Schlüssels (in meinem Fall RSA-Key 2048bit stark) mit Kommentar (Mein Namen) aber ohne Passwort

ssh-keygen -t rsa -b 2048 -C "Max Mustermann" -v

Ausgabe:

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
28:af:78:11:a2:35:cc:6e:6f:f6:d1:1c:c0:a2:92:2b Max Mustermann
The key's randomart image is:
+--[ RSA 2048]----+
| |
| . |
| o . o |
| .*... o |
|o+.o... S |
|.oo .o o . |
|E. . .o o |
|. .=. . |
| .+... |
+-----------------+

Nun wurde ein Privater und ein Öffentlicher Schlüssel erstellt, diese können sofort genutzt werden!

2. Ausgabe des öffentlichen Schlüssels
Dieses Feature benötigt man, wenn nur der private Schlüssel vorliegt und der öffentliche auf einem Server bereitgestellt werden muss.

ssh-keygen -y

Ausgabe (gekürzt)

Enter file in which the key is (/root/.ssh/id_rsa):
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA......2jl9bP4IkzF5jLJv Max Mustermann

3. Setzen eines Passworts für den privaten Schlüssel (je nach Einsatzzweck)

ssh-keygen -p

Hier wird man aufgefordert, 2 mal ein Passwort einzugeben sofern keines gesetzt war.

svn relocate im Terminal

Problem:
Man hat ein SVN Repository bei welchem die URL gewechselt wurde

Lösung:
Am besten löst man das mit der Kommandozeile.

Zuerst wechselt man in den ausgecheckten Projektordner und findet die aktuelle URL heraus.

cd /pfad/zum/projekt
svn info

Ich habe beispielsweise den Sourcecode von Magento 1.6 hier liegen, die dortige Ausgabe zeigt

Pfad: .
URL: http://svn.magentocommerce.com/source/branches/1.6
Basis des Projektarchivs: http://svn.magentocommerce.com/source
UUID des Projektarchivs: ee4975a1-dc2a-0410-ac7a-f60e980b784d
Revision: 165969
Knotentyp: Verzeichnis
Plan: normal
Letzter Autor: vladimir.pelipenko
Letzte geänderte Rev: 140935
Letztes Änderungsdatum: 2012-01-11 15:01:14 +0100 (Mi, 11. Jan 2012)

Wichtig ist hier die „URL: “ Zeile.
Nun zur Handhabung von svn ein Auszug aus der Hilfe

switch (sw): Update the working copy to a different URL.
usage: 1. switch URL[@PEGREV] [PATH]
2. switch --relocate FROM TO [PATH...]

Daraus resultiert im Magento Beispielfall folgender Befehl

svn switch --relocate http://svn.magentocommerce.com/source/branches/1.6 http://mein.neuer.pfad/source/branches/1.6

Mittels svn info kann das Ergebnis überprüft werden.