Letöltő szkript Toshiba FlashAir-hez

flash-airNemrég vettem egy Wifis SD kártyát a fényképezőmbe. A választásom végül a Toshiba FlashAir-jére esett, a döntésemben az ár és a szkriptelhetőség volt a fő szempont. Ugyan Androidra van hozzá gyári kliens alkalmazás, de az asztali gépemen Ubuntu van, arra kicsit hegeszteni kellett, gondoltam megosztom az eredményt, jól jöhet másnak is.
A Wifis kártyák ugye annyival tudnak többet, mint egy sima SD, hogy van bennük egy beépített Wifi adapter, és valami firmware, ami azt meghajtja. Ha a kamera képes akkora áramot adni a kártyának, amekkorát az igényel, akkor csak betesszük a készülékbe, bekapcsoljuk és már használhatjuk is. A kártya sugároz egy saját Wifi hálózatot, amire csatlakozhatunk bármilyen Wifis eszközzel. A FlashAir esetében ez a “flashair” SSID-jú hálózat, és a http://192.168.0.1 címen elérhető kis beépített webszerverén keresztül érhetjük el a képeket. És akkor lássuk mit csinál az én szkriptem:

Először elmenti az aktuális Wifi hálózatunk SSID-ját, majd rácsatlakozik a kártyáéra. Ha ez sikerült, a kártya web kiszolgálójából kiolvassa a kártyán lévő fájlok nevét, és egyesével letölti azokat. Minden letöltött képből az exiftool-lal (ehhez fel kell tenni a libimage-exiftool-perl csomagot) kiolvassa a készítés dátumát, és az adott dátumról elnevezett almappába mozgatja a képet. A letöltések előtt mindig ellenőrzi, nincs-e már ilyen nevű fájl letöltve, ha van, akkor nem tölti le újra. A végén, ha végzett a letöltésekkel visszacsatlakozik az előző Wifi hálózatra. Ennyi, nincs több kábelezés :)

#!/bin/bash
#Ide fogja letolteni a kepeket datumozott almappakba
DOWNLOAD_DIR="~/flashair_download"
#Az altalunk beallitott jelszo a "flashair" halozathoz
PASSWORD=jelszo

#Elmentjuk az aktualis halozatot amihez csatlakozva vagyunk epp, majd megprobalunk racsatlakozni a kartya halozatara
OLD_SSID=$(iwconfig 2>/dev/null | awk -F':' '/ESSID/{print $2}' | awk -F'"' '{print $2}')
echo "Csatlakozas a FlashAir-hez..."
nmcli d wifi connect flashair password $PASSWORD iface wlan0

#Leellenorizzuk, hogy sikerult-e, ha nem, kilepunk
SSID=$(iwconfig 2>/dev/null | awk -F':' '/ESSID/{print $2}' | awk -F'"' '{print $2}')
if [[ "$SSID" != "flashair" ]]; then
        echo "Nem vagy a FlashAir-re csatlakozva!"
        exit 1
fi

#Belelepunk a beallitott letoltesi konyvtarba, majd letoltjuk a html oldalt, amin a kepeink vannak kilistazva, es fajlnevenkent vegigmegyunk rajtuk
#Ami meg nem letezik valamelyik almappaban, azt letoltjuk, majd a kepbol az exiftool-lal kiolvassuk, hogy mikor keszult, es annak megfelelo almappaba mozgatjuk
cd $DOWNLOAD_DIR
wget -qO - http://192.168.0.1/DCIM/100NIKON | grep DSCN | sed -e "s/^.*fname\"\:\"//" -e "s/\", \"fsize.*//" | sort | while read LINE; do
        IF=$(find ./ -name ${LINE})
        if [[ $IF != "" ]]; then
                echo "A ${LINE} nevu fajl mar letezik ($IF) - kihagyom."
                continue;
        fi
        wget -nc "http://192.168.0.1/DCIM/100NIKON/${LINE}" -O ${LINE}.tmp;
        DATE=$(exiftool ${LINE}.tmp | awk '/Date\/Time Original/{print $4}' | sed 's/:/\./g')
        mkdir $DATE >/dev/null 2>&1
        mv ${LINE}.tmp $DATE/${LINE}
done

#Vegul visszacsatlakozunk az elejen elmentett halozatra
echo "Visszacsatlakozas az elozo halozatra..."
nmcli c up id $OLD_SSID
Posted in Shell szkriptelés | Tagged , , , | Leave a comment

ControlMaster – egy hasznos SSH trükk “powerusereknek”

Az alábbi okosság a következő esetekben jöhet jól:

  • Valami miatt több SSH kapcsolatot szeretnénk nyitni egy hosztra egyszerre (akár mert több dolgot csinálnánk a gépen mi magunk párhuzamosan, akár mert valami automatizált folyamatnak/szkriptnek kell indítgatnia több lekérdezést a másik hoszton SSH-n pl.).
  • Nagy a hálózati késleltetés a gépünk és a cél hoszt közt.
  • Legfőképp pedig, ha az előző kettő eset egyszerre áll fenn.

Van egy “session multiplexing” működési módja az SSH kapcsolódásnak (feltéve, ha a használt kliens ezt a funkciót támogatja, erről bővebb infó egy mátrixban itt – én most itt az OpenSSH-val való használatot írom le), hogy az első SSH kapcsolat létrejötte után, a kliens létrehoz egy “Unix socket leíró” fájlt, kinevezi a kapcsolatot “master”-nek, és innentől fogva bármely további SSH kapcsolat nyitás esetén nem fog új, külön TCP kapcsolatot nyitni a kliens mindegy egyes új SSH kapcsolatnak, hanem a socketet használva a master kapcsolaton keresztül fog menni az összes SSH kapcsolat adatfolyama az adott hosztra. Ez a gyakorlatban azt jelenti, hogy az első kapcsolat létrejötte után, a többi már nem kíván sem új TCP kapcsolat felépítést, sem autentikációt.

A dolog beállítása úgy megy, hogy létrehozunk (ha még nem lenne) egy ~/.ssh/config fájlt és beleírjuk ezt a pár sort:



Host *
ControlMaster auto
ControlPersist yes
ControlPath ~/.ssh/cm_socket/%r@%h:%p

Az első sorral létrehozunk egy “hoszt sztanzát” (definiálunk egy hosztot, vagy többet, amire az utána lévő beállítások vonatkozni fognak), esetünkben minden hosztra vonatkoztatjuk a beállítást. Második sorban bekapcsoljuk a ControlMaster funkciót, amiről a bejegyzés szól. Ennek értéke lehet még autoask, melynek esetén a kapcsolat nyitáskor a kliens megkérdezni, hogy szeretnénk-e használni a már élő, master kapcsolatot, illetve no, amivel értelemszerűen kikapcsoljuk. A harmadik sorban a ControlPersist bekapcsolásával azt állítjuk be, hogy ha a mindenkori master kapcsolat megszakad, és még van egy, vagy több másik SSH munkafolyamat, akkor valamelyik automatikusan átvegye a master szerepét. Ugyanezzel az opcióval lehetőség van megadni “IdleTimeout” időt is, másodpercben. Ez esetben nem marad életben a master “örökre”, ha nincs rajta forgalom, csak míg a megadott idő le nem jár. Negyedik sorban a ControlPath-szal kell megadni, hogy a kliens hol hozza létre a multiplexinghez szükséges “Unix socket leíró” fájlt. (Ennek az útvonala, ha nem létezik, hozzuk létre kézzel.) És ennyi.

Ha olyan egyedi eset áll fenn, mikor mégsem szeretnénk használni a ControlMastert, a “-S none”, vagy a “-o ControlMaster=no” kapcsolóval ki lehet kapcsolni az aktuális kapcsolódásnál.

Vannak azonban esetek, amikor egyáltalán nem javasolt a használat:

  • Túl nagy adatmennyiség mozgatásakor (pl. 20-30 konkurrens rsync-es másolás), lévén egyetlen csövön szeretnénk túl sok mindent átnyomni.
  • Tunneling esetén. Szintén beállíthatjuk a config fájlban, hogy az ilyen kapcsolatoknál ne használja a multiplexinget:


[tunnels]
ssh = ssh -o ControlMaster=no
Posted in Egyéb | Tagged | Leave a comment

Hogyan tegyük a Linux LVM mirrorlog mindkét példányát külön lábra

RedHat alatt kellett volna tesztelnem az LVM tükrözés használhatóságát, és bizony pár napot elböngészgettem ezzel a problémával, mert a redhat.com dokumentációjának ide vonatkozó fejezete enyhén elnagyolt:

You can specify which devices to use for the mirror legs and log, and which extents of the devices to use. To force the log onto a particular disk, specify exactly one extent on the disk on which it will be placed. LVM does not necessary respect the order in which devices are listed in the command line. If any physical volumes are listed that is the only space on which allocation will take place. Any physical extents included in the list that are already allocated will get ignored.
The following command creates a mirrored logical volume with a single mirror and a single log that is not mirrored. The volume is 500 MB in size, it is named 

mirrorlv

, and it is carved out of volume group 

vg0

. The first leg of the mirror is on device 

/dev/sda1

, the second leg of the mirror is on device 

/dev/sdb1

, and the mirror log is on 

/dev/sdc1

.

# 

lvcreate -L 500M -m1 -n mirrorlv vg0 /dev/sda1 /dev/sdb1 /dev/sdc1

Oké, csakhogy én azt szeretném, hogy a meta adatok (mirrorlog), amik a tükör szinkronállapotát tartalmazzák, szintén mindkét lábon le legyenek tárolva, különben mi értelme van az egésznek. (Ha a mirrorlog nem elérhető, az LVM a tükör mindkét lábát újra felnyálazza – persze ha egyáltalán elérhető mindkét láb -, hogy újra generálja azt. És amíg ez megy, az LV-k használhatatlanok.) Nem nagyon akarom túl bő lére ereszteni, hogy mi mindent szívtam végig, mire teljesen véletlenül sikerült jól megcsinálni (utólag silabizáltam ki, hogy most vajon mitől lett jó, és eddig miért nem), a lényeg, hogy így kell (az LVM használatának részletesebb kifejtése sem célja ennek az írásnak, van róla használható infó a neten bőven):

Tegyük fel, hogy van két diszkem (/dev/sda1 és /dev/sdb1) és ezeket szeretném egy vg0 volume groupba fogni, amin egy 500MB méretű, mirrorlv nevű logical volume-ot szeretnék tükrözötten létrehozni, úgy, hogy mindkét diszken legyen egy-egy lába. Kapásból kétlábasra csinálni nekem a mai napig nem sikerült. Mindig vagy az LV-nek, vagy a mirrorlognak került mindkét példánya azonos lábra. Viszont, ha megcsinálom az LV-t normál egypéldányosra (linear), és utána konvertálom át tükrözötté, úgy összejött:

# 

lvcreate -L 500M -n mirrorlv vg0 /dev/sda1
# 

lvconvert -m1 vg0/mirrorlv --mirrorlog mirrored --alloc anywhere /dev/sdb1 /dev/sda1

A “-m1” -gyel megadjuk, hogy innentől egy tükör példányt is szeretnénk a “vg0/mirrorlv” LV-nek, tükrözött mirrorloggal, amit bárhol elhelyezhet (egyébként az alapértelmezett –alloc érték az “disk”, amivel egy külön, jelen esetben 3. diszkre tehetnénk a mirrorlogot, amit legutolsó paraméterként kell megadnunk, illetve lehet “core”, ami pedig memóriában tárolja – ennek csak rövid életű tükrök esetén lehet értelme.) És akkor a trükk: az lvconvert-nek nem csak az új diszket kell megadni, amire a tükröt szeretnénk tenni, hanem utána (és a sorrend nem mindegy!) meg kell adni az eredeti diszket is, amin már az LV rajta van, különben a mirrorlogot csak az új diszkre teszi – két példányban.



[root@lnx ~]# lvs -a -o +devices
  LV                       VG   Attr   LSize    Origin Snap%  Move Log           Copy%  Convert Devices
  mirrorlv                 vg0  mwi-ao  512.00m                    mirrorlv_mlog 100.00         mirrorlv_mimage_0(0),mirrorlv_mimage_1(0)
  [mirrorlv_mimage_0]      vg0  iwi-ao  512.00m                                                 /dev/sda1(0)
  [mirrorlv_mimage_1]      vg0  iwi-ao  512.00m                                                 /dev/sdb1(0)
  [mirrorlv_mlog]          vg0  mwa-ao  512.00m                                  100.00         mirrorlv_mlog_mimage_0(0),mirrorlv_mlog_mimage_1(0)
  [mirrorlv_mlog_mimage_0] vg0  iwi-ao  512.00m                                                 /dev/sda1(1)
  [mirrorlv_mlog_mimage_1] vg0  iwi-ao  512.00m                                                 /dev/sdb1(1)

És ennyi, akinek van kiegészítő infója, hogy hogyan lehet ezt egy lépéssel megcsinálni, az megoszthatná egy kommentben, köszi! :)

Néhány további hasznos írás  a Linux LVM mirroringról:

http://www.datadisk.co.uk/html_docs/redhat/rh_lvm.htm
http://www.sandelman.ca/mcr/blog/lvm/
http://kairo.wordpress.com/2009/05/06/making-lvm-mirror-on-linux-using-red-hat-cluster-suite-clvm-cluster-lvm-on-rhel-5/
http://www.joshbryan.com/blog/2008/01/02/lvm2-mirrors-vs-md-raid-1/
http://serverfault.com/questions/126851/linux-lvm-mirror-vs-md-mirror
http://deranfangvomende.wordpress.com/2011/04/04/linux-lvm-mirroring-comes-at-a-price/
http://unixlinux.tmit.bme.hu/Logikai_k%C3%B6tetkezel%C3%A9s

Posted in Egyéb | Tagged , , , | Leave a comment

Szegény ember DynDns-e Godaddy-vel

Évekig a DynDns ingyenes szolgáltatását használtam arra, hogy az otthoni gépem bárhonnan elérhessem valami fix domain név alatt. A DynDns azonban először csak rettentő idegesítővé tette az ingyenes felhasználóknak a szolgáltatást (havonta meg kellett erősíteni, hogy a fiókot használod még), majd most végül teljesen meg is szüntette. Márpedig a fizetős account áráért már egy rendes domaint vehetek, végződéstől függően akár évekre is. Hát, köszi nem. Van még egy másik jól használható dinamikus DNS szolgáltatás, ami ingyenes, a no-ip.org, de nagyon bénák az ingyenesen használható domain-jeik, ha nem muszáj, nem akartam használni. Ekkor futottam bele egy jópofa, költséghatékony megoldásba. Nekem a weblapjaim domainjei már pár éve a Godaddy kezelésében vannak, így nagyon megörültem, mikor belebotlottam abba a megoldásba, amit most veletek is megosztanék.

Van egy python program, amivel át lehet írni a Godaddy-n a domain-ek DNS Zone File-ját. Ami azért jó, mert így csak felvettem egy aldomaint pl. a Raspberry-mnek Godaddy-n az egyik domainem alá, és cron-nal beütemeztem egy szkriptet, ami óránként frissíti a hozzá tartozó IP-t, ha az változott. A dolog így néz ki:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python
import logging
import pif
import pygodaddy
 
logging.basicConfig(filename='/var/log/godaddy.log', format='%(asctime)s %(message)s', level=logging.INFO)
GODADDY_USERNAME="user"
GODADDY_PASSWORD="jelszo"
client = pygodaddy.GoDaddyClient()
client.login(GODADDY_USERNAME, GODADDY_PASSWORD)
 
for domain in ["domainem.com"]:
    dns_records = client.find_dns_records(domain)
    public_ip = pif.get_public_ip()
    logging.debug("Domain '{0}' DNS records: {1}".format(domain, dns_records))
    if public_ip != dns_records[2].value:
        client.update_dns_record("aldomain.domainem.com", public_ip)
        logging.info("Domain '{0}' public IP set from '{1}' to '{2}'".format(domain, dns_records[2].value, public_ip))

Mi történik? Tegyük fel, hogy az aldomain.domainem.com IP-jét akarom frissíteni, ez a Godaddy DNS Zone File “A” részében a 3. sor. A program beolvassa a dns_records változóba az “A” bejegyzéseket, 0-val kezdve ugyebár az indexelést. Lekéri a publikus IP-nket. Loggol, majd ha a DSN Zone File 3. sorának IP-je (vagyis a dns_domains[2] értéke) nem egyezik az aktuális publikus IP-nkkel, akkor az új IP-vel felülírja az aldomain.domainem.com IP-jét. Kicsit nyakatekert, de műxik szépen.
Van hozzá egy bash szkript is, amivel meg lehet hívni egy kis elszeparált virtuális python környezetben futtatva:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
WANIP=`dig +short myip.opendns.com @resolver1.opendns.com`
touch /tmp/godaddy_lastip
if [[ "$(cat /tmp/godaddy_lastip)" = "$WANIP" ]]; then
    exit 0;
fi
OLD_PWD=$PWD
ROOT_DIR=$(dirname $0)
cd $ROOT_DIR
if [ ! -d .venv27 ] ; then
      curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.9.tar.gz
      tar xvfz virtualenv-1.9.tar.gz
      python virtualenv-1.9/virtualenv.py .venv27
fi
source .venv27/bin/activate
pip install -q --upgrade pif pygodaddy
./godaddy.py && echo $WANIP > /tmp/godaddy_lastip
deactivate
cd $OLD_PWD

Köszönet az eredeti szkriptért Sascha-nak. Én már kicsit átmókoltam mindkettőt :)

Posted in Egyéb, Shell szkriptelés | Tagged , , , | 2 Responses

Egy módosított ‘rpi-clone’ a Raspberry Pi-nk biztonsági mentéséhez

Fotó: wikimedia.org

Fotó: wikimedia.org

Jó ideje hibátlanul muzsikál már itthon a kis RasPi-m, de az időszakos reszelgetéseimnek hála párszor azért volt már, hogy tönkre vágtam a Debiant alatta :) (Legutóbb egy “apt-get update” elég volt ehhez…) Ilyenkor jön jól ugye egy biztonsági mentés a rendszerről. Ez idáig rsync alapú fájl mentést használtam egy másik hosztra apróbb visszatöltésekhez és dd-vel lementett teljes SD backupot totális crash esetére. Ezzel azonban volt némi probléma, mivel 32GB-os SD-t használok a kütyüben, annak egy dd-vel való mentése több óra is lehet. Egy ekkora image visszaírása SD-re szintén rengeteg idő. Főleg bosszantó ez tudatában annak, hogy ebből a 32G-ból legtöbbször max 5GB-ot használok, a többi szabad terület. De ugye ez a dd-t nem érdekli, másol szépen bitről-bitre… :)

Aztán itt jött a képbe Bill Wilson remekül megírt shell szkriptje, az rpi-clone, ami egy RasPi SD-jét klónozza le egy másikra (USB-s kártyaolvasóba dugva a Raspberryn). A szép a megoldásában az, hogy ha elfér a futó RasPi rendszere kisebb kártyán, mint amin épp fut, akkor kisebb kártyára is átklónozza, ugyanis nem dd-t használ, hanem rsync-et, meg ugye előtte particionálgat a cél kártyán, szóval nem annyira favágó megoldás már, mint a dd-s.

És itt jött az ihlet, hogy nem lehetne-e ezt átírni úgy, hogy egy image fájlba mentsen, ne egy fizikai device-ra (SD kártya). Pár napnyi pötyörészés, fejvakarás, meg guglizás után végül sikerült megcsinálnom – loop device-ok segítségével. A megvalósítási részletekbe nagyon nem mennék bele, a lényeg, hogy nálam tesztelve, műxik, aki szeretné, használja egészséggel.

Első futáskor létrehoz egy konténer fájlt, amit felcsatol a loop device alá, ez idő. Viszont később már, ha ezt a fájlt megtartjuk, tud ebbe dolgozni, és pikk-pakk lehet vele menteni inkrementálisan a változásokat. A mentés végén erről a konténer fájlról készül másolatként a mi image-ünk. (Ami épp csak kevéssel nagyobb, mint amennyi helyet jelenleg elfoglalunk a RasPi-nk “/” és “/boot” fájlrendszerében.) Értelemszerűen a mentést egy USB-s eszközre kell csinálni. Ha kérdés van a használatával kapcsolatban, keressetek.

A script (amit “rpi-clone2“-nek neveztem el a keveredések elkerülése végett) letölthető innen, emígyen pl:

root@raspberrypi# wget http://linuxuckers.com/letoltes/rpi-clone2 -O /usr/local/sbin/rpi-clone2
root@raspberrypi# chmod a+x /usr/local/sbin/rpi-clone2
Posted in Shell szkriptelés | Tagged , , | Leave a comment

Shell végrehajtás PHP alatt PDF kiolvasására

Felbátorodva a kolléga posztján, csapjuk szét az uborkaszezont egy újabb bejegyzéssel. Tőlem az igazán lámer Linux-írásokat szokhattátok meg, de most jöjjön egy kis PHP.

shell_exec… Ezzel közvetlenül shell parancsokat adhattok ki a PHP szkriptből. Tudom, hogy kísértetiesen hangzik, és a biztonségi kérdések is komolyak; ezért tessék finoman bánni vele.

PDF-et szerettem volna kiolvasni, de a ritkán használt PHP könyvtárakkal sokszor csak az idő megy. Ekkor leltem rá a pdftotext alkalmazásra:

sudo apt-get install poppler-utils

Amit már csak meg kellett hívni PHP alól:

$content = shell_exec('/usr/bin/pdftotext ' . $filename . ' - -layout -enc UTF-8');

…és máris egy magyar karakterekkel is megbírkózó eszközünk van. A paraméterezés sok apróságot lehetővé tesz, így akár teljes HTML-táblázatokat olvashatunk ki a struktúra megtartásával, vagy a tartalmat akár rögtön egy másik fájlba tölthetjük.

Ami szívás, az az, hogy a PDF-generáláskor pl. a word entereket tesz minden sor végére. Jól megírt reguláris csere függvénnyel persze ez is rendbetehető. De ezt már a tifantáziátokra bízom :)

Lájkolj, ha kell még PHP-témájú bejegyzés a jövőben!

UPDATE: ha a PDF-fájlból képeket is ki szeretnél olvasni, akkor használd a pdfimages szoftvert.

Posted in Uncategorized | Tagged | 2 Responses

Mi? Tee? – Na, ezt én eddig miért nem ismertem?

Én úgy szeretem a nyunyikszot! Hogy van az, hogy most kell megtudnom, hogy van ez a “tee” parancs?

Hányszor nyafogtam már eddig, mikor valami parancs kimenetét látni is szerettem volna, és naplózni, fájlba írni is egyszerre? Sokszor. Persze, megoldottam, de az egy elkerülő megoldás volt. Mi volt? Fogtam, és nohup-pal a háttérben elindítottam a parancsot, kimenetét beleirányítottam egy fájlba, amit aztán “tail -f”-fel lehetett real-time csekkolni.

agocs@gepem$ nohup szkriptem.sh > /tmp/szkriptem.out 
[1] 1234
agocs@gepem$ tail -f /tmp/szkriptem.outblablaez a kimenetblabla

Ezzel szemben mit tud a tee? Standard inputot kilöki standard outputra ÉS a paraméterként megadott fájlba is egyszerre. (“-a” paraméterrel nem felülírja a célfájlt, hanem hozzáírja – append)

agocs@gepem$ szkriptem.sh | tee /tmp/szkriptem.outblablaez a kimenetblabla

Miért gondoltam egyáltalán, hogy erre a problémára nincs program? Totál ostoba voltam… 😀

Posted in Uncategorized | 1 Response

Laikus linux webszerver üzemeltető első és legfontosabb aranyszabálya

Nem mennek a weblapok? Nem tudsz FTP-zni? Torlódnak az Apache-szálak?

Miért?

Elfogyott a tárhely!

Miért?

du -hs /var/log

du -hs /var/mail

Posted in Uncategorized | 2 Responses

Óriási a várakozás: Raspberry Pi

Nemrég a Twitteren találkoztam először a témával, azóta komolyabban is figyelem az eseményeket. Miről is van szó? Úgy tűnik a szakma erősen ráizgult egy 6 év alatt kifejlesztett, nemrég piacra dobott, kb. bankkártya méretű mini PC-re. Az izgalomnak valószínűleg több oka is van:

  • a 35$-os ár
  • az apró méret
  • és a mindezekért cserébe járó paraméterek, amiket az apróság tud. (700 Mhz ARM CPU, 256MB RAM, RCA & HDMI video kimenet, 3.5″ jack audio kimenet, SD kártya olvasó, USB, LAN)

Az Index is megemlékezett a témáról pár napja, igaz nem eresztette bő lére, de a koncepció lényege benne van:

A brit oktatási minisztérium változtatni szeretne a számítástechnika tanításán iskolákban, nagyobb hangsúlyt fektetve a programozási ismeretekre. A Pi segítheti ezt, fontos szerepe lehet abban, hogy a gyerekek elsajátítsák az alapokat.

A Pi 22 fontba kerül, de még az idén piacra dobnak egy még olcsóbb változatot, az 16 fontba kerül majd. Az olcsóság oka a puritánság: nyílt forráskódú Linux van a gépen, hozzá lehet csatlakoztatni hagyományos monitorhoz, billentyűzetet, egeret lehet hozzákötni. Egy ethernet port is van rajta, vagyis internetezni is lehet vele.

Arra számítanak, hogy a Pi körüli közösség szoftvereket fog írni hozzá és megmutatják, hogyan használják a számítógépet.

forrás: index.hu

Szerelem első látásra :) Mini USB-vel táplálható az egész, ami azt jelenti, nincs sehol aktív hűtés a sztoriban – hangtalan, mint egy nindzsa. Akár 4 ceruza elemmel is elpöfög :) (Azonban mivel pl egy USB-s winyót, meg a videó kimenetet és egy billentyűzetet is meg kellhet hajtania egyidőben, azért nem árt egy erősebb (min. 700 mA-es) tápot adni neki.) Pici, egy dzsesszes kis tokozással szépen elrejthető a router-ünk mögött akár. A GPU-nak köszönhetően úgy néz ki a leírások alapján, hogy egy HD vidit is elvisz. Jelenleg támogatott Linux disztrók: Fedora, Debian, ArchLinux.
Igazi Linuxos játszótér, rengeteg lehetőséggel! :)

Én is rendeltem egyet hamar, bár egyelőre úgy tűnik, várni kell a szállítmányokra, mert nem bírják kiszolgálni a rájukszakadt rendelés zuhatagot. Eleve úgy kezdődött, hogy az első hivatalos itthoni forgalmazó úgy dönött, mégsem akarja forgalmazni. Ami végül nem akkora baj, mert az új szállító olcsóbban adja úgy tűnik :) A kütyü úgy érkezik, mint az ember: ruha nélkül, csupaszon. Egyetlen fájdalmam, hogy egy SATA, vagy PATA portot nem raktak rá :-/ Sebaj, marad az USB-s winyó… És hogy mire lehet jó azon kívül, hogy programozni tanuljunk rajta? Pár ötlet:

  • Otthoni kis dedikált letöltögető gép
  • Házi készítési média lejátszó
  • Házi backup hoszt
  • Nyomtató szerver
  • Otthoni web/fájl szerver
  • Kommentekben várom a további ötleteket!

Én szerintem lecserélem rá a mostani letöltögetős miniPC-m. Abban van sajna proci hűtő venti és hangosabb jelenleg, mint bármelyik másik IT eszközöm otthon. És nagy is az. Bumszli táppal. Szóval megérett a cserére na! :) 

    A projekt hivatalos oldala: http://www.raspberrypi.org
    Hivatalos Twitter csatorna: http://twitter.com/Raspberry_Pi
    A magyar “fan klub”: http://raspberrypi.hu
    Forgalmazók világszerte: http://elinux.org/RPi_Buying_Guide
    R-Pi HUB az elinux.org-on: http://elinux.org/RaspberryPiBoard

    Egyébként meg Google :)

    Posted in Uncategorized | Tagged , , , , | Leave a comment

    Biztonsági másolat készítés SSH-n, 1 hónapos megőrzéssel

    Néhány konfig fájlt kell viszonylag sűrűn lementenem az egyik éles szerverünkről a backupra, úgy, hogy lehetőleg sűrűn mentsem őket (esetemben 10 percenként), őrizzem meg őket egy hónapig, de az 1 napnál régebbiekből elég csak egyet. Ha valamiért nem menne a másolás, emailt küld a kudarcról. Egyszerű ügy.

    Kis agyalás után végül ezzel a szkripttel oldottam meg:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    #!/bin/bash
    ATTACHFILE=`date +bkp_files_%Y%m%d%H%M.tar.gz` SRC_DIR="/innen/mentjuk" BKP_DIR="/backup" BACKUP_SRV="bckserver" ERR_MAILS="mailcimem@posta.hu" EXP_TIME=31cd ${SRC_DIR} 
    # Betomoriti egy tar.gz-be a mentendo fajlokat es ssh-n atmasolja a backup szerverre/gepre - egy szusszanásra
    tar cf - fajl1.dat fajl2.cfg fajl3.exe fajl4.jpg  | gzip -c9 | ssh ${BACKUP_SRV} "cat > ${BKP_DIR}/${ATTACHFILE}"
    if [[ $? -ne 0 ]]; then         
      echo -e 'Biztonsági mentés másolása sikertelen.' | mail -s "Backup error" ${ERR_MAILS};        
      logger -s -t backup 'A biztonsági mentés másolása sikertelen.'
    else        
      logger -s -t backup 'A biztonsági mentés másolása sikeres.'
    fi
    # A 31 napnal regebbi masolat fileokat torli, az 1 napnal regebbiekbol csak a 02:00 orait hagyja meg
    ssh ${BACKUP_SRV} "find ${BKP_DIR}/bkp_files_*0200.tar.gz -exec touch -a {} ;"
    ssh ${BACKUP_SRV} "find ${BKP_DIR}/* -atime +1 -exec rm {} ;"
    ssh ${BACKUP_SRV} "find ${BKP_DIR}/bkp_files_*0200.tar.gz -mtime +${EXP_TIME} -exec rm {} ;"

    Másoljunk 4 fájlt a BCKSERVER-re az ottani /backup mappába tar.gz-be tömörítve a gépünk /innen/mentjuk mappájából.

    Tar-ral betuszkolom a 4 pálda fájlt egy tar-ba, átadom a gzip-nek, hogy letömörítse, és már lököm is be egy SSH sessionbe, aminek a túlsó végén mindezt bele irányítom egy időbélyeggel ellátott fájlba.

    Hiba esetén repül a mail. (A másolás sikerességét a /var/messages-be is beírjuk a logger-rel.)

    Aztán a túloldalon a backup fájlok közül a 2 óraiakat “megérintem” a touch paranccsal, hogy mostanra módosítsam a “Last access”-üket. Ezután kitörlök minden 1 napnál régebbi “Last acces”-ű fájlt. A mai összes, és az egy napnál régebbi 2 óraiak ugye megmaradnak. Ezután kitörlöm a 31 napnál régebbi “Modified date”-ű fájlokat, így a 2 óraiakból is csak egy hónapnyi marad.

    Nyilván ez nem egy nagy fájlrendszer backupolására való, mert nem lehet vele inkrementálist (arra egyébként ez pl kis környezetben elég jó szerintem). De kis fájloknál, nagy számú verzió megőrzésére simán elég.

    (Ja, és persze ahhoz, hogy cron-nal ütemezni tudjuk nem árt legenerálni a publikus kulcsot a gépünkön, és átmásolni a backup gépre az authorized_keys-be, hogy ne kérjenek az SSH session-ök jelszót, hanem csak szép csendben végezzék a dolgukat.)

    Posted in Uncategorized | Tagged , | 2 Responses