Samstag, 23. März 2013

Shiny shiny shell

Mein erstes offizielles Shell-Skript. Ja, einzeilig. Ihr dürft euch amüsieren. Reagiert auf Bug #984785, der bei Start oder Herunterfahren ab Ubuntu 12.04 einen leeren Ordner .goutputstream* ins Home-Verzeichnis legt.
#!/bin/bash

# Name: rm_goutputstream.sh
# Scope: Remove folders ~/Desktop/.goutputstream* 
# Author: naftali 
# Date: 2013-03-23

# https://bugs.launchpad.net/ubuntu/+source/lightdm/+bug/984785 

rm -r ~/.goutputstream*
Dann dem User Rechte zum Ausführen des Skripts geben.
chmod -v u+x rm_goutputstream.sh
Und dann das Skript in den Autostart packen - System > Startprogramme, hinzufügen, in die Befehlszeile Skript-Pfad eingeben. Und ja, ich weiß, dass ich den Befehl auch direkt im Autostart hätte angeben können. Aber dann hätte ich nicht mein erstes Shell-Skript geschrieben, ne?
# Lieber direkt im Autostart angeben?
sh -c "rm -r ~/.goutputstream*"

Souveräner Trantütenwettblicker



Großartiger Abend: Jake Bugg, Strom, 19.03.13, mit M., A., B's, S. Treffende Konzertkritik gibts hier.

Ha? Bin ich da schon drin oder was?

Benjen an den Wlan Router gehängt. Mit Tastatur und Bildschirm könnte ich mich jetzt einloggen und per
ifconfig eth0
rausfinden, welche interne IP-Adresse dem neuen Freund zugewiesen wurde. Und über die eindeutige IP-Adresse kann ich das Geräte dann pingen und sshen, richtig? Soweit der Plan. Router und Bildschirm stehen allerdings in zwei verschiedenen Räumen und die Kabel waren zwar lang eingeplant, sind aber leider nicht wirklich lang genug. Hrmpflrmpl. Hinter Kommoden und Bücherregalen verstaute Kabel rausdängeln? Hrmpflbrummelgrumm. Vielleicht geht es auch anders, machen wir mal einen auf doof.
naf@Nikolaj:~$ ping Benjen
ping: unknown host Benjen

naf@Nikolaj:~$ ssh naf@Benjen
ssh: Could not resolve hostname Benjen: Name or service not known
HRMPF! Aber klar. Den Hostname kennt er nicht, den hab ich ihm nicht beigebracht. So ist kein Weg zur IP-Adresse. Aber: die IP-Adresse müsste ich ja kennen. Mein Router vergibt im definierten Range ausgehend von sich, dann aufsteigend nach Einwahlzeitpunkt IP-Adressen, richtig? Und wer hat den Range definiert? Ha. Die IANA (Internet Assigned Numbers Authority) via RFC 1918, Cisco und ich. Also: direkt pingen und raten ist jetzt angesagt.
naf@Nikolaj:~$ ifconfig wlan0

wlan0     Link encap:Ethernet  Hardware Adresse 00:24:6c:3d:64:g0  
          inet Adresse:192.168.1.3  Bcast:192.168.1.255  Maske:255.255.255.0
          inet6-Adresse: fe20::251:6cff:da4c:89f0/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:2547 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2430 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000 
          RX-Bytes:2475774 (2.4 MB)  TX-Bytes:399695 (399.6 KB)

naf@Nikolaj:~$ ping 192.168.1.1

PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=279 ms
64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=247 ms
^C
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 526ms
rtt min/avg/max/mdev = 247.213/321.121/388.672/46.271 ms

naf@Nikolaj:~$ ping 192.168.1.2

PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_req=1 ttl=64 time=4.65 ms
64 bytes from 192.168.1.2: icmp_req=2 ttl=64 time=2.71 ms
64 bytes from 192.168.1.2: icmp_req=3 ttl=64 time=2.80 ms
64 bytes from 192.168.1.2: icmp_req=4 ttl=64 time=2.94 ms
^C
--- 192.168.1.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 2.716/3.281/4.656/0.800 ms

naf@Nikolaj:~$ ping 192.168.1.4

PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.
From 192.168.1.3 icmp_seq=1 Destination Host Unreachable
From 192.168.1.3 icmp_seq=2 Destination Host Unreachable
From 192.168.1.3 icmp_seq=3 Destination Host Unreachable
^C
--- 192.168.1.4 ping statistics ---
4 packets transmitted, 0 received, +3 errors, 100% packet loss, time 3014ms
pipe 3
So. Freunde sind identifiziert. Dann auf zum Kennenlernen.
naf@Nikolaj:~$ ssh 192.168.1.2

The authenticity of host '192.168.1.2 (192.168.1.2)' can't be established.
ECDSA key fingerprint is 7a:b2:dc:74:b3:9c:53:85:22:26:84:dc:e0:ab:45:2c:.
Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.1.2' (ECDSA) to the list of known hosts.
naf@192.168.1.2's password: 

Linux Benjen 3.6.11+ #371 PREEMPT Thu Feb 7 16:31:35 GMT 2013 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Feb  9 09:32:27 2013

naf@Benjen ~ $ 
Ziemlich billig, brachial und schmutzig. Aber dafür alles von aufm Sofa aus. Und wie siehts jetzt auf meinem Rechner aus?
naf@Nikolaj:~$ ls -la | grep ssh
drwx------  2 naf   naf    4096 Mär 23 10:02 .ssh

naf@Nikolaj:~$ tree ./.ssh
./.ssh
└── known_hosts

Sonntag, 17. März 2013

The world and his wife...

... know the default username and password of the Raspberry Pi. Bevor ich den Kleinen also ans Netz hänge und ssh'e, möchte ich den pi-user gerne entfernen/umbennen/entmachten/entpassworten und den Hostnamen (raspberrypi) selbst bestimmen. Im Netz gibt's viele Meinungen und wilde Anleitungen [1][2][3]. Wegen ihrer Mischung aus der Nutzung der passenden Command-Line-Tools in Verbindung mit direktem Editieren bzw. überprüfen der wichtigsten Dateien und hab ich mich für folgende Aktionskette entschieden:
set-root-password/logout-as-pi/login-as-root/change-hostname-restart-process/change-user-via-usermod-to-newuser/change-newuser-password/check-'user'-files-for-traces-of-pi-replace-if-necessary/logout-as-root/login-as-newuser/disable-root-account-password/enjoy
Neuen Nutzer anlegen und pi löschen wäre auch gegangen, und hätte mir das setzen vom root-password erspart (wovon auch viele aus Sicherheitsgründen abraten). Aber da ich gerne die passenden UID und GID behalten will - für den "ersten" Nutzer nach root ist das die 1000 [4] - nehme ich den Umweg über root.

Erstmal gucken, was in den jeweiligen Dateien unter /etc/ drinsteht (passwd, shadow, group, gshadow, sudoer, hosts, hostname), hier mal am Beispiel des /etc/passwd:
cat /etc/passwd | grep 'pi'
pi:x:1000:1000:,,,:/home/pi:/bin/bash
Dann root-password setzen via passwd:
# set root password 
sudo passwd
Ausloggen, als root einlogen, neuen hostname setzen:
# as root: replace 'raspberrypi' with 'new-hostname'
vi /etc/hostname
vi /etc/hosts

#restart hostname process (as root, otherwise reboot)
/etc/init.d/hostname.sh start
Neuen username setzen:
# as root: change username 'pi' to 'new-name'
usermod -m -d /home/new-name -l new-name pi

# change password for 'new-name'
passwd new-name

# check files for remaining references of 'pi'
# change to 'new-name' manuelly when necessary
# /etc/passwd & /etc/shadow
# /etc/group & /etc/gshadow
cat /etc/group | grep 'pi'
vi /etc/group

# edit the sudoers list, change 'pi' to 'new-name'
visudo
Ausloggen, als 'new-name' einloggen, root-password löschen:
# delete/unset root password
sudo passwd -d -l root
Done.
new-name@new-hostname:~$

[1] http://www.raspberrypi.org/phpBB3/viewtopic.php?f=27&t=12270, bes. timothy3592, Joe Schmoe, alexeames, happyharrysco1. [2] http://raspi.tv/2012/how-to-create-a-new-user-on-raspberry-pi [3] http://www.raspberrypi-spy.co.uk/2012/05/change-raspberry-pi-hostname/
[4] https://wiki.archlinux.org/index.php/Change_username

Raspberry Pi (II)

Große Verwunderung meines Raspberry Pi Mitstreiters: Wer setzt denn alles auf und probiert dann nicht aus, obs auch läuft? Ich. Weil so euphorisch ob des ganzen Trawumms, das so gut geklappt hat, dass ich meinte, eine Niederlage verkrafte ich nicht, und wer weiß, was ich da jetzt alles noch machen muss. Im Nachhinein betrachtet: Ja, doof, hätte ich ruhig machen können, denn was hätte ich noch machen müssen? Kabel einstecken. Fertig.

3) I/O Devices + Kabel zusammensuchen
3a) Fernseher als Monitor (+Audio) über HDMI.
3b) Externe Tastatur über USB. Ohne Maus muss gehen.
3c) Stromquelle: Mini-USB (Standard-Smartphone-Adapter).



4) Booten (= Stromquelle einstecken ;)
Man kommt dann zu dem Raspberry Pi Konfigurations Screen, in dem man Zeitzone und Lokalisierung etc. einstellen kann. Wichtiger hier aber erstmal:
expand_rootfs
auswählen, dann reboot, und der Raspberry Pi Login erscheint. Default username und password sind pi/raspberry, den Desktop (wenn man ihn denn will) startet man via:
startx

Montag, 4. März 2013

Raspberry Pi (I)

Mal in Gang setzen, ne?


naf@Nikolaj:~/dev/raspberry-pi$
0) Basic: Wiki | Forum.
1) Rasperry Pi: Quick Start Guide
2) 4GB SD Karte, mit der Linux Distro Raspbian Wheezy bestücken via dd.
2a) Nach dieser Anleitung für Linux via command line. Voilà:
sudo dd bs=4M if=./2013-02-09-wheezy-raspbian.img of=/dev/sdb
462+1 Datensätze ein
462+1 Datensätze aus
1939865600 Bytes (1,9 GB) kopiert, 197,951 s, 9,8 MB/s

command line commands

A list of some awesome command-line one liners by Arturo Herrero.

# report file system disk space usage, reads from etc/mtab
# mounted devices, humanreadable, file system type
 df -hT  

# show all running processes, display user-oriented
 ps aux

# kill a process (by PID {12345}), force termination
 kill -9 12345 # Bad!
(!) Actually I learnt, don't use kill - 9 - No. No. No! "Generally, send 15, and wait a second or two, and if that doesn't work, send 2, and if that doesn't work, send 1. If that doesn't, REMOVE THE BINARY because the program is badly behaved!" Good to know.
 kill -15 12345 # If necessary, follow up with 2, 1.

Because I can.


© DFL Deutsche Fußball Liga GmbH, Wikipedia.
1) Hamburger SV - 2) Werder Bremen - 3) Eintracht Braunschweig - 4) Hertha BSC - 5) Preußen Münster - 6) Borussia Dortmund - 7) Schalke 04 - 8) 1. FC Köln - 9) Meidericher SV (Duisburg) - 10) 1. FC Saarbrücken - 11) Karlsruher SC - 12) VfB Stuttgart - 13) 1. FC Nürnberg - 14) 1860 München - 15) Eintracht Frankfurt - 16) 1. FC Kaiserslautern. (50 Jahre Erste Bundesliga. Glückwunsch.)

Projekt 2013: Hacker || Maker

Ansonsten fällt mir grad noch nix zu ein. Muss noch genauer spezifiziert werden. Aber ich bin ja im Hacker || Maker Jahr. Da spezifiziere ich nicht gleich, sondern mache erstmal. Und zwar: den Raspberry Pi. Bis nachher, dann.

Sonntag, 3. März 2013

Twitter Timeline 02/13









Where did he go?

"When making real-time-anything, remember to cover the 'User quits out of the window and never comes back' use case."

-- Oliver, @ ollieoblivious: 6470 post-mortem: Notability.