A C4nn0N logó

2014-07-26 20:50:32
Címkék: logo , design , c4nn0n

Nem vagyok sok kreativitással megáldva, én inkább az útkereső fajta vagyok, aki - ha látja a célt, el tud oda jutni.

Tehát teljesen új dolgok létrehozása nekem idegen, de ezúttal valahogyan ihletet kaptam a C4nn0N logó megalkotásával kapcsolatban.


Teljes bejegyzés

Nagyon régóta gondolkodtam rajta, és sosem jutottam tovább egy bizonyos pontnál, kb így:

Ez meglehetősen amatőrnek tűnik, de vegyük figyelembe, hogy 2004-et írunk az első terv elkészültekor.

A C betű és a 4-es kapcsolatára valami elegánsabbat szerettem volna kitalálni, így a közelmúltban elkezdtem kísérletezni ezekkel.

Már volt valami végleges kép a fejemben, amit már csak finomhangolni kellett.

Volt mögötte egy kis manuális tervezés is:

Némi pixelmágia a legjobb grafikai programmal, és nagyjából megszületett a végeredmény:

Ezen felbuzdúlva pedig a megoldást extrapolálva az egész C4nn0N felirat megalkotása is sikerült:

És még akár FullHD-ban le is tölthető:


Virtualizálás Xen 4.4-gyel Ubuntu 14.04 alatt (64 bit)

2014-04-30 09:46:38
Címkék: xen , ubuntu , trusty , oob , hvc0

Default Ubuntu 14.04 install

Az aktuálisan elérhető Ubuntu Server x64 telepítőt letöltöttem, telepítettem. Csak az OpenSSH Server csomagot tettem fel a felkínáltakból, a hdd-t három részre osztottam:

  • sda1: 8 GB a rendszernek
  • sda2: 8 GB swap
  • sda3: 484.1 GB a virtuális gépeknek, LVM-mel

Kernel: 3.13.0-24-generic


Teljes bejegyzés

A rendszer felkészítése

root@ub14:~# apt-get update
root@ub14:~# apt-get upgrade
root@ub14:~# apt-get install lvm2 debootstrap xen-hypervisor-4.4-amd64

Logikai lemezek a virtuális gépeknek (LVM)

root@ub14:~# pvcreate /dev/sda3
root@ub14:~# vgcreate -s 512M vg01 /dev/sda3
root@ub14:~# lvcreate -l 8 -n virt-os vg01
root@ub14:~# lvcreate -l 8 -n virt-swap vg01
root@ub14:~# mkfs.ext4 /dev/vg01/virt-os
root@ub14:~# mkswap /dev/vg01/virt-swap

Alaprendszer előkészítése a virtuális diszken (debootstrap)

root@ub14:~# mkdir virthdd
root@ub14:~/virthdd# mount /dev/vg01/virt-os .
root@ub14:~/virthdd# debootstrap trusty .

Alaprendszer konfigurálása

root@ub14:~/virthdd# cp -pr /lib/modules/3.13.0-24-generic ./lib/modules/
root@ub14:~/virthdd# chroot . /usr/bin/passwd
root@ub14:~/virthdd# vi ./etc/fstab

Az /etc/fstab javasolt tartalma:

# file_system mount_point type  options dump pass
proc             /proc           proc    defaults        0       0
/dev/xvda1       /               ext4    defaults,errors=remount-ro 0       1
/dev/xvda2       none            swap    sw              0       0
root@ub14:~/virthdd# vi ./etc/init/tty1.conf

Az /etc/init/tty1.conf javasolt tartalma:

# tty1 - getty
#
# This service maintains a getty on tty1 from the point the system is
# started until it is shut down again.

start on stopped rc RUNLEVEL=[2345] and (
            not-container or
            container CONTAINER=lxc or
            container CONTAINER=lxc-libvirt)

stop on runlevel [!2345]

respawn
exec /sbin/getty -8 38400 hvc0
root@ub14:~/virthdd# vi ./etc/hostname
root@ub14:~/virthdd# vi ./etc/network/interfaces

Az /etc/network/interfaces javasolt tartalma:

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.168.2
    netmask 255.255.255.0
    gateway 192.168.168.1
    dns-nameservers 8.8.8.8
root@ub14:~# vi virt-os.xen

A virt-os.xen javasolt tartalma:

kernel   = "/boot/vmlinuz-3.13.0-24-generic"
ramdisk  = "/boot/initrd.img-3.13.0-24-generic"
memory   = 2048
name     = "virt-os"
vif      = ['ip=192.168.168.2']
extra    = 'xencons=tty'
disk     = ['phy:/dev/vg01/virt-os,xvda1,w', 'phy:/dev/vg01/virt-swap,xvda2,w']
root     = "/dev/xvda1 ro"
root@ub14:~# vi /etc/xen/xend-config.sxp

NAT beállításához az /etc/xen/xend-config.sxp fájlt a következőképpen kell módosítani:

...
#(vif-script vif-bridge)
...
...
(network-script network-nat)
(vif-script     vif-nat)
...

valamint, az /etc/xen/xl.conf fájlban a következő paramétereknek kell szerepelniük:

vif.default.gatewaydev="eth0"
vif.default.script="vif-nat"

Végül:

root@ub14:~# umount virthdd
root@ub14:~# reboot

Tesztelés

root@ub14:~# xm create -c virt-os.xen
Ubuntu 14.04 LTS v-ub14 hvc0

v-ub14 login: root
Password:
Last login: Tue Jan 22 10:16:21 UTC 2013 on hvc0
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-29-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
root@v-ub14:~# ping index.hu
PING index.hu (217.20.130.97) 56(84) bytes of data.
64 bytes from sportgeza.hu (217.20.130.97): icmp_req=1 ttl=57 time=5.03 ms

Innentől gyakorlatilag bármi megtehető, javasolt egy sshd egyből, hogy ne a xen konzolból kelljen adjusztálgatni a beállításokat.

Természetesen a NAT-hoz szükséges tűzfal és kernelparamétereket a dom0-n be kell állítani.

Segítségek:

Building a Debian or Ubuntu Xen Guest Root Filesystem using debootstrap

XEN Routed Networking with NAT


Xen és XenServer előadás

2014-04-17 06:11:00
Címkék: xenserver , xen , eloadas

Kedves kollégám, barátom felkérésére órát adtam a Széchenyi Egyetem villamosmérnök hallgatóinak a Xen virtualizációs megoldásról és a XenServer disztribúció használatáról / konfigurálásáról.

Az előadás anyaga elérhető az alábbi linken: Xen és Xenserver "diasor"



HLDS-V8: Javscripttel programozható HLDS (CS 1.6)

2014-03-15 09:33:53

"Nagy fába vágtam a fejszémet"

Mióta a C4nn0N CSDM üzemel, elég sok hasznos funkcióval bővítettem már egy saját AMXX pluginnel. Idő közben rájöttem, hogy szinte minden adatot, ami üzemeltetéskor létrejön, valamilyen webes technológiával dolgozom fel, illetve az AMXX plugin programozás a programnyelv miatt meglehetősen nehézkes.

Így kb. egy hónappal ezelőtt elhatároztam, hogy írok egy plugint, ami az AMXX (programnyelve a Pawn, horror) programozás helyett Javascripttel programozhatóvá teszi a HLDS-t (Half Life Dedicated Server - ami a Counter Strike kiegészítést is futtatja). Mivel elméleti akadálya nem volt, némi doksiolvasás és utánajárás után sikerült minden szükséges komponenst működőképes állapotba hozni:

L 03/02/2014 - 11:17:03: [HLDSV8] !!!

Megnyíltak a lehetőségek

Ez a kis eredmény is egy akkora kaput nyitott ki, hogy még mindig nem látom meddig terjed a témakör. Első célom az, hogy a jelenleg használatos fő adminisztrációs plugint átültessem JS alá, így ez a kitűzött cél.

A projektnek létrehoztam egy github repot is: https://github.com/deejayy/hlds-v8

Később lesz majd snapshot is, amivel nem kell az egész hóbelevancot lehúzni a kipróbáláshoz.

Egyelőre szigorúan linux i386 (32 bit) a célplatform, de volt már érdeklődés windows-ra is.

Alliedmods fórum



Node.js ékezetes szövegbevitel konzolból / parancssorból

2013-06-27 07:41:54
Címkék: stdin , process , nodejs , konzol , input

A probléma

Node.js scriptjeim írásakor gyakran tartok igényt on-demand debugra, azaz, ha a script célja alapvetően nem a konzolos interakció, akkor is dolgozzon fel olyan parancsokat, amikkel debug infókat tudok belőle kinyerni (pl. egy torrent trackernél érdekel, hogy éppen milyen torrenteket és peereket tart nyilván). Erre eddig a process.stdin.resume() és társait használtam, valahogy így:


Teljes bejegyzés
process.stdin.resume();
process.stdin.setEncoding('utf8');

process.stdin.on('data', function(data) {
    console.log(data);
    console.log(new Buffer(data));
});

Ezzel remekül lehet normál parancsokat olvasgatni stdin-ről és aszerint cselekedni.

C:\nodejs>node "test01-process.stdin.js"
helo
helo

<Buffer 68 65 6c 6f 0d 0a>

A probléma akkor van, ha ékezetet is írunk:

C:\nodejs>node "test01-process.stdin.js"
ez: íéáűőúöüó
ez: ���������

<Buffer 65 7a 3a 20 ef bf bd ef bf bd ef bf bd ef bf bd ef bf bd ef bf bd ef bf bd ef bf bd ef bf bd 0d 0a>

Ugye ez nem tekinthető feldolgozható bemenetnek, az összes ékezetes betű ef bf bd kódként jelenik meg, még csak konvertálni sem lehet.

Próbáljunk néhány másik encoding típust: process.stdin.setEncoding('ascii');

Az eredmény sajnos változatlanul rossz.

Második próbálkozás: process.stdin.setEncoding('binary');

C:\nodejs>node "test01-process.stdin.js"
íéáűőúöüó
¡‚ û‹£”¢

<Buffer c2 a1 c2 82 c2 a0 c3 bb c2 8b c2 a3 c2 94 c2 81 c2 a2 0d 0a>

Itt már van egy részeredmény: a karakterek ugyan rosszak, de legalább már mindegyik más kódot kap, konvertálásra végülis alkalmas.

De olyan nincs, hogy 2013-at írunk, és egy dinamikusan fejlődő scriptmotorral nem lehetséges normálisan ékezetes karaktereket olvasni. Nonszensz. További kutatásra van szükség.

A megoldás

A stackoverflow.com-on találtam egy másik részmegoldást a következő kódrészlet formájában:

var readline = require('readline');

var rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    terminal: false
});

rl.on('line', function (data) {
    console.log(data);
    console.log(new Buffer(data));
});

Az eredmény sajnos szintén elkeserítő:

C:\nodejs>node "test02-readline.js"
123 éáű
123 ���

<Buffer 31 32 33 20 ef bf bd ef bf bd ef bf bd 0d 0a>

Viszont a dokumentációt elolvasva az alábbi kapcsoló segíthet nekünk:

terminal - pass true if the input and output streams should be treated like a TTY, and have ANSI/VT100 escape codes written to it. Defaults to checking isTTY on the output stream upon instantiation.

Tehát, próbáljuk ki így:

    ...
    terminal: true
    ...

Ó igen, a script végre az elvárt eredményt szolgáltatja.

C:\nodejs>node "test02-readline.js"
123 éáű
123 éáű
<Buffer 31 32 33 20 c3 a9 c3 a1 c5 b1>

Egy Counter Strike szerver üzemeltetési tapasztalatai

2013-05-17 14:21:14
Címkék: stat , server , cs 1.6 , counter strike

Közel másfél éve indult egy a C4nn0N DeatchMatch (CSDM) szerver, annak idején a Pro_Hunter$ CSDM szerver utódaként (az akkori üzemeltető megunta ill. nem akart már rá többet áldozni). Az azóta eltelt idő sok tapasztalattal gazdagított a Counter Strike szerverek üzemeltetési témakörében, ideje ezeket összeszedni.


Teljes bejegyzés

Statisztika

A C4nn0N CSDM jelenleg a 2657. a Gametracker világranglistája szerint. Magyar viszonylatban ez 32. helyet jelent, az összesen 408 szerverből (top 10%).

Sajnos a 2011-12-21-i átálláskor nem sikerült megfelelően kommunikálni a régi szerver megszűnését és az új üzembe helyezését, így viszonylag alacsony látogatottsággal indultunk.

Ennek ellenére, ahogy egy új szervernél várható, a látogatottság kezdett lassan felfelé ívelni, különösen jót tett a nyári szünet, amikor a diákoknak több idejük volt a szerveren játszani. Így az is szépen látszik, ahogy szeptembertől ismét elkezdődik a tanulás, decemberig csak zuhan a játékosok száma. A hideg és a téli szünet aztán kicsit visszarántja a szervert a magasba.

A grafikonon a kék vonal a napi összes kapcsolódást számolja (azaz: lehet, hogy valaki akár 10-szer is connectelt, mind a 10-et számolom). A zöld vonal az egyedi játékosokat számolja (azaz: ha valaki 10-szer connectelt, akkor csak 1-szer számolom). A piros vonal a cheatelésen rajtakapott és bannolt játékosokat ábrázolja, szerencsére elég alacsony szinten van. (A 2013 áprilisi anomália egy új szerver plugin üzembe helyezése miatt keletkezett, javítás után normalizálódott a helyzet.)

A grafikonok külön-külön:

Összefoglalva: egy játékos átlagosan 3-szor csatlakozik a szerverhez egy nap (beleérve azt is, hogy a pályaváltás új kapcsolatnak minősül), és összesen 0.6% a csaló (ezeknek szerencsére van ellenszere, lejjebb kifejtem).

A szerveren egyébként eddig kb. 35 000 játékos fordult meg, nagyjából 15%-a rendszeresen visszatérő, szintén 15%-a pedig csak egyszer volt bent.

Steam vs. Non-steam

A régi szerver eredetileg is non-steames volt, tehát fogadott olyan játékosokat is, akiknek a CS-je nem jelentkezett be on-line. Ezt a hagyományt sajnos nem tudtam megtörni, ezt remekül példázza az alábbi statisztika is.

A grafikon alapján a jól működő CS-vel rendelkező játékosok átlagosan 12%-ot jelentenek, így ha a szerver csak őket fogadná, nem 12%-ra esne vissza a látogatottság, hanem még kevesebbre (kevés játékos esetén még kevesebb lép be), így lazábbak a csatlakozási feltételek.

A zöld zóna tehát a szabályos játékosok része. A szürke zónában vannak azok, akik újabb protokoll verziójú CS-t használnak, szerencsére egyre többen. A pirosban pedig azok vannak, akik nagyon régen frissítették a játékot és elavult protokollt használnak.

Ahogy látszik, a régi (47-es) protokoll 65%-ról 35%-ra csökkent másfél év alatt, azaz, ha továbbra is hasonló ütemben csökken, a végén az ilyen játékosokat ki lehet zárni. Ez azért fontos, mert a csalók jelentős része ilyen verziót használ, és ezzel a lépéssel nagyban megkönnyíthető az adminisztrátorok dolga.

Adminisztráció

A robotzsaru

Kezdetben kevés volt az adminisztrátor, de később az ő dolguk megkönnyítésére is született egy automatikus cheater-detektáló szerver-kiegészítő (amxx plugin), ami speciális algoritmusok segítségével azonosítja és megszünteti a csaláson kapott játékosok zavaró hatását. A robot hatékonysága 98%, a maradék 2%-ot felül szoktam vizsgálni és megszüntetem a kitiltást, ha a hibaarányba esik.

A csalók díjazása

A csalóknak egy esélyük van, a szerverről való "kitiltás" örök érvényű (pl. van a listában olyan, akit még 2011-ben tiltottam ki, azóta nem játszhat), hiszen aki egyszer cheatelt, hajlamos visszaesni. Tekintve a csalók kis arányát és a kitiltásukkal keletkező hozadékot, ez egy jó döntés.

Amit én kitiltásnak hívok ...

... az valójában nem a hagyományos értelemben vett kapcsolódási elutasítás (ahogy hívják: ban). Mivel a cheaterek is játékosok, kapcsolatot generálnak, látogatást hoznak, ezáltal növelik a szerver helyezését a globális listákon, a cheaterek kapcsolódhatnak és beléphetnek a játékba, DE minden lőszerük vaktöltény, azaz senkit nem tudnak vele megölni.

Segítség az adminoknak

A szerver statisztika teljesen on-line módon követhető, azaz ki mikor lépett be, hány embert ölt meg, ip címe és egyéb statisztikai adatok. Ez minden admin rendelkezésére áll, folyamatosan figyelhető a szerver anélkül, hogy be kellene lépni.

Trollok ellen

Sajnos minden közösségben előfordulnak trollok. A szerveren kétféle ilyen ember szokott lenni, az egyik a cheater, aki a játékot teszi tönkre, a másik pedig a chat-troll, aki mindenkit anyáz és hergel. A chat tetszőlegesen letiltható (akár örökre) egyes játékosoknál, így biztosítva a nyugalmas(abb) hangulatot.

Bár csak lazán tartozik ide, de a szerver felismer minden olyan beírást is, ami másik szervert reklámoz, hogy ezzel is csökkenjen az elvándorlók száma.

Könnyebb kezelhetőség

A szerver konzol önmagában elég kényelmetlen, ha a naplózás be van kapcsolva, gyakorlatilag követhetetlen. A hagyományos szerver parancsokat egy speciális IRC szerveren is ki lehet adni, ahol emellett követni lehet a chatet is, be lehet szólni kívülről.


Hogyan tegyünk grafikus felületet Ubuntu 10.04 Serverre?

2013-05-07 08:19:05
Címkék: xfce , x11 , vnc , ubuntu

A sorozat legújabb tagja a 6.06.1, 7.10 és 8.04 után: 10.04.


Teljes bejegyzés

Lássuk tehát (96.5MB-nyi csomag):

# apt-get update
# apt-get -f -y install xserver-xorg xfce4 vnc4server
# vncpasswd
# vncserver :0 -name x11 -depth 24 -geometry 1280x800

Tipp: mielőtt a vncservert elindítanánk, érdemes az alábbi sort hozzáírni a ~/.vnc/xstartup fájlhoz, hogy legyen tálca: xfce4-panel &


Torrent tracker node.js-ben 65 sorban

2013-04-28 10:23:25

A torrent tracker lényegi része nagyon egyszerű: nyilván kell tartani a torrent azonosítókat (info_hash) és a kliensek információit (peer_id illetve ip cím és port). A bejövő HTTP kéréseket fel kell dolgozni, a fenti két listát megfelelően frissíteni és visszaküldeni a választ.

https://github.com/deejayy/simple-tracker

Teszt: egy 2.5 GHz-es Core i5 cpuval 3500 kérést ki lehet szolgálni másodpercenként.



Hányadik vagyok a Google-ben?

2013-04-24 09:09:01

Alcím: Automatizált Google helyezés ellenőrző és konkurencia-figyelő

Ha arra vagyunk kíváncsiak, hogy az általunk menedzselt vagy a konkurencia által üzemeltetett weboldal hányadik helyen szerepel bizonyos kulcsszavak tekintetében a Google keresőjében, induljunk ki először a kézi módszerből: rákeresünk. Megnyitjuk a legtöbbet használt böngészőnket, beírjuk a lokális google keresőbe (google.hu) a kifejezést, majd a találatokat átnézzük, lapozgatunk, esetleg számolgatunk. Ez mondjuk 1-2 kulcsszó és kis verseny esetében nem jelenthet nagy gondot, de mi történik, ha 10-20 kifejezésre kellene optimalizálnunk, folyamatosan figyelnünk?


Teljes bejegyzés

Alapszabályok

Először is legyünk tisztában azzal, hogy ha a legtöbbet használt böngészőben nyitjuk meg a google.hu-t, akkor az általában emlékezni fog a korábbi keresésekre és találatokra, illetve arra is, hogy melyikekre kattintottunk. Ebből adódóan a gyakran klikkelt találatokat egyre fontosabbnak fogja találni és idővel előrébb helyezi [*], ami torzíthatja az adatokat. Erre megoldás az inkognitó mód (a legtöbb böngészőben van erre lehetőség), lényege, hogy teljesen nulláról indul, tehát egy időre elfelejt minden olyan korábbi beállítást és szokást, amit a napi használat során rögzített. Én Google Chrome-ot használok, abban a Ctrl+Shift+N gombok megnyomásával nyílik egy új inkognitó böngészőablak. Az itt indított keresések sokkal közelebb lesznek az átlagfelhasználó kereséseihez, mint a sajátunk.

A folyamat

Írjuk be a keresőszót vagy kifejezést, ami számunkra fontos lehet, én példának a "seo mágia" kifejezést választottam. A Chromeban van egy fejlesztői konzol (F12 billentyűre jön elő), amiben követhetők a böngésző által lekért url-ek. A "Network" fülön egy adott url-re jobb gombbal kattintva van olyan lehetőség, hogy "Copy as curl", ami annyit tesz, hogy a vágólapra másol egy komplett cUrl lekérést, fejlécekkel együtt. Valami ilyesmi lesz az eredmény (a jobb láthatóság miatt tördeltem a sorokat)

curl "https://www.google.hu/search?q=seo+m%C3%A1gia&spell=1&sa=X&ei=en53Uau7JoSItQbH5YCICA&ved=0CCwQBSgA&biw=1920&bih=955" \
-H ":host: www.google.hu" \
-H "accept-charset: ISO-8859-2,utf-8;q=0.7,*;q=0.3" \
-H "accept-encoding: gzip,deflate,sdch" \
-H "accept-language: hu-HU,hu;q=0.8,en-US;q=0.6,en;q=0.4" \
-H "user-agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31" \
-H ":path: /search?q=seo+m%C3%A1gia&spell=1&sa=X&ei=en53Uau7JoSItQbH5YCICA&ved=0CCwQBSgA&biw=1920&bih=955" \
-H "accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" \
-H ":version: HTTP/1.1" \
-H "cache-control: max-age=0" \
-H "cookie: NID=67=xyxyxyxy; PREF=ID=xyxyx" \
-H ":scheme: https" \
-H ":method: GET"

Ez ebben a formában elég bő és vannak benne kifejezetten problémás sorok (NID és PREF-et tartalmazó sor), illetve az url-en is kell egy kicsit javítani, hogy a nem kívánt tényezők véletlenül se torzítsák az eredményt, arról nem is beszélve, hogy az eredmény tömörítve (gzip) érkezik a képernyőre, ami nem használható egyszerűen. Leegyszerűsítve és működőképesen jelenleg az alábbi cUrl parancssorral lehet megkapni az eredményt:

curl "https://www.google.hu/search?q=seo+mágia&start=0" \
-H "accept-charset: ISO-8859-2,utf-8;q=0.7,*;q=0.3" \
-H "accept-language: hu-HU,hu;q=0.8,en-US;q=0.6,en;q=0.4" \
-H "user-agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31" \
-H "accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" \
-H "cache-control: max-age=0" \
-o output.html

Az eredmény még így sem könnyen használható, egy uglifyolt html-t kapunk, amiből még greppel/seddel/awkval sem egyszerű kinyerni a lényeget. Kis nyomozás után kiderül, hogy egy "search" id-jű div-ben vannak a valódi találatok (szponzorált linkek ugye nem számítanak), abban is van egy "rso" id-jű számozott lista, ami felsorolja őket. Kicsit mélyebbre mászva láthatjuk, hogy az összes találat hivatkozása egy "l" osztályú link (anchor, a), mondjuk jQuery-ben így lehet rájuk hivatkozni: $('a.l')  

Feldolgozás

A HTML fájlban a nekünk érdekes részt a DOM fa bejárásával találhatjuk meg, de erre már vannak eszközök, amik ezt biztosítják. Én a phpQuery-t választottam. Nem túl gyors, de képes egyszerűen elénk tárni az eredményt.

require('phpQuery.php');

$doc = phpQuery::newDocument(file_get_contents('output.html'));
$r = $doc['a.l'];
foreach ($r as $row) {
    printf("%s\n", pq($row)->attr('href'));
}

Ez a script felsorolja a találatok URL-jeit. Minden eszköz meg van arra, hogy ebből egy automatizált helyezés-ellenőrző legyen. Címszavakban: nyilván tartjuk a kifejezéseket (phrases.txt), nyilván tartjuk a domaineket (domains.txt), majd a kettőből egy mátrixot készítünk, amit már akár excelben is tudunk értelmezni, osztályozni, jelenteni.

Összelegózva

A csomag tartalma tehát:

  • check.sh - fő belépési pont, ez futtatja az összes kapcsolódó scriptet
  • parse.php - feldolgozza az egyes találati oldalakat és felsorolja az url-eket, amiket talált benne
  • format.php - az eredményt megformázza tsv formátumban a későbbi kezelhetőséghez
  • domains.txt - figyelendő domain-ek listája
  • phrases.txt - keresendő kifejezések listája
  • output.html - munkafájl, törlődik
  • temp-*.txt - munkafájlok, törlődnek

A fájlokat feltöltöttem githubra: https://github.com/deejayy/google-position-check

Eredmény

 

Pontszám: a kisebb jobb


Virtualizálás Xen 4.1-gyel Ubuntu 12.04 alatt (64 bit)

2013-01-22 08:58:15
Címkék: xen , ubuntu , precise , oob , hvc0

Default Ubuntu 12.04 install

Az aktuálisan elérhető Ubuntu Server x64 telepítőt letöltöttem, telepítettem. Csak az OpenSSH Server csomagot tettem fel a felkínáltakból, a hdd-t két részre osztottam: - sda1: 10 GB a rendszernek - sda2: 70 GB a virtuális gépeknek, LVM-mel

Kernel: 3.2.0-29-generic


Teljes bejegyzés

 

A rendszer felkészítése

root@ub12:~# apt-get update
root@ub12:~# apt-get upgrade
root@ub12:~# apt-get install lvm2 debootstrap xen-hypervisor-4.1-amd64

root@ub12:/etc/grub.d# mv 10_linux 15_linux
root@ub12:/etc/grub.d# mv 20_linux_xen 10_linux_xen
root@ub12:/etc/grub.d# update-grub

Logikai lemezek a virtuális gépeknek (LVM)

root@ub12:~# pvcreate /dev/sda2
root@ub12:~# vgcreate -s 512M vg01 /dev/sda2
root@ub12:~# lvcreate -l 8 -n virt-os vg01
root@ub12:~# lvcreate -l 8 -n virt-swap vg01
root@ub12:~# mkfs.ext4 /dev/vg01/virt-os
root@ub12:~# mkswap /dev/vg01/virt-swap

Alaprendszer előkészítése a virtuális diszken (debootstrap)

root@ub12:~# mkdir virthdd
root@ub12:~/virthdd# mount /dev/vg01/virt-os .
root@ub12:~/virthdd# debootstrap precise .

Alaprendszer konfigurálása

root@ub12:~/virthdd# cp -pr /lib/modules/3.2.0-29-generic ./lib/modules/
root@ub12:~/virthdd# chroot . /usr/bin/passwd
root@ub12:~/virthdd# vi ./etc/fstab

Az /etc/fstab javasolt tartalma:

# file_system mount_point type  options dump pass
proc             /proc           proc    defaults        0       0
/dev/xvda1       /               ext4    defaults,errors=remount-ro 0       1
/dev/xvda2       none            swap    sw              0       0
root@ub12:~/virthdd# vi ./etc/init/tty1.conf

Az /etc/init/tty1.conf javasolt tartalma:

# tty1 - getty
#
# This service maintains a getty on tty1 from the point the system is
# started until it is shut down again.

start on stopped rc RUNLEVEL=[2345] and (
            not-container or
            container CONTAINER=lxc or
            container CONTAINER=lxc-libvirt)

stop on runlevel [!2345]

respawn
exec /sbin/getty -8 38400 hvc0
root@ub12:~/virthdd# vi ./etc/hostname
root@ub12:~/virthdd# vi ./etc/network/interfaces

Az /etc/network/interfaces javasolt tartalma:

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.168.2
    netmask 255.255.255.0
    gateway 192.168.168.1
    dns-nameservers 8.8.8.8
root@ub12:~# vi virt-os.xen

A virt-os.xen javasolt tartalma:

kernel   = "/boot/vmlinuz-3.2.0-29-generic"
ramdisk  = "/boot/initrd.img-3.2.0-29-generic"
memory   = 2048
name     = "virt-os"
vif      = ['ip=192.168.168.2']
extra    = 'xencons=tty'
disk     = ['phy:/dev/vg01/virt-os,xvda1,w', 'phy:/dev/vg01/virt-swap,xvda2,w']
root     = "/dev/xvda1 ro"
root@ub12:~# vi /etc/xen/xend-config.sxp

NAT beállításához az /etc/xen/xend-config.sxp fájlt a következőképpen kell módosítani:

...
#(vif-script vif-bridge)
...
...
(network-script network-nat)
(vif-script     vif-nat)
...
root@ub12:~# umount virthdd
root@ub12:~# reboot

Tesztelés

root@ub12:~# xm create -c virt-os.xen
Ubuntu 12.04 LTS v-ub12 hvc0

v-ub12 login: root
Password:
Last login: Tue Jan 22 10:16:21 UTC 2013 on hvc0
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-29-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
root@v-ub12:~# ping index.hu
PING index.hu (217.20.130.97) 56(84) bytes of data.
64 bytes from sportgeza.hu (217.20.130.97): icmp_req=1 ttl=57 time=5.03 ms

Innentől gyakorlatilag bármi megtehető, javasolt egy sshd egyből, hogy ne a xen konzolból kelljen adjusztálgatni a beállításokat.

Segítségek:

Building a Debian or Ubuntu Xen Guest Root Filesystem using debootstrap

XEN Routed Networking with NAT


Cloud Backup - Ments a felhőbe

2012-05-02 21:46:13

Egy módszer arra, hogy adatainkat biztonságban tudjuk.

A Google bejelentette a Google Drive-ot, sok-sok gigabyte tárhely a felhőben, illetve most promotálja a Microsoft a SkyDrive-ot 25 GB-os akcióval. Érdemes utánanézni, néhány kattintással aktiválható és használható. Egy ilyen lehetőséget meg kell fontolni, hiszen nagyon sok előnnyel jár, ha van egy hardverfüggetlen, biztonságos tárhelyünk a világban, amihez bármikor hozzáférhetünk.

Első ötletem az volt, hogy végre váltok a pendrive-os és memóriakártyás mentésekről a a felhőbe, de előtte azért átgondoltam néhány dolgot, mert a kettő nem teljesen ugyanúgy használható.


Teljes bejegyzés

A Google Drive egyik előnye egyébként, amivel a cég próbálja vonzóbbá tenni, hogy ha feltöltöm az adataimat, ő ügyesen beindexeli "nekem", majd bármire kereshetek. Még a scannelt dokumentumokat is szövegfelismeri, és abban is ad majd találatokat. Nos ez az egyik pont, ami határozottan a cloud ellen szól, de szerencsére megkerülhető.

A privacy, a magánszféra védelme számomra nagyon fontos, ezért semmilyen fontos adatomat nem bízom másik félre, akinek nincs hozzá köze. Például a Google-nek a bankszámlakivonataim tartalmára.

Átgondolva a lehetőségeket a következő megoldási lépések kristályosodtak ki bennem a feladat megoldására: - adatokat egységbe foglalni (zip, tar, cpio, kinek mi tetszik) - erős titkosítás (pgp / gpg) - szinkronizálás a felhőbe (skydrive, gdrive, dropbox)

Előny: - az adataim teljes biztonságban lesznek az illetéktelen személyektől és hardverhibáktól

Hátrány: - az adataimhoz nem férek hozzá azonnal (például nem tudom mobilról megnézni a mentett bankszámlakivonatot) - a titkosítási módot mindig magamnál kell tartanom, még nagyobb biztonságban

Lássuk akkor a lépéseket!

Egységbe foglalás

A notebookomban SSD van, tehát sokkal kevesebb hely áll rendelkezésemre, mint ha egy hagyományos HDD-vel dolgoznék. Külső vincseszterem ugyan van, de az nincs mindig csatlakoztatva, és pont azért vannak az adataim SSD-n, hogy gyors legyen a hozzáférés és használat, a külső HDD pedig ennek egyáltalán nem felel meg.

A fontos adatok mérete nálam 10 GB-ot tesz ki. Ez többször is belefér a cloud szolgáltatók által kínált tárhelybe, így akár több mentésem is lehet, de azért ekkora adatot megmozgatni sem két perc. Valami kompromisszumos megoldásra van szükség, hogy több mentésem is legyen, és ne kelljen naponta 10 GB-ot feltölteni: inkrementális mentés. Ezt a módszert remekül támogatja a TAR (Tape ARchive). Néhány segédprogrammal megtámogatva nagyszerűen lehet vele archiválni, több tízezer fájlt egy nagy egységbe összefogni, és kezelni.

A tar használata igényel egy kis magyarázatot, mert alapvetően linuxra készült, és nem minden tekintetben van felkészítve a windows-os környezetre.

tar --mode=777 --create --file filenev.tar --listed-incremental filenev.inc konyvtarnev

A kapcsolók magyarázata:

  • --mode=777 - a windows-os tar nem ismeri a windows-os jogosultságokat, és enélkül a kitömörítéskor jogosultságmentesen hozza létre a fájlokat, amikhez a mentést készítő sem fér hozzá
  • --create - alapvető tar kapcsoló, archívum létrehozására ad utasítást
  • --file - fájlnév megadása, ez lesz az archívum neve
  • --listed-incremental - az inkrementális mentéshez szükséges fájlmódosítási dátumokat tároló fájl neve

A parancs hatására létre fog jönni egy filenev.tar és egy filenev.inc fájl. Előbbi tartalmazza a "konyvtarnev" könyvtárban található adatokat, utóbbi pedig az adatok utolsó módosítási dátumait. Ez a dátum lesz az inkrementális mentés alapja, ha valamelyik fájlt módosítom, akkor az ideje megváltozik, és a következő mentés ezt összehasonlítja az inc fájlban lévő információval, amit ez alapján módosultnak tekint, azt befoglalja a következő mentésbe.

Próbaképpen módosítok egy fájlt a konyvtarnev könyvtárban, és újra futtatom a parancsot egy kicsit másképpen:

tar --mode=777 --create --file filenev-2.tar --listed-incremental filenev.inc konyvtarnev

Ezzel létrejön a filenev-2.tar, ami már sokkal kisebb, és az archívumba belenézve látható, hogy csak az a fájl van benne, amit módosítottam.

A SkyDrive-nak (de lehet, hogy a többi cloud szolgáltatónak is) van egy limitációja: a maximális fájlméret 2 GB lehet. Így ha valamelyik archívumom nagyobb, akkor nem fogom tudni szinkronizálni. Kerülőmegoldás: fel kell darabolni. A tar ugyan tud valamiféle darabolási módszert, de windows-on nem egyszerű beüzemelni, viszont van célszerszám: split.

tar  --mode=777 --create --listed-incremental filenev.inc konyvtarnev | split -a 3 -b 1907m -d - fajlnev.

Ezzel tehát megmondjuk, hogy minden archívumot szabdaljon fel, ami nagyobb, mint 1907MB (1999634432 byte, biztos, ami biztos). A létrejövő fájlok nevei sorban fajlnev.000, fajlnev.001, stb. lesznek.

A terv: naponta lefutó script, inkrementális mentéssel, heti teljes mentéssel. 10 GB adat tömörítve kb. 5-6 GB, napi növekmény kb. 800 MB, ez viszonylag fájdalommentesen szinkronizálható a (felfelé) 25 MBites internet kapcsolaton.

Erős titkosítás

PGP (Pretty Good Privacy), továbbgondolva GPG (GnuPGP), Windows környezetbe illesztve pedig GPG4Win. Én a "gpg4win-light-2.1.0" változatot választottam, amivel elérhetővé vált a gpg2 parancs. Kis áttekintő a használatáról:

d:\> gpg2 --gen-key
  ... (adatokat értelemszerűen megadtam)
  gpg: C:/Users/deejayy/AppData/Roaming/gnupg/trustdb.gpg: Bizalmi adatbázis létrejött.
  ...
  A nyilvános és titkos kulcsokat létrehoztam és aláírtam.
  ...
d:\> gpg2 --list-keys
C:/Users/deejayy/AppData/Roaming/gnupg/pubring.gpg
--------------------------------------------------
pub   2048R/00000000 2012-04-26
uid                  deejayy (comment) <deejayy@...>
sub   2048R/00000000 2012-04-26

Erre a műveletre egyszer van szükség, ez hozza létre a titkosító kulcsokat.

Tehát amit nagyon meg kell őrizni (és senkinek nem szabad kiadni), az a C:/Users//AppData/Roaming/gnupg/ könyvtár tartalma.

Remek leírás van egyébként a GPGMiniHowto címen.

Kódolás

gpg2 -z 9 -e -r deejayy -o cloudkonyvtar\fajlnev.000.dat fajlnev.000

Magyarázat: - -z 9 - tömörítési szint meghatározása, 9-es a legmagasabb - -e - encrypt parancs, azaz most titkosítunk - -r deejayy - recipient, azaz a címzett publikus kulcsa, de mivel itt másik félről nincs szó, a sajátomat használom - -o cloudkonyvtar\fajlnev.000.dat - kimeneti fájl elérési útja és fájlneve - fajlnev.000 - a titkosítandó fájl neve

Az elkészült tar archívumokat GPG-vel titkosítva, 9-es tömörítési szinten (gzip-pel) tároljuk majd a felhőben.

Összelegózva

Szükség lesz egy scriptre (Windows-on dolgozom, tehát batch fájlra), ami beavatkozás nélkül elintézi nekem a napi mentést.

@echo off

echo init

set BASE=D:\work
set ORIGIN=D:\backup\
set CLOUD=D:\skydrive\
set RCPT=deejayy

for /f "usebackq" %%a in (`%ORIGIN%\bin\date +"^%%Y^%%m^%%d-^%%H^%%M^%%S"`) do (set FILET=%%a)
for /f "usebackq" %%a in (`%ORIGIN%\bin\date +"^%%Yw^%%W"`) do (set WEEK=%%a)

cd %BASE%

echo fixing file times
find -mtime -0.0001 -exec touch {} ;

for /d %%a in (*) do (
    echo tar + split %%a
    tar  --mode=777 --create --listed-incremental %%a-%WEEK%.inc %%a | split -a 3 -b 1907m -d - %%a-%FILET%.
    echo encoding
    for %%i in (%%a-%FILET%.*) do (
        echo gpg %%i
        gpg2 -z 9 -e -r %RCPT% -o %CLOUD%\%%i.dat %%i
        echo del %%i
        del %%i
    )
)

Néhány jól ismert linux parancs windows-os megfelelőjére szükség lesz (ezt pl. cygwinből remekül ki lehet vadászni): date, find, tar, split

Visszaállítás

Ha valamilyen katasztrófahelyzet során az adatok elvesznek, és a felhőből a mentést leszinkronizáltuk, a következő parancsoknak vehetjük hasznát:

d:\skydrive> for %a in (*.dat) do (gpg2 -d %a > %a.split)
d:\skydrive> copy /b *.split dest.tar (természetesen itt fájlcsoportonként kell összefűzni)

Ki az az admin?

2012-03-17 23:45:04
Címkék: rcon , hlds , cs1.6 , cs , counter strike , amxx , amxmodx , amx , admin

Ebben a bejegyzésben a Counter-Strike 1.6 nevű játékról lesz szó.

Honnan indult?

A régi időkben a CS (Counter-Strike) szervereket a klánok vezetői üzemeltették, nekik volt hozzáférésük és teljes joguk a szerver felett. Az ilyen hozzáférés lehetett helyi (lokális, azaz, hozzáfértek a fizikai géphez, pl. ők futtatták a szervert), vagy távoli (remote, távolról fértek hozzá).

A helyi hozzáférés semmi extrát nem igényelt, be kellett írni az alapvető parancsokat egy szerver-konzolba, és eszerint reagált a HLDS (Half-Life Dedicated Server). A távoli hozzáféréshez ún. RCON (Remote CONsole) jelszó kellett, amit vagy ő egyedül, vagy elég kevés ember tudott. RCON-nal akár egy másik földrészről is irányítani lehetett a szervert.


Teljes bejegyzés

Az RCON hátránya az volt, hogy aki tudta a jelszót, mindenhez hozzáfért, tehát nem volt jogosultsági-szint szabályozás.

Később - ha nem is feltétlenül ezért - elkezdtek megjelenni olyan plug-in-ek, kiegészítők a HLDS-hez, amik jó pár funkcióval bővítették a szerver lehetőségeit. Fejlesztettek olyan plug-in-eket, amikkel RCON nélkül lehetett szerver-tulajdonosi parancsokat végrehajtani (pl. újraindítani, pályát váltani, stb). Ezek a pluginek tehát hozzáfértek a HLDS alapfunkcióihoz, és ilyen módon lehetővé vált a jogosultságok feldarabolása, kihagyva az egészből a roppant veszélyes RCON-t.

A fejlesztési lánc végén (ezt bátran kijelenthetem, hiszen nem fejlesztik már vagy 4 éve) az AMXMODX nevű kiegészítő kristályosodott ki. Ez a plug-in amellett, hogy beépített adminisztrációs jogosultságkezeléssel és parancsokkal érkezik, lehetőséget ad teljesen saját AMXMODX kiegészítők írására is egy speciális programozási nyelv segítségével.

Az AMXMODX (röviden amx vagy amxx)

Az amx egy sor RCON parancsot és még több saját parancsot implementál, ami jelentősen bővítette az adminisztrátorként betölthető szerepkört.

Lehetővé vált, hogy ne csak a klán vezérek vagy szerver-tulajdonosok tudjanak beleszólni a játékba, hanem továbbá olyan személyek is, akiknek adott esetben nincs köze sem a klánhoz, sem a szerverhez, de jól értenek az adminisztrációhoz, a játékosok és a játék támogatásához.

Szóval ki az az admin?

A szerveren tehát kétféle ember fordulhat meg: játékos és adminisztrátor. A játékos él a lehetőségekkel, játszik a többi játékossal, ő ezért van itt.

Az adminisztrátornak viszont feladata van. Ő támogatja a játékot, kiszűri azokat, akik ezt elrontják, rendet tesz, olyanná teszi a szervert, hogy mások is szívesen játszanak itt. Az admin tehát egy feladat. Téves elképzelés az, hogy az admin csak jogosultság, kötelesség is. Akinek admin joga van, attól a játékosok elvárják, hogy a zavaró elemeket eltávolítsa a játékból, hogy ők nyugodtan tudjanak játszani.

És - nem utolsó sorban - az adminnak nincs mindig igaza. Nem azért lett admin, mert tévedhetetlen, de nem célja, hogy tévedjen, sőt optimális esetben ez ellen mindent meg is tesz.

Sok szerveren lehet látni - sőt, már egész technikai infrastruktúra is épült ki erre -, hogy az admin jogosultságot meg lehet venni (SMS-ben, vicc). Van, aki azt hiszi, attól, hogy adminisztrátor, már kedvére tehet-vehet a szerveren, illetve vannak olyan tulajdonosok, akik azt hiszik, ebből bevételt szerezni okos dolog. Az utóbb felsorolt két típus már nem a játék miatt üzemeltet vagy támogat szervert. De azt sem mondanám, hogy pénzért, hiszen gyors fejszámolással és a megfigyelt árakkal, ha egy szervernek mondjuk van 16 adminisztrátora, akik havonta 400 forinttal járulnak hozzá a szerver üzemeltetéséhez, az mindössze havi 6400 forint, amiből - bérelt szerver esetén - elmegy mondjuk 4000 forint a bérlésre. Marad 2400 forint, ami nagyjából egy fél tálca Heinekennek felel meg.

Szóval azt egyelőre nem nagyon tudom, hogy miért éri meg ezt a lehetőséget a profit felé fordítani, ha valaki esetleg tudja, ossza meg velem.

Utóirat

Úgy gondolom egyébként, hogy a jó adminoknak nem a szerver felé kellene fizetniük, hanem pont fordítva, elvégre, amíg mások játszanak, ő "dolgozik" (de semmiképpen sem szórakozik).


Csináltam egy blogot

2011-12-09 15:32:11
Címkék: web , php , mvc , html , fejlesztés , css , blog

A cím tömören összefoglalja a lényeget.

Ebben a bejegyzésben végigkövetem a blogmotor változásait, de előbb le kell fektetni az alapokat. Valahogyan ezt a bejegyzést is el kell kezdenem írni, illetve a későbbiekben szerkeszteni.


Teljes bejegyzés

Akkor lássuk mit tud most (avagy Update 0):

  • egyetlen tábla van az adatbázisban: blg_entries, három mezővel: id, title, content
  • eddigi fejlesztési idő: 1 óra
  • összes - keretrendszeren kívüli - kódsor: 100
  • jelenlegi tudás: blogbejegyzések megjelenítése, szerkesztése egy nagyon alap felületen. kicsit meg van formázva css-sel.

What's next?

Update 1:

  • beteszem egy git repositoryba az egészet, hogy lokálban is tudjam tesztelni és szerkeszteni, illetve így jelentősen könnyebb a grafikai munkákat is megcsinálni. az adatbázis továbbra is közös.
  • kis design piszkálgatások, bár ez nyilván nem scope-ja a motorépítésnek, de néha ezzel is haladni kell

plusz mezők db-ben:

  • publish_date, azaz mikor jelenjen meg
  • url, hogy olvasható legyen az url-je
  • módosítás timestamp (automatikusan update-elődik módosításnál by db). mondom automatikusan

mezőkhöz csináltam szerkesztőket meg automatikus kitöltőket. csak a template-eket kellett módosítanom, minden más érintetlen.

Választottam egy betűtípust, bár nem a legjobb, de azért megteszi. Csak címnek. A paragrafus szövegeknek nem adok egyedit, Tahoma jó lesz.

Update 2:

  • működik az url alapú bejegyzésre ugrás
  • nem működik a visszaper a szerkesztőben, eh. vagyis működik, csak nem írja ki már.
  • egy napba telt, de rájöttem hova kell beszúrni egy kódsort, hogy menjen. viszont nem tudom hol alakult át. teszt: \o/

Csináltam popupos login ablakot, nagyon jó lett. Sajnos csak akkor tűnik el, ha ismét a loginra kattintok. JS nélkül is van fallback, klasszikus login linkként funkcionál. Ó'szom.

Na, van felhasználó tábla is, sha-512-es jelszógenerálás, mondjuk a belépés még nem működik :)

De már igen. A szerkesztőlinkek csak akkor jelennek meg, ha be vagyok lépve. Már csak ellenőrizni kell, hogy van-e jogom szerkeszteni ;]

318 sor.

Update 3:

Nem bírom kivárni, amíg elkészül, már írtam is egy bejegyzést.

  • beállítható, hogy látható legyen-e egy adott bejegyzés (visible)

Update 4:

  • vannak tag-ek (címkék) a bejegyzések mellett, de még nem lehet listázni tagenként a bejegyzéseket (ötlet: címkelista szerkesztésnél, címkéket elemként kezelni)
  • már lehet listázni tagenként
  • bekapcsoltam az analitikát

Update 5:

  • reszponzív design, 1000px fölött nincs nyújtás, 800px alatt nincs sidebar
  • kommentelési lehetőség
  • láthatóság és listázhatóság mást jelent

Update 6:

  • kommentekre a válasz beljebb jelenik meg
  • válaszolás esetén odaugrik a form
  • megjegyzi az adatokat
  • automatikusan az első kitöltetlen mezőre ugrik
  • kommentek értékelése

778 sor.

Update 7:

Sok komoly dolog történt, az engine körül már van pár webshop és weblap is, de a blogot érintő komoly változások nem jelentősek:

  • átálltam MarkDown-ra, elég jó cucc, és van JavaScript és PHP implementációja is (bár utóbbiba sajnos bele kellett nyúlnom)
  • a szintaxis kiemelőt is módosítottam, mostantól a highlight.js intézi ezt a feladatot
  • volt pár ráncfelvarrás, színek, betűtípusok
  • régi blogról a bejegyzéseket áthoztam, átformáztam, átolvastam. Sajnos nem mindegyik aktuális már, de mindegyik meg van jelölve dátummal

Az IT szabályozásokról

2009-09-01 17:30:58
Címkék: policy , it

Hírbehozó kérdően áll a szokásos nagycéges IT-szabályozások előtt. Nem én fogom megmondani a nagy igazságot, csak annyit, amennyit én ismerek belőle. Álljon tehát itt néhány "mélyebb, ésszerűbb érvelés", hogy a felvetett témára egy felhasználó, rendszergazda, IT munkatárs hogyan tekint.


Teljes bejegyzés

A legfőbb probléma, amit a posztban feszeget úgy érzem a munkaidő kontra kikapcsolódás összhangja. Lévén a munkáltatók teljesen érthetően inkább azt szeretnék, hogy a dolgozó a munkaidejét munkával töltse, ne egyéb szórakoztató elfoglaltságokkal. Ez az érvelés teljesen egyszerű, profitorientált, de felületes. Felületes, hiszen ha valaki napi 8 órán keresztül dolgozik egyhuzamban, azt elég kimerítő, illetve lássuk be, nem mindenkitől lehet elvárni ezt a hatékonyságot. Létezik egy ajánlás, miszerint az irodai dolgozók, akik aktívan a monitort bámulják, egy órából 10 percet töltsenek inkább valami mással, ami alatt megmozgatják a végtagjaikat, megindítják a vérkeringésüket, egyszóval: felfrissülnek. Ettől egy kicsit talán jobban fog menni a munka, üdébben fog nekiülni a feladat hátralevő részének. Ha ezt minden munkáltató kötelezően betartatná, akkor a napi 8 órából 8*10, azaz 1 óra 20 percnyi idő menne "kárba", azaz nem munkával töltve. Az on-line világ után érdeklődőknél viszont előfordul, hogy a 10 percüket is a számítógép előtt töltik - de szellemi felfrissüléssel. Blogokat olvasnak, híreket néznek, megnézik azokat a szórakoztató e-maileket, amiket kaptak. Persze át lehet esni a ló másik oldalára is: a túl sok pihenés fel fog tűnni a feletteseknek, és ezért lépéseket tesznek. Például letiltják az olyan, szorosan nem munkához kötődő weboldalakat, amiket a legtöbben, legtöbbször látogatnak (facebook, youtube). Így - gondolják - majd jobban fog menni a munka, hiszen a letiltott weboldalakat immár nem lehet látogatni, nem megy el rájuk az idő.

Hírbehozó ez ellen emeli fel a szavát, a túlságosan sok letiltásról, a weboldalak szűréséről, mert így a munkavállalókat robotnak nézi a munkaadó.

Ami ellen viszont én emelem fel a szavam:

Nyilvánvaló, hogy rengeteg vállalati IT-szabály tökéletesen haszontalan, és szükségességüket még az IT-s kollégák sem tudják alátámasztani. Gyakran az a válasz, hogy "ez a policy, és kész".

A vállalati policy-knek a lényege a szabályozás. Azért van a felhasználó támogató, rendszergazda, mert ők értenek hozzá, betartják és betartatják a törvényt, a policy-t, hogy ezzel a cég működése gördülékenyebb legyen.

Weboldalak szűrése

Azt, hogy a cég proxyja milyen weboldalakat szűr ki, kizárólag az informatikus tudja meghatározni. Egyrészt ugye, mert ő ért hozzá, másrészt pedig azért, mert a naplófájlokat ő tudja elemezni. Felteszem, hogy nem sok olyan rendszergazda van, aki merő rosszindulatból nézi a logokat, hogy mit hányszor, mennyi ideig nézegettek a dolgozók - bizonyára főnöki utasítás hatására. A főnök pedig azért adta ezt az utasítást, mert más vezetőktől azt a panaszt kapta, hogy a dolgozók túl sok időt töltenek haszontalan dolgokkal. Az értékes dolgozót először nem kirúgni akarják, hanem arra motiválni, hogy munkaidőben dolgozzon, legalább az elvárható mennyiséget. Ki így, ki úgy teszi ezt.

Programok telepítése

Mert ugyan mitől ne lenne megbízható a Firefox ikszedik verziója mondjuk az IE aktuális verziójához képest?

Ha ennek a kérdésnek nem lenne létjogosultsága, akkor a Firefox terjesztő kampányai már rég elbuktak volna. :) A telepítési korlátozásnak nagyon sok oka lehet.

Hozzáértés

A könyvelők általában nem értenek a szoftverekhez, nem is elvárás ez tőlük, mert akkor informatikusnak neveznék őket. Vannak azonban olyan munkakörök, ahol szorosan nem is, de valamennyire érteni kell az informatikához, tipikus dolgokat megoldani (kép átméretezés, tömörítés, stb.). Az is előfordul, hogy bár az illetőt könyvelő munkakörbe vették fel, de a hobbija a számítástechnika, és otthon kikapcsolódásként a saját kis gépe rendszergazdája. Viszont, amikor egy ilyen lelkes felhasználó telepítgetni kezd, azután esetleg két inkompatibilis program miatt nem tud többé könyvelni, akkor már az informatikushoz fordulnak, hogy oldja meg a problémát, aki pedig kérdően áll a több tíz feltelepített program előtt, hogy akkor most vajon melyik kettő lehet a hibás. A felhasználó rendszerint "nem csinált semmit", csak úgy ilyen lett.

Teljesítmény

hírbehozó: vagy pl az itunes telepitese milyen biztonsagtechnikai kockazatot jelent? esetleg egy openoffice? egy chrome? egy jing? egy winrar? egy picasa desktop?

Ha azoknak, akik hajlandóságot éreznek a telepítésre, megengednénk, hogy telepítsenek akármit, bátran, előbb-utóbb az történik, amivel általában mindenki találkozik otthon is: lelassul a gép. Persze a lassulásnak több oka lehet:

  • automatikusan induló programok (itunes, openoffice biztosan ilyen)
  • eszköz-illesztők, vagy kernel-szintű meghajtó programok (pl. CD/DVD emulátor programok)
  • feleslegesen betöltődő függvénykönyvtárak (dll fájlok)
  • nem oprendszerkompatibilis függvénykönyvtárak (újabb dll felülírása régivel)
  • registry-bejegyzések elburjánzása

Ezek mind-mind a telepítésekkel együtt járó bajok. Hogy ezeknek elejét vegyük, a telepítési jogosultságot megvonjuk, "nem lesz lassulás".

Adminisztráció

Ha egy cégnél van egy könyvelő, akkor nem nagyon szoktak a rendszergazdák panaszkodni, hogy gépet kell újratelepíteni. De ha van 20-40 könyvelő, akkor akkora cégről beszélünk, ahol a helyzet megkívánja, hogy a könnyebb adminisztrálhatóság érdekében egyszerűen megtiltsuk, hogy a gépeknek különböző szoftverparkja legyen. Ezáltal mindig tudjuk, mit hol kell keresni, a könyvelők akár egymásnak is segíthetnek egy-egy szoftver kezelésében, ha a rendszergazda éppen nem ér rá vele foglalkozni.

Szerzői jogok és licencdíjak

Egy cégnél a céges számítógépekre telepített szoftverek licenceléseinek felelőse általában a IT vezető. Az, aki a "policy-t" meghatározza. Ha valaki feltelepít egy illegális AutoCAD-et, akkor az informatikai vezetőn fogják számon kérni a rá bízott géppel kapcsolatos problémákat. Persze nyilván nem fizettetik ki vele a büntetést, amit a cég kap ezért, de állását veszítheti mindössze azért, mert valaki úgy gondolta, hogy neki ezt lehet.

Biztonság

Hát igen, utolsónak hagytam a biztonságot, de nem azért, mert ez az utolsó szempont, hanem azért, hogy mindenki lássa, hogy mi, rendszergazdák nem a biztonság szajkózásával szoktuk rövidre zárni a vitákat - bár kétség kívül elég hatékony érv. Ha valakinek van telepítési jogosultsága, akkor szükségszerűen képes írni a gép-szintű registry kulcsokba, a "Program Files" könyvtárba, a "Windows"-ba és annak minden alkönyvtárába. Ez pedig igen kellemes táptalaj a vírusoknak, trójai programoknak, és spyware-eknek. Ráadásul egy ilyen baklövéssel nem csak a saját munkáját, hanem az összes, ugyanazon a gépen dolgozó kolléga munkáját is tönkreteheti.

Végszó

Kétség nélkül mondhatom, hogy ezekhez a szabályokhoz hozzá kell szokni. Ahhoz, hogy nem lehet hipp-hopp nyomtatót telepíteni, nem lehet kölcsön mobilnetet installálni, és még sorolhatnám. Viszont rendszergazdai munkaidőben ezek óriási megtakarítást eredményeznek.

Remélem, így a végére már világos, hogy miért nem szánalmasak "Azok a vállalati IT-szabályok..."


Twitter - IRC gateway, avagy hogyan twitteljünk irc protokollon

2009-06-05 09:51:47
Címkék: twitter , tircd , irc

Első megoldás: twitter2irc.pl

Az egész dolog lényege egy perl script, ami emulál nekünk egy IRC szervert, és a twitter contactjainkat felsorolja a nicklistben, illetve az általuk beírt szövegeket megírja nekünk.

Az eredmény: IRC szerver 6667-es porton, #twitter csatornával, jelszóval és egyéb dolgokkal védve.


Teljes bejegyzés

Teendők egy Ubuntu 8.04 LTS Server operációs rendszeren viszonylag üres install esetén:

# apt-get update
# apt-get install make lynx ncftp ftp gcc build-essential
# cpan

Utóbbi parancs a cpan konfigurálása, ezt mindenki maga, az utasítások illetve a környezete szerint tegye.

# cpan JSON JSON::Any JSON::XS JSON::DWIW JSON::Syck YAML POE POE::Component::Client::Twitter POE::Component::Client::HTTP POE::Component::Server::IRC POE::Component::TSTP HTTP::Request::Common

Sajnos a Twitter modulnak nincs Install.pm-je (Can't locate inc/Module/Install.pm), ezért kézzel kell másolnunk:

# cp -r ~/.cpan/build/POE-Component-Client-Twitter-0.01/lib/POE /usr/local/share/perl/5.8.8

Majd ki is próbálhatjuk, ugyanis a modulhoz mellékelték is a gateway-t megvalósító scrpitet:

# cd ~/.cpan/build/POE-Component-Client-Twitter-0.01/example/
# ./twitter2ircd.pl
Usage: twitter2ircd.pl -c=config.yaml

A script végén pedig van egy példa, hogyan nézhet ki egy config.yaml, ezt testre kell szabni, és a fönti paranccsal máris lehet futtatni.

A scriptbe nem árt egy kicsit belenyúlni, ugyanis alapesetben vannak benne olyan kódsorok, amik minden belépésnél/kilépésnél kreálnak egy twittet, aminek én személy szerint nem látom sok értelmét. Ilyeneket kell keresni:

$heap->{twitter}->yield(update => 'twitter2irc.pl join');
...
$heap->{twitter}->yield(update => 'twitter2irc.pl part');
...
$heap->{twitter}->yield(update => 'twitter2irc.pl quit');

Sajnos a script egyelőre sok problémával küzd: nincs megfelelő input-ellenőrzés; többsoros posztok további sorai a státuszablakba íródnak; ha lefetcheli az újabb twitteket, akkor kiírja mindet, nem csak azt, ami a legutóbbi fetch óta érkezett...

Hátránya, hogy egy szerver csak egy felhasználót tud kiszolgálni.

Második megoldás: tircd.pl

Hasonlatos az előzőhöz, de egy másik eszközzel és modulokkal: kis leírással és letöltési linkkel

Teendők egy Ubuntu 8.04 LTS Server operációs rendszeren viszonylag üres install esetén:

# apt-get update
# apt-get install make lynx ncftp ftp gcc build-essential
# cpan

Utóbbi parancs a cpan konfigurálása, ezt mindenki maga, az utasítások illetve a környezete szerint tegye.

# wget http://tircd.googlecode.com/files/tircd_v0.7.tar.gz
# tar zxfv tircd_v0.7.tar.gz
# cd tircd
# chmod a+x tircd.pl
# cpan JSON JSON::Any JSON::XS JSON::DWIW JSON::Syck Moose MooseX::Traits URI::Escape namespace::autoclean Net::OAuth::Simple LWP::UserAgent B::Hooks::EndOfScope Module::Build Net::Twitter POE POE::Filter::IRCD

Ezek után a ./tircd.pl parancs remekül fog működni. Probléma lehet a magyar ékezetekkel, mivel a Net::Twitter modul az alap UTF-8-at még egyszer UTF-8-cá konvertálja, ezért elég olvashatatlan lesz az írásunk. A probléma elhárításához egy kis komment-jel kell az alábbi modulba: /usr/local/share/perl/5.8.8/Net/Twitter/API.pm

Ezt a sort:
utf8::upgrade $_ for values %$args;
Erre kell cserélni:
# utf8::upgrade $_ for values %$args;

A tircd.pl mellett található az alap config fájl is: tircd.cfg, ezt ízlés szerint módosítsuk.

Harmadik megoldás: tweet.im és bitlbee

A bitlbee nevű program alkalmas arra, hogy különféle IM programok protokolljait IRC-ként használhassuk. Tudja az MSN-t, Jabber-t (~Gtalk), ICQ-t (Oscar) és a Yahoo!-t.

A tweet.im nevű weboldalon összeköthetjük a Twitter-es accountunkat egy Jabber-essel, valamint a Jabber kontaktok közé fel kell venni a tweet.im felhasználóját. A Twittek ezentúl az ő üzeneteiként jelennek meg, és a neki írtakat pedig a nevünkben twitteli.

Hátránya, hogy elég gyakran elveszti a kapcsolatot, ezért órákon keresztül kimaradhatnak a posztok, illetve csak ki-be lépéssel oldható meg a probléma.

Konklúzió

Talán kiderült már, de én a második megoldást javasolnám, a tircd.pl-t, mivel egyrészt már kikísérleteztem az üzembe helyezés mikéntjét, másrészt több felhasználót képes kiszolgálni, illetve sokkal kidolgozottabb kóddal rendelkezik, mint az első változat. Nem kell hozzá külön másik account (mint a tweet.im-nél), megfelelően kezeli a be és kimenő forgalmat (eltekintve az UTF-8-as problémától, illetve az újsor-jelek problémáitól).


Hogyan lehet blokkolhatatlan hirdetéseket elhelyezni egy weblapon?

2008-10-28 10:56:30
Címkék: reklám , adblock , ad

A reklámszűrő alkalmazások (legyen az böngészőbe épített, vagy külső program) jellemzően úgy működnek, hogy a böngésző által lekért URL-ben megkeresnek egy előre beállított mintát. Ha erre a mintára illeszkedik a cím, lezárják a kapcsolatot, vagy eleve el sem kezdik az adatlekérést. A szűrő tehát egy listára épül, melyet vagy a felhasználó épít meg a böngészése során, vagy letölt egy kész listát.


Teljes bejegyzés

Létezik banner alapú szűrő is, mely a szabványos banner-méretekre fókuszál, így meg tudja állapítani egy képről a mérete alapján, hogy az most reklám-e, vagy sem. Ez persze többnyire pontos, viszont ilyen méretű képeket felesleges elhelyeznünk a weblapunkon, mivel megeshet, hogy azokat a banner-szűrők letiltják. Ezen kívül gyanúsnak vélik még a flash-animációkat is (pl. létezik Firefox-hoz olyan kiegészítő, mely alapból nem tölti be az SWF fájlokat, csak egy kattintás után).

Bár nem vagyok online-marketinges, véleményem szerint a reklámozóknak az a célja, hogy az általuk hirdetett weboldalra minél többen ellátogassanak, ezt pedig bannerekkel, szöveges reklámokkal, animációkkal kívánják elérni. Ha a felhasználó, aki böngészi a reklámokkal teli weboldalt, kiszűri az ilyen általa feleslegesnek vélt elemeket az oldalról, akkor egyre kevesebb embert tudnak rávenni a kattintásra.

Javaslat a hirdetőknek:

  • a hirdetéshez használt címben ne legyen "ad", "click", "banner" szó, mert azokat a legegyszerűbb kiszűrni (ezt jellemzően az összes cég elrontja
  • a központi hirdetőszerver ugyan elég sok előnnyel bír, viszont a letiltást így az összes, hirdető cég által kezelt reklámra alkalmazni lehet, ezért nem javasolt

A reklámok szűrhetetlenségére az alább felsorolt megoldásokat látom reálisnak.

Listás elfedett hirdetés

Tegyük fel, hogy a hely egy olyan weboldal, ahol főként szöveges tartalmat találunk, olvasmányos, esetleg néha nagyobb terjedelmű is lehet (tipikus példa: blogok, hírportálok). Ha a cikkeket lehetséges oldalakra tördelni, akkor az utolsó oldal esetleg tartalmazhatja a reklámot (egy 3 oldalas cikk esetében pl. ...&oldal=4 címmel lekérhető a hirdetés). Ez a megoldás remek, hiszen, ha valaki több oldalra kíváncsi, nem szűrheti az "oldal" paramétert, mert akkor egy 10 oldalas cikkből csak 1-et látna (vagy, ha az első oldalt is paraméterhez kötjük: ...&oldal=1, akkor egyáltalán nem látna semmit). A megoldás kikerüléséhez borzasztó bonyolult és weboldal-specifikus kódokat kellene írni. Segíthet a szűrésben, ha egy kép forrása egy "oldal" tartalmú link, akkor vélhetően gyanús. Ennek kikerülésére a bejegyzésben szereplő képek betöltésére is az "oldal" paramétert kellene alkalmazni, 10 oldalas cikk esetében a 4 beszúrt kép lehetne 11-14-es sorszámú, reklámok pedig e fölött.

Ugyanez a helyzet azokon a portálokon, ahol nem szöveges, hanem képes tartalom van. Nyugodtan lehet a 9 oldalból álló galéria 10. oldalára reklámot szúrni, ami bárhova beilleszthető.

Bónusz: az "oldal" paraméter nem sorszámot, hanem valamilyen azonosítót kapna, így az első oldal lehetne 129-es, a második 953-es, a reklám pedig 677-es (persze bejegyzésenként más-más sorszám, esetleg cikken belül is rotálással). Adatbázisban ez könnyedén tárolható és kezelhető, csak a weboldal motorját kellene hozzá igazítani.

Bónusz+: az "oldal" paraméter neve lehet akármi más is, sőt, véletlenszerű karakterlánc is.

Cikk-ként tárolt hirdetés

Ha az oldal elég sok bejegyzéssel rendelkezik, könnyű a bejegyzések között egy-egy tartományt (pl. 110-120), vagy minden prímszámadik (mondjuk minden hetedik) azonosítót fenntartani arra, hogy ott reklámokat tároljunk. Így nem lesz könnyen szűrhető, mivel a filterrel a hasznos tartalom is elérhetetlenné válhat.

Bónusz: tartalmakat rotálni, azaz ha 100 cikkből minden harmadikat fenntartjuk összesen 5 hirdetésnek, akkor van egy megfelelően nagy területünk a reklámok helyének változtatásához. Ezek kiszűréséhez 100 cikknél is legalább 30 szabály szükségeltetik, ami egy weboldal esetében még nem probléma, de ha többen alkalmazzák ezt a módszert, akkor a böngésző vagy szűrőprogramot annyira belassíthatják a szabályok, hogy nem lesz már érdemes azokat használni.

Központosított reklámok aldomain-ekkel

Létező reklámszolgaláltatóknak érdemes megállapodni egy-két népszerű tárhely- vagy tartalomszolgáltatóval (akik képesek subdomain-re helyezni a felhasználó adatait), hogy adott időközönként (pl. 1 hét) biztosítsanak néhány semleges nevű aldomaint (esetleg random generáltat), ahova a reklámszolgáltató feltölti a "gateway" kódját, mely az ő szerveréről olvassa be az éppen futó kampányokat. A felhasználók részéről a teljes domaint filterbe tenni nem túl okos döntés, hiszen számos más tartalom is kiszűrődik vele együtt, a random aldomain-ek pedig nem iktathatók ki automatikusan.

Tipikusan rossz megközelítések

Felsorolok néhány példát, hogy hogyan nem szabad:

  • pagead2.google.com
  • sher.index.hu
  • rehs.index.hu
  • adserver.any-ad.com
  • .../banner.php?id
  • .../content.php?bannerid
  • fastclick.net

SEO

Ha valaki a fent felsoroltak bármelyikét alkalmazni akarja, előtte konzultáljon a SEO szakemberével, mert bizony előfordulhat, hogy URL rewrite esetén már valamit fel kell áldozni a cél érdekében. Nyilván mérlegelni kell mindkét oldal előnyeit, hátrányait.


Virtualizálás Xen-nel Ubuntu 8.04.1 Server-en

2008-09-04 18:46:02
Címkék: xen , ubuntu

Ebben a leírásban nem szentelnék túl sok felesleges szót a Xen elméletére, arra vannak bőven máshol dokumentációk. Itt most a közepébe vágunk, és néhány paranccsal építünk egy virtualizált környezetet. Aztán pedig egy-két használati tapasztalatot írok le.

A kiindulási alap egy teljesen egyszerű Ubuntu 8.04.1 Server disztribúció, OpenSSH szerverrel megtoldva. Alább vázolom, hogy az általam telepített rendszer alatt hogyan van partícionálva a HDD:


Teljes bejegyzés
Disk /dev/sda: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0x0000a987

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *         256      262400      131072+  83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2          262656     8651264     4194304+  83  Linux
Partition 2 does not end on cylinder boundary.
/dev/sda3         8651520    17040128     4194304+  82  Linux swap / Solaris
/dev/sda4        17040384   488397056   235678336+   5  Extended
/dev/sda5        17040640   488397056   235678208+  83  Linux

A listán látszik, hogy az 1-es és 2-es partíciókkal problémázik, mert nem a cylinder-hez igazodnak. Ennek egy oka van: a partíciókat 128k-s blokkokhoz igazítottam. Ez azért lehet praktikus, mert a hardveres RAID-ek chunk mérete is beállítható erre az értékre, és így elkerülhető például az, hogy a partíciók blokkjai két külön chunk-ra kerüljenek. A két külön chunk-on elhelyezkedő blokk a redundancia biztosításánál overhead-et jelenthet (mivel nem elég egy chunk-ot kiírni, illetve paritást számolni, egyből kettőt kell).

Továbblépve ezen a kis kitérőn: a rendszernek 4 GB helyet hagytam, mégpedig azért, hogy véletlenül se tudjam semmilyen egyéb nem oda való programmal teleszemetelni, a Xen-nek pedig elég ennyi. Még mielőtt valakinek eszébe jutna, hogy "jaj, nem lesz hely a virtuális lemezeknek", az felejtse el gyorsan, hogy naplózó fájlrendszerre tesz egy másik fájlrendszert, ez ugyanis bőséges overhead-et okozna. Ehelyett LVM-mel szolgáljuk ki majd a guest-eket, az amúgy is flexibilis, méretezhető, és nem hordozható nehezebben, mint egy sima fájl a fájlrendszerünkben.

Két dolog tehát eddig biztosan kell: Xen és LVM2.

# apt-get install ubuntu-xen-server lvm2
# reboot
...
# uname -a
Linux xen01 2.6.24-19-xen #1 SMP Sat Jul 12 00:15:59 UTC 2008 x86_64 GNU/Linux

# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  1878     2     r-----     13.1

Ezentúl az xm parancsot (xen-manage?) fogjuk használni arra, hogy a virtuális gépeinket kezeljük.

Most pedig hozzunk létre egy LVM volume-ot az első guest-ünknek. Előbb persze kell egy PV (physical volume), amibe tennünk kell egy VG-t (volume group), és csak azután lehet LV-t létrehozni (logical volume), előbbi kettőt csak első esetben kell létrehozni. Ez a három kétbetűs rövidítés hasznunkra lesz a későbbiekben, ha hozzá tesszük az alábbi kulcsszavakat is: display, scan, create, extend, remove, s. Tehát [pv|vg|lv]scan, [pv|vg|lv]s, stb.

# pvcreate /dev/sda5
# vgcreate -s 128m vg01 /dev/sda5
# lvcreate -l 32 -n lv-guest01 vg01

Lám, most már van egy lemezünk, véletlenül pont 4 GB-os (32128m), amit szimpla partícióként kezelhetünk, akár egy */dev/sda1-et. Például tehetünk rá egy ext3-as fájlrendszert rögtön:

# mkfs.ext3 /dev/vg01/lv-guest01
# mount /mnt/guest01 /dev/vg01/lv-guest01
# df -h

A Xen alapvetően nem úgy működik, mint egy VMWare, hogy ad a kezedbe egy grafikus felületet, emulálja a BIOS-t, sőt még a setup-ba is belemehetsz - nem, itt ilyenről nincs szó (de ettől függetlenül lehetséges vele akár Windows-t is futtatni, csak az egy másik leírás lesz...). A Xen vár tőlünk néhány fontos paramétert (szerencsére tárolhatjuk ezt egy config-fájlban is), azután elindítja a guest-et. Az egyik ilyen paraméter, hogy melyik diszken találja a rendszert - ebből következik, hogy itt nincs értelme boot partícónak sem. A lemez egyelőre a korábban létrehozott lv-guest01 azonosítójú LV lesz.

Mivel a lv-guest01 már ext3, fel van mountolva, az alaprendszert a debootstrap-pel "telepítjük".

# cd /mnt/guest01
# debootstrap --arch amd64 hardy /mnt/guest01 http://hu.archive.ubuntu.com/ubuntu

Ezzel már van egy alaprendszerünk, de még nem teljes funkcionalitású, a beállításokhoz az alábbi lépéseket javasolt elvégezni:

# mount --bind /dev /mnt/guest01/dev
# mount -t proc proc /mnt/guest01/proc
# cp /etc/resolv.conf /mnt/guest01/etc/resolv.conf
# cp /etc/network/interfaces /mnt/guest01/etc/network/interfaces
# cp /etc/apt/sources.list /mnt/guest01/etc/apt/sources.list
# mcedit mnt/guest01/etc/hostname
# cp -r /lib/modules/`uname -r` /mnt/guest01/lib/modules/`uname -r`
# chroot /mnt/guest01/ /bin/bash
# apt-get update
# apt-get upgrade
# apt-get install ssh 
# echo -e "/dev/sda1\t/\text3\tdefaults\t1\t2\n" >> /etc/fstab
# passwd
# exit

A rendszer már képes működni, viszont van még egy-két konfig fájl, amit érdemes ízlés szerint szerkeszteni: /etc/network/interfaces, /etc/hostname. Ha ezek megvannak, akkor umount-oljuk a fájlrendszert.

# umount /mnt/guest01/dev /mnt/guest01/proc
# umount /mnt/guest01

Most pedig kell egy paraméterfájl (pl. /mnt/guest01.xen), amit a Xen-nek fogunk átadni, hogy tudja, milyen paraméterekkel futtassa a rendszert, ez körül-belül így néz ki:

kernel      = '/boot/vmlinuz-2.6.24-19-xen'
ramdisk     = '/boot/initrd.img-2.6.24-19-xen'
memory      = '256'

root        = '/dev/sda1 ro'
disk        = [
        'phy:/dev/vg01/guest01,sda1,w',
]

name        = 'guest01'

vif         = [ 'ip=10.0.0.1,mac=00:16:3E:00:00:01' ]

on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'
vcpus       = '1'
extra = 'xencons=tty1'

A paraméterek pontos jelentését a Xen manual bizonyára részletesen is elmagyarázza, egy-két fontosabb:

  • memory - a guest által használható memóriamennyiség MB-ban
  • vcpus - a guest által használható virtuális CPU szám
  • kernel - megadható más elérési út is, de akkor figyelni kell arra, hogy a /lib/ ennek megfelelően legyen feltöltve

A rendszer az alábbi parancssal índítható:

# xm create /mnt/guest01.xen

A fenti parancs a háttérben indítja el a guest-et, de lehetőségünk van átvenni a konzolját:

# xm console guest01

Vagy pedig már úgy indítjuk, hogy átvesszük a konzolját (-c kapcsolóval):

# xm create /mnt/guest01.xen -c

Hogyan tegyünk grafikus felületet Ubuntu 8.04 Serverre?

2008-05-19 20:02:29
Címkék: xfce , x11 , vnc , ubuntu

A sorozat legújabb tagja a 6.06.1 és 7.10 után: 8.04.


Teljes bejegyzés

Lássuk tehát (48.6MB-nyi csomag):

# apt-get update
# apt-get -f -y install xserver-xorg xfce4 xfwm4 xfwm4-themes xfonts-base vnc4server
# vncpasswd
# vncserver :1 -name x11 -depth 24 -geometry 1280x800

Tipp: mielőtt a vncservert elindítanánk, érdemes némi módosítást eszközölni a ~/.vnc/xstartup fájlban, mivel alapértelmezetten a twm-et (tiny window manager?) indítja, ami a fenti csomaglistában nem lesz benne. Javasolt átírni xfwm4-re. Továbbá a "vezérlőpulthoz": xfce-setting-show & Valamint a panelekhez: xfce4-panel &


FAR Manager kedvcsináló I.

2008-05-02 11:41:02
Címkék: far manager

Azok, akik még nem ismerik a FAR (File and ARchive) Manager-t, azoknak most bemutatnám egy rövid bejegyzés erejéig.

Miért és mióta használom?

Saját profilomat tekintve szoftverfejlesztő lennék, szeretem a számokat és tényeket, konkrét dolgokat, adatokat.


Teljes bejegyzés

Amikor először találkoztam a fájl navigátoroknak nevezett szoftverekkel, először a Norton Commanderhez volt szerencsém - remélem senkinek nem kell bemutatnom :) De ha valakinek mégis, hát itt megnézheti.

Igen mély nyomokat hagytak bennem a dos prompthoz képest nyújtott remek és kényelmes szolgáltatásai. Csak ez után, néhány osztálytársamnál láttam a DOS Navigator-t (olvasnivaló), ami lényegében ugyanaz volt, mégis egy kicsit máshogy oldotta meg a fájlkezelést. A DN sosem vált a kedvencemmé, mivel az NC-hez képest eléggé másképpen kellett vezérelni (noha rengeteg mindenben többet nyújtott nála).

A harmadik jelölt a Volkov Commander volt (olvasnivaló), ami nagyon sokban hasonlított az NC-hez, és tudásban is bőven meghaladta (például képes volt hosszú fájlneveket kezelni, ha windows-on futott). Amíg DOS-t használtam, ez volt a kiválasztott (az összes mp3-as CD-mre kiírtam egy VC-t és egy XTC playert, ha netán csak zenét szeretnék hallgatni).

Mikor elkezdtem Windows 95-öt használni, egy grafikus navigátort használtam (a nevére már nem igazán emlékszem, még az is megeshet, hogy Windows Commander volt a neve, esetleg Norton Commander for Windows), ami csalódással kezdődött, szinte azokat a funkciókat sem tudta, mint a dos-os testvérei. Néhány hónap alatt rájöttem, hogy ez nem nekem való, és valahogyan (talán egy PC-X CD mellékleten) rátaláltam a FAR Manager-re, amit azóta is megelégedéssel használok.

Első találkozások

Mikor először használtam a FAR-t (FAR v1.10), örültem, hogy kezelhetősége sokban hasonlít az eddig megismert és használt navigátorokéhoz, mégis sokkal kézre állóbb, mint azok. Már akkor tudott plugineket és makrókat kezelni, amik ma is nagyon sokszor megkönnyítik a dolgomat.

A funkciógazdagságáról pedig csak annyit, hogy kb. 8 éve használom (úgy, hogy állandóan fut), és még mindig képes újat mutatni.

Az alábbi (és későbbi) leírásokra mind érvényes, hogy tessék oda érteni az "és még sorolhatnám..." kifejezést minden ismertető végére, mert azok leírásával több könyvet lehetne megtölteni.

Rövid bemutatás

A FAR alapvetően egy konzolos (mi az a konzol pontosan?), Windows-ra írt alkalmazás. Valahogy így néz ki első indítás után:

Az előre beállított 10 panel-módot tetszőlegesen szerkeszthetjük, és egy gombnyomással válthatunk közöttük (bal CTRL+[0-9]). A panel módokat a menü (F9) Options -> File panel modes beállításánál változtathatjuk.

Természetesen van környezetfüggő help-je, tehát egy másolási dialógusablaknál (F5) kiírja, hogy az egyes elemek milyen tulajdonsággal bírnak, milyen billentyűket lehet használni, hogyan lehet a kinézetet testre szabni, stb.

Létezik magyar fordítása (mind az UI-nak, mind a helpnek), bár én azt nem használtam sokáig, mivel két verzió között a nyelvi fájlokat frissíteni kell. Az alapnyelv (orosz) és az angol a telepítéssel (vagy frissítéssel) együtt jön, ezért azokra nem kell túl sok figyelmet fordítani.

Ilyen módon, ha a korábban említett Options -> File panel modes beállítási ablakban lenyomjuk a help billentyűt (F1, tradicionálisan), akkor kiírja nekünk, hogy hogyan lehet a 11 féle megjeleníthető adatot előcsalni, illetve azokat milyen széles oszlopban akarjuk ábrázolni, valamint fél- vagy egész panelen akarjuk azt megjeleníteni. Ezeken kívül még 6 másik opcióval is befolyásolhatjuk a panelek kinézetét.

A meghajtó-váltási dialógus (ALT+F[1-2]) szintén legalább 9 adatot képes megjeleníteni, amihez még csak egy konfiguráló ablakba sem szükséges belépnünk: CTRL+[1-9] kombinációkkal lehet szabályozni, hogy kiírja a meghajtólista nevét, típusát, méretét, szabad bájtokat, címkéjét, stb. Ebben a dialógusablakban tudunk hálózati meghajtót csatlakoztatni, flash drive-ot leválasztani, és itt foglalnak helyet a panel-típusú pluginek is (pl. a temporary panel, ami a fájlkeresés eredményeit hivatott megjeleníteni; az ftp plugin, amivel előre beállított ftp kapcsolatokat tudunk megnyitni és kezelni; scp plugin, hálózati statisztika, és még sorolhatnám).

Természetesen itt is él a környezetfüggő help (context-help), ami megmondja, hogy melyik billentyűvel pontosan mit szabályozhatunk.

Körülbelül ez a részletesség és kidolgozottság érvényes a FAR teljes funkciópalettájára, rengeteg konfigurálhatósági lehetőség, rengeteg hasznos információ, amihez FAR nélkül több egyéb szoftveren keresztül juthatunk el.

Szerkesztő és nézegető

A FAR Manager rendelkezik beépített fájl-megjelenítő és szerkesztő funkcióval, persze használhatunk ezekre külső programot is, de nem éri meg. A megjelenítő gyors, gigabájtos fájlokban is pillanatok alatt ugrik az elejéről a végére. Képes váltani DOS és WIN karakterkódolások között, erre a Unicode elterjedése ellenére is még gyakran van szükség. Lehetőség van a sorokat kényszerítve levágni (wrap), de lehet szóvégeken is (word wrap).

A szerkesztő rendelkezik az alapszintű funkciókkal:

  • státusz (melyik sor, melyik oszlopban vagyunk, milyen karakteren állunk, annak mi az "ascii"-kódja, mennyi sor van összesen)
  • szofisztikált szerkesztőparancsok (fájl elejére-végére ugrás, oldal elejére-végére ugrás, szó ugrás balra-jobbra, kijelölt sorok mozgatása balra-jobbra, blokk-kijelölés, blokk mozgatás, blokk másolás-beszúrás)
  • keresés és csere
  • váltás read-only módba
  • váltás fájlnézegetés és szerkesztés között (ugye milyen hasznos, ha fájlnézegetés közben rájövünk, hogy valamit módosítani kell, és nem kell újra megnyitni szerkesztésre és megkeresni a kérdéses sort?)
  • stb.

Felület

A fájlkezelő felülete igen praktikus és - természetesen - teljesen testre szabható. Alapértelmezetten alul található a menüsor, ami ALT, CTRL, SHIFT, illetve ezek kombinációinak lenyomásakor változik, és az éppen elérhető funkciókat mutatja.

Megjegyzi a látogatott könyvtárakat, fájlokat, futtatott parancsokat, később visszakereshetők, lekérdezhetők.

A futtató konzol-ablak tetszőlegesen méretezhető, alkalmazkodik azonnal, de a teljes-képernyőre váltást megoldhatjuk úgy is, hogy lenyomjuk az ALT+F9 kombinációt, és a lehető legoptimálisabban megtölti a képernyőt. Betűtípust váltani a windows-konzolokhoz megszokott módon lehet.

A FAR kezelhető egérrel is, de igen kevés funkció kiváltására használható: bal klikk: pozícionálás; dupla bal klikk: enter; jobb klikk: kijelölés; görgők: pozícionálás. Az alsó illetve a felső menüsor klikkelhető.

Bővíthetőség

Utaltam már a "plugin"-ekre, amikkel az amúgy is bő kezelhetőségből még többet lehet kihozni. Ezek a pluginek (amikből jelenleg 748 db van) dll fájlként vannak jelen a FAR Manager plugins könyvtárában, és képesek új funkciókat bevinni a szoftverbe, illetve a meglévőket bővíteni (innen lehet őket tölteni).

Csak néhány azok közül, amiket én is használok:

  • bővített history: tetszőlegesen megadható mennyiségű parancs-könyvtár-fájl történetet képes tárolni, és beírással keresni köztük
  • branch: az adott könyvtárban lévő összes elemet (fájlt, könyvtárat) egy panelen jeleníti meg
  • fájl-átnevezés: kis-nagy betű konverzió, előre beállított séma alapján, reguláris kifejezés alapján
  • ascii karaktertábla
  • windows-menü: mintha csak jobb-gombot nyomnál egy fájlon az intézőben
  • processz-lista: kilőheted, megnézheted a futó programokat (olyan részletességgel, hogy milyen dll-eket töltött be, milyen fájlokat tart nyitva)
  • hálózat-kapcsolati lista: felsorolja az aktuálisan nyitott portokat, kapcsolatokat, kiírja, hogy melyik programhoz tartozik
  • eseménynapló: megjeleníti a windows eseménynaplóját
  • wmi tallózó: a wmi-ből kiolvasható minden információt lehet tallózni
  • exe és dll browser: kiírja az összes szükséges dll-t, megjeleníti a futtatható fájloknál szokásos fejlécinformációt, stb
  • mp3 tag szerkesztő és átnevező
  • ftp kliens
  • scp kliens (winscp szükséges hozzá)
  • okosabb fájl-kijelölés: dátum, méret és egyéb szempontok alapján képes fájlokat kijelölni
  • windows szolgaltatás tallózó: elindíthatjuk, leállíthatjuk, szerkeszthetjük a windows szervizeket
  • fájl-daraboló és összeillesztő
  • konzol-felvevő: egy lejátszható szövegfájlba beleírja a konzol változásait, így máskor is visszajátszható
  • unicode konverter: utf-7-8, unicode, unicode big endian
  • windows ablakok listája: megjeleníti és szerkeszteni tudja az összes windows-ablakot (azokat is, amik nem látszanak), el lehet rejteni, kilőni, modált váltani, stb.
  • vágólap kijelölés: kijelöli azokat a fájlokat, amik nevei a vágólapon vannak (pl. mp3 válogatásnál hasznos, gyors panel-összehasonlítás, stb)

Billentyű-makrók

A FAR Manager egyik kétség kívül leghasznosabb szolgáltatása a billentyű-makró. A dolog lényege annyi, hogy egy tetszőleges billentyűlenyomási sorozatot képes "felvenni", és ahhoz egy másik billentyűt definiálni. Azaz, ha én felveszem azt, hogy "ALT+F1 Down Enter", és hozzákötöm a CTRL+Right kombinációhoz, akkor amikor lenyomom utóbbit, a felvett billentyűlenyomásokat fogja "lejátszani".

A makrók környezetfüggők, azaz, ha egy másolás ablakban indítom a felvételt, akkor azt csak ott hívhatom elő. Szintúgy vonatkozik a szerkesztőre is, amiben nyugodtan definiálhatok egy "< b >" sorozatot a CTRL+b-re, "< / b >"-t pedig a CTRL+SHIFT+b-re, aminek főként a HTML szerkesztésnél látom hasznát.

Még egy-két gondolat

A FAR a registryben tárolja minden beállítását a HKCU\Software\Far bejegyzés alatt. Ennek a kulcsnak az exportálásával lehet mentést készíteni a beállításokról, az esetleges windows-reinstall utáni időkre.

Az én windows asztalomon most 6 ikon van, a Start menüt pedig nem is használom, mert minden megoldok batch-ből. Ha egy új szoftvert telepítek, akkor csinálok neki egy rövid nevű batch-fájlt, és FAR-ból indítom: a skype-hoz pl. készítek egy "sk.bat"-ot, így amikor el akarom indítani, akkor csak azt írom be, hogy "sk", és nem kell huzigálnom az egeret és klikkelgetni ötöt. A parancssor pedig úgyis mindig ott van.

Elérhetőség: http://www.farmanager.com/


Far Manager 1.80 - Open Source

2008-01-04 21:11:19

A világ leghasználhatóbb fájlkezelője open-source lett, ami azt jelenti, hogy bárki lefetchelheti a forráskódot, és lefordíthatja magának a legújabb verziókat.

Igen nagy hadüzenet ez a TC közösségnek, lássuk ők mit tudnak :P

Far Manager honlapja.


Teljes bejegyzés

IBM DB2 9.5 Express install Ubuntu 7.10 Serverre

2007-12-19 10:35:03
Címkék: ubuntu , ibm , db2

Egy teljesen üres rendszerből kiindulva a következő lépések szükségesek az IBM DB2 9.5 Express telepítéséhez egy Ubuntu 7.10 Server rendszeren:


Teljes bejegyzés

Az install lépései (grafikus felületen)

# apt-get install libstdc++5 libaio1
# tar zxfv db2exc_950_LNX_x86.tar.gz
# cd exp
# ./db2setup

További teendők képekben.


IBM Websphere Application Server 6.1.0.3 Express és WAS Plugin install Ubuntu 7.10 Serverre

2007-12-19 10:33:27
Címkék: websphere , was

Előkövetelmények

Egy teljesen friss Ubuntu 7.10 Server rendszerre a következő csomagokat kell feltenni:

# apt-get -f -y install mc screen rpm alien libaio1 libstdc++5 libaio-dev libdb4.3 libexpat1 libldap2 libpcre3 libssl0.9.8 zlib1g debconf debianutils mime-support openssl net-tools ssl-cert libmagic1 libgcc1 lsb-base xserver-xorg xfce4 xfonts-base vncserver

Ez a lista opcionálisan testreszabható (pl. mc és screen nem feltétlenül szükséges).


Teljes bejegyzés

X11 beállítása a leírás szerint, Xvnc elindítása szintén a leírás szerint.

Fontos: a WAS feltételezi, hogy a /bin/sh alapból a /bin/bash-ra van linkelve. Ez Ubuntu 7.10-ben nem így van (/bin/dash-ra mutat). Ezt módosítani kell, különben a telepítő nem fog profilt tenni a WAS-hoz (generateKeysForSingleProfile lépésnél megáll).

# mv /bin/sh /bin/sh.0
# ln -s /bin/bash /bin/sh

Szükséges telepítők

# tar zxfv C95CMML.tar.gz
# tar zxfv C95CDML.tar.gz

WAS 6.1.0.3 Express telepítés

(A telepítést a grafikus felületen kell végezni.)

# cd WAS/
# ./install

A további lépések a screenshotokban: klikk.

Apache 2.0.5x telepítés

A WAS 6.1 hivatalosan az Apache 2.0.54-gyel van certifikálva, de működik 2.0.55-tel is. Ami biztos, hogy 2.2-vel nem fog menni (amit az apt-get install apache2 alapból feltesz). Hibaüzenet: undefined symbol: aprsockaddrport_get.

# /etc/init.d/apache2 restart
 * Restarting web server apache2
apache2: Syntax error on line 297 of /etc/apache2/apache2.conf: 
Cannot load /opt/IBM/WebSphere/Plugins/bin/mod_was_ap20_http.so into server: /opt/IBM/WebSphere/Plugins/bin/mod_was_ap20_http.so: undefined symbol: apr_sockaddr_port_get

Ahhoz, hogy Ubuntu 7.10-re Apache 2.0.55-öt fel tudjunk tenni, manuálisan le kell tölteni a 2.0.55-ös csomagokat, és dpkg-vel feltenni. A csomagok előfeltételeit már korábban feltettük apt-vel. Lássuk az install folyamatot:

# dpkg -i libapr0_2.0.55-4ubuntu4.1_i386.deb
# dpkg -i apache2-utils_2.0.55-4ubuntu4.1_i386.deb
# dpkg -i apache2-common_2.0.55-4ubuntu4.1_i386.deb
# dpkg -i apache2-mpm-prefork_2.0.55-4ubuntu4.1_i386.deb
# dpkg -i apache2_2.0.55-4ubuntu4.1_i386.deb
# /etc/init.d/apache2 restart
# apache2 -v
Server version: Apache/2.0.55
Server built:   Aug 16 2007 22:41:15

WAS Plug-in 6.1.0.3 telepítés

(A telepítést a grafikus felületen kell végezni.)

# cd plugin/
# ./install

A további lépések a screenshotokban: klikk.

A többi már a WAS adminisztrátoron múlik :)


Hogyan tegyünk grafikus felületet Ubuntu 7.10 Serverre?

2007-12-11 22:00:17
Címkék: xfce , x11 , vnc , ubuntu

Ugyanúgy, mint ahogy 6.06.1-re, azzal a különbséggel, hogy itt egy kicsit bele kell írni az xorg.conf-ba (és 49.2 MB-ot szükséges letölteni).

A probléma a következő lesz: miután kiadtuk a vncserver parancsot, a ~/.vnc/host:1.log-ban az alábbi sorok fognak megjelenni:


Teljes bejegyzés
11/12/07 22:06:51 Listening for VNC connections on TCP port 5901
failed to set default font path ''
Fatal server error:
could not open default font 'fixed'

Ha megnézzük a netstat-ot, a vncserver-t nem látjuk hallgatózni, mert el sem indult a feljebb látott font probléma miatt.

Javítás az /etc/X11/xorg.conf fájlban eszközölt módosításokkal lehetséges:

Section "Files"
FontPath    "/usr/share/fonts/X11/misc/"
EndSection

Ezek után, ha újra megkíséreljük a vncserver indítását, már hibaüzenet nélkül fog elindulni, és a netstat is szépen mutatni fogja a nyitott portokat.


Warezolás, gazemberség?

2007-11-20 21:01:00
Címkék: warez , torrent

Torrent-razzia, illegális feltöltés, warez ftp-k, ASVA, ArtisJus, BSA.

A híres-nevezetes 2007-11-08-i szervertermi lefoglalások alkalmával igen csak hangos lett a magyar fórumok többsége.

Egyesek már bojkottot akarnak szervezni, hogy hú meg ha, ma nem veszunk legális médiát semmilyen formában. Persze ezzel az a gond, hogy ezzel a bojkott-tal csak olajat tesznek a tűzre - pontosan meg fogják erősíteni azt a tévhitet, hogy a magyar warezolás bizony ártalmas a zene-, film- és szoftvereladásokra. Bár ki hogy nézi - mondhatják azt is, hogy egyék meg, amit főztek (nevezetesen, hogy folyamatosan utóbbit próbálják bizonygatni).


Teljes bejegyzés

Pro és kontra összefoglaló, egy közelálló tollából:

Alapjában véve a következő fő kategóriákat különböztetném meg:

  • legális letöltés (magáncélra legális, általában ez van túlsúlyban)
  • legális feltöltés (szőrszálhasogatás nélkül)
  • illegális feltöltés (haszonszerzést célzó tevékenység)

Minőségi média vs. warez-szelekció

Az egyik érv, ami a warez oldalon megjelenik, hogy a letöltések által sokkal jobban ki tudom válogatni azokat a médiatermékeket, amik engem érdekelnek, vagy a szememben értéket képviselnek. Ha a tapasztalat az adott termékkel pozitív, nagyobb eséllyel fogom azt megvenni, mintha csak egy jól megmarketingelt selejtet vennék kézbe. Ez bizonyos szempontból jó, mert idővel kiváltja a tényleg fogyasztható médiatermékeket, viszont pedig nem annyira (mármint a kiadók szempontjából), mert ha egy zenei albumról neked csak 2 dal tetszik, akkor nem fogod megvenni a másik 14-et feleslegesen.

A warez kultúra csak fejlődni fog, ez szinte menetrendszerű, ha nem váltanak világnézetet a kiadók, így a warez-szelekció sokkal jobban érvényesülni fog.

Szoftverek

Képzeljünk csak el egy helyzetet: mivel "ingyen" van a photoshop, gonosz módon letöltöm és elkezdek vele hekkelgetni, tutorialokat nézek, megtanulom használni. Tegyük fel még, hogy az egyetemen a grafikus szakirányt választom, esetleg lesz valami elméleti hátterem is. Ha állást keresek, el tudom mondani, hogy 2-3 év tapasztalat, tudok mutatni referenciákat, több a piacon az értékem. Jó, eddig még mindig csak az én boldogságomnál tartunk, de ha a cég, ahova megyek egy friss cég, vagy a grafikai irányba csak most nyit, akkor milyen szoftvert fog jó drágán vásárolni? Photoshopot. Röviden: ha sok a photoshop felhasználó, több szakember lesz, több terméket tudnak eladni. Ha nem lenne ingyen a photoshop, tized annyian sem értenének hozzá, mert olyan horribilis áron, ahogyan az adobe kínálja, otthonra nem venné meg senki (vagyis: nagyon kevesen), ennél fogva kevesebb helyre is tudnák eladni.

Drága zenék, drága filmek

Ismét egy stabil lábakon álló tényező, ami motiválja a warezolókat: a médiák ára. Egy átlagos zenei CD ára ma 4-5e HUF között van, ami a nettó átlagfizetéshez viszonyítva (106e HUF) bizony drága (4-5%). Más, fejlett országokban sokkal költségkímélőbb arányokkal találkozhatunk (1-0.5%), nyilván ott nem annyira problémás egy CD beszerzése.

ArtisJus - Adathordozókba épített jogdíj

Az ötlet igen merész első nekifutásra - pedig 1980 óta létezik magyarországon. A lényege annyi, hogy - mivel az adathordozókon tárolhatsz jogdíjköteles adatokat - már eleve beépítik az adathordozók árába a rajtuk tárolható termékek jogdíját. A dolog azért csücskös, mert ha én a digitális fényképezőgépembe veszek egy 512-es xD kártyát, és kizárólag fényképezésre használom, akkor is fizetem a jogdíjat; ha a frissen vásárolt üres CD-re csak a fotóimat teszem, vagy archiválom a grafikai anyagaimat, dokumentumaimat, akkor is fizetem - holott egyik sem jogdíjköteles, legalábbis az én szemszögemből.

Az meg, hogy eleve jogsértőnek titulálnak köznapi nyelven bunkóság.

Az ArtisJus erre azt a példát szokta hozni, hogy a kötelező gépjármű-biztosítást is mindenki fizeti, mégsem biztos, hogy valaha lát belőle egyetlen fillért is (ha nem szenved balesetet, ugye).

Jogosan mondhatja így bárki, hogy - a már megfizetett jogdíjak miatt - legális letölteni arkármilyen médiaanyagot, hordozni, másolni egyéb adattároló eszközökre, amikért szintén szedtek már be jogdíjat.

Music-on-demand

Léteznek olyan weboldalak, ahol a zenéket igény szerint töltheted le, például az iTunes. Csak azért fizetsz, amit letöltesz, és csak azt töltesz, amit akarsz (nem egy egész albumot, ha nincs rá igényed). Egyes felmérések szerint ezek okozzák a legnagyobb kiesést a lemezkiadók forgalmában! (Nem pedig a warez!)

Ugyanakkor pont ez a megoldás lehet a warez elég erős visszaszorítója, hiszen nem az van, hogy veszel egy CD-t, amin van 10 dal, amiből kettőt szilánkosra játszott a tv meg a rádió, a maradék 8 meg mehetne a kukába. Zsákbamacskát nem éri meg 5000-ért venni, de mondjuk egy számot 4-500-ért igen. És igenis, ha mind a 10 megéri a pénzét, akkor abból lesz annyi bevétel.

Késői megjelenés, elérhetetlenség

Nem vagyunk olyan helyzetben, hogy a legfrissebb filmeket megjelenés után azonnal láthassuk a moziban. Van, aki el sem tud menni moziba. A DVD megjelenéséről meg ne is beszéljünk, jó 3-6 hónappal később jön ki, mint ahogy a moziban láthatnánk.

A másik dolog, hogy egyáltalán nem minden jelenik meg magyarországon, esetleg nem is forgalmazzák. Ezeket vajon honnan tudnánk beszerezni?

A régi filmeket, sorozatokat hol keressük? Sőt! A legújabb sorozatokrészeket hol nézzük meg? Már a fél világ kivesézte, hogy ki a gyilkos, mi még csak akkor kapcsolódunk be a pilot-ba. Erre jelenleg nem ismerek legális megoldást.

Vannak olyan alternatív zenei irányzatok, amik magyarországot éppen csak súrolják, a friss lemezeket egyszerűen lehetetlen beszerezni a köznapi embernek. Azokról beszélek, amiket a klubokban játszanak fekete lemezem pörgetve.

Zenekiadó? Minek?

Három dalt kiadni egy CD-n? Két sláger miatt kiadni egy lemeznyi hallgathatatlan maszlagot? Ilyen, és hasonló trükkökkel próbálják a legális tartalmakat lenyomni a torkunkon - hát joggal lehetünk felháborodva, hogy ezért a fizetésünk 5%-át elkérik. Sajnos a valódi alkotótól a végfelhasználóig vezető úton annyi plusz költséget és nyereséget tesznek a termékre, hogy nem csoda, ha az emberek inkább az olcsóbb megoldásokat választják.

Egyes szélsőséges vélemények szerint a zenekiadók nem is kellenek ahhoz, hogy az adott alkotás a készítőtől a közönségig eljusson: lásd pl. iTunes. Így a dalokért elkért összeget sokkal lejjebb lehetne szorítani és több emberhez juthatna el legálisan (!).

Nem is a zenészek hőzöngenek a bevételkiesés miatt, hanem a kiadók meg az ügyvédjeik. Nem véletlenül, az nekik egyáltalán nem jó, ha kikerülnek a profitgépezetből...

Gazdaságos szolgáltatás

Ha megnézel egy filmet a moziban, és azért kifizetsz 2000 Ft-ot, abban benne van a mozihoz szükséges infrastruktúra ára is, vetítő, székek, vászon, áram, film. Az viszont, hogy ugyanazt a filmet a sallang nélkül is láthasd, valahogy nincs túlságosan kidolgozva. Lehetséges, hogy klasszisokkal olcsóbb lenne filmet nézni otthon, hiszen a járulékos költségek nem jönnek rá.

Érdekes módon ebben az irányban még nem történt előremozdulás, pedig sokkal több lenne a médiatartalmakat legalálisan felhasználó közönség. Valakinek ez nyilván nem érdeke, az emberekre meg nagy ívben ...

Tyúk vagy tojás?

Oké, tegyük fel, hogy egyszerre minden kiadó úgy gondolja, hogy más üzleti modell után néz, ha az eddigi nem működik jól (persze nagyonis jól működik, rengeteg bevételhez jutnak) és a lemezárak hirtelen lecsökkennek 800-1300 HUF környékére.

Két dolog:

  • Attól, hogy a warezt betiltanák, akkor sem vennénk 5000 HUF-ért értéktelen, vagy igénytelen zenei CD-ket.
  • Ha valaki a warezen nőtt fel, a hirtelen áresésre sem fog áttérni a legális forrásra.

Ergo a jogvédők/kiadók saját maguk gerjesztették azt a hullámot, ami végül visszacsapott rájuk: a médiaanyagok másolását.

Fizetős ftp-k, sms-warez

Az ominózus szervertermi razzia fő célja az illegálisan működő ftp szerverek leleplezése volt. Egyes források a ProArt-ot jelölik meg, mint feljelentő szervezet, de a hírek szerint az ASVA keze is benne van jó mélyen a dologban.

Adottak ugye az ftp szerverek (ftp = file transfer protocol, fájl átviteli protokoll), amiken mindenféle jogdíjköteles anyagokat helyeznek el. Ezzel nem is lenne - akkora - probléma, viszont a szerverhez hozzáférést egy bizonyos havidíj fejében adnak az üzemeltetők. Ez már kimeríti az illegális fájlcsere fogalmát, nyilván büntethető.

Torrent oldalak

Nem keverendőek a fizetős ftp szerverekkel a torrent trackerek. Az ilyen megosztó oldalak általában zártkörűek (mint pl. a bithumen is, ami alól szintén elvitték a gépet), anyagi ellenszolgáltatás nélkül működnek (de legalábbis a letöltés az), így nem ismerek olyan pontot, ahol törvénybe ütköznének. A szerver, ahol a szolgáltatás fut, nem tartalmaz illegális anyagot. Ennek ellenére 'véletlenül' elvitték az első magyar torrent oldal szerverét, szintúgy a felnőtteknek szóló vizuális anyagokat szolgáltató trackert.

A másik, ami érthetetlen számomra, pedig a jogvédők vadul üvöltözik, hogy aki bittorrenten tölt le, az egyben fel is tölt. Igen ám, de amíg letölti az egész anyagot, addig talán a tizedét tölti fel (ráadásul olyan kicsi részletekben, amik önmagukban nem használhatók), ez milyen kategóriába tartozik?

Direkt rossz célzás

Abban az időben, amikor már az autórádió is képes mp3-at lejátszani, egyszerűen nevetséges, hogy - csak - szimpla CD-n adják ki a zenei albumokat. A számítógép-tulajdonosok többsége mp3-ban hallgatja a zenéit, vannak mp3-as pendrive-ok, mp3-akat tartalmazó CD-ket lejátszó discman, stb. A natív audio CD és az mp3 közötti minőségkülönbség nem annyira szembetűnő, mint egy DVD és egy AVI közötti különbség, így az mp3-nak elég nagy létjogosulsága van. Mégis még mindig a CD-ket próbálják lenyomni a torkunkon, és vállszélességgel bizonygatják, hogy az nekünk jó.

Lopás vagy nem?

El kellene felejteni már azt a tévhitet, hogy a jogdíjköteles anyagok letöltése lopás. Nem az. A lopás kategória teljesen más. Az információra nem értelmezhető a lopás fogalma. Itt arról van szó, hogy "szerzői és szomszédos jogok megsértése".

Alkotó vagy? Fizess!

Tessék elolvasni az ArtisJus idevágó oldalát: http://artisjus.hu/szerzoknek__jogdijkifizetes_/mubejelentes/. Tehát, ha valaki összedob otthon egy zenei alkotást, nem teheti elérhetővé anélkül, hogy fizetne az ArtisJusnak (regisztrációs díj: 700 Ft+ÁFA / dal).

Álszent

A jogvédő szervezetek alapból feltételezik rólam, hogy potenciális jogsértő vagyok, ezért mindenféle költséggel megnövelik az adathordozók árát. Az persze egyikben sem merült még fel, hogy mivan akkor, ha az általam letöltött anyaggal potenciális vásárló leszek, nem pedig bűnöző.


iSCSI Target és Initiator installálása Ubuntu 6.06.1 LTS-re

2007-10-13 18:23:40
Címkék: ubuntu , iscsi , ietd

Sajnos az Ubuntu 6.06.1 LTS apt repositoryjában nincs open-iscsi sem pedig iscsi enterprise target (iet) csomag, ezért mindent kézzel kell feltenni. Az open-iscsi előfeltétele a 2.6.16 utáni kernelverzió, ezért először azt is kell forgatni.


Teljes bejegyzés

Én egy ubuntu alap-install után a következő csomagokat tettem fel:

# apt-get install openssh-server ssh libglib2.0-0 mc screen binutils cpp-4.0 cpp gcc-4.0 gcc linux-kernel-headers libc6-dev libncurses5-dev zlib1g-dev libssl-dev make libsysfs-dev perl-modules perl patch dpkg-dev kernel-package

A kernel fordítást nem írom most le, annyiról szól, hogy az eredeti /boot/config-2.6.15-26-server fájlt bemásoltam a kernel forrásához .config néven, azután egy make menuconfig után elmentettem és egy make-kpkg --initrd kernel_image parancsot adtam ki:

# cp /boot/config-2.6.15-26-server /usr/src/linux-2.6.22/.config
# make menuconfig
# make-kpkg --initrd kernel_image

Miután a kernel lefordult, a keletkezett kernel-image-2.6.2210.00.customi386.deb fájlt feltettem dpkg-vel:

# dpkg -i kernel-image-2.6.22_10.00.custom_i386.deb
# reboot

A rebootra azért van szükség, mert a iet és az open-iscsi fordításához az újonnan bootolt kernellel nem kell paraméterezgetni a make-et.

# cd /usr/src/iscsitarget-0.4.15
# make
# make install
# cd ../open-iscsi-2.0-865.13
# make
# make install
# update-rc.d iscsi-target defaults
# update-rc.d open-iscsi defaults

Ezek a lépések persze csak ideális esetben működnek. Sajnos belefutottam egy olyan - ismert - problémába, hogy az iet egy bizonyos rendszerhívást kevesebb paraméterrel hív meg, mint ahogy azt a 2.6.22-es kernelben implementálták, ezért egy kis hekk szükséges: a /usr/src/iscsitarget-0.4.15/kernel/event.c fájlban ki kell cserélni egy sort (98. pontosan):

nl = netlink_kernel_create(NETLINK_IET, 1, event_recv, THIS_MODULE);
erre:
nl = netlink_kernel_create(NETLINK_IET, 1, event_recv, NULL, THIS_MODULE);

Ezen kívül szükséges, hogy a szervernek fix ip címe legyen (tehát ne dhcp-től kapott), mert akkor az open-iscsi bootolásnál nem tud még kapcsolatot kiépíteni.

Ezek után nincs más dolgunk, mint a targetnek bekonfigurálni a kiosztandó diszkeket, ami lehet akár fájl, akár másik blokk eszköz. Én az alábbi példában egy fizikai lemezt és egy fájlt fogok kiosztani (/etc/ietd.conf):

Target iqn.2001-04.com.example:pelda1
        Lun 0 Path=/dev/sdb,Type=fileio
        Lun 1 Path=/root/diszk1,Type=fileio
        Alias Test

Ezután reboot, hogy a target a következő indulásnál észlelje az új konfigurációt - és, hogy lássuk, vajon hibátlanul működik-e a boot folyamat a iscsi eszközökkel együtt is. Ekkor még nem fog működni a kiosztott eszközök észlelése, ehhez be kell állítani az initiator-t is:

# iscsi_discovery <ip cim>
# reboot

Reboot előtt és után érdemes ellenőrizni a /proc/partitions fájl tartalmát, ha újraindítás után több bejegyzés van benne, mint előtte, akkor sikeres az installálás.


Oracle 11g R1 install Ubuntu 6.06.1-re

2007-08-18 14:13:04
Címkék: ubuntu , oracle , install

This article is available in english.

Előkövetelmények

  • 1,6GB swap
  • 1GB RAM
  • 6GB hely a binárisoknak (install + telepített változat
  • grafikus felület [leírásl(/blog/2007-08-18/hogyan-tegyunk-grafikus-feluletet-ubuntu-6.06.1-serverre.html)
  • apt források megfelelő konfigurációja
  • internet-kapcsolat

Teljes bejegyzés

Rendszerparaméterek

# apt-get update
# apt-get -f -y install unzip gcc make binutils lesstif2 libc6 libc6-dev rpm libmotif3 libaio libstdc++5 gawk alien libg++2.8.1.3-glibc2.2 ksh gcc-3.3 g++-3.3 libstdc++5
# addgroup oinstall
# addgroup dba
# addgroup nobody
# useradd -g oinstall -G dba -p password -d /home/oracle -s /bin/bash oracle
# usermod -g nobody nobody
# mkdir /home/oracle
# chown oracle.dba /home/oracle
# passwd oracle
# ln -s /usr/bin/awk /bin/awk
# ln -s /usr/bin/rpm /bin/rpm
# ln -s /usr/bin/basename /bin/basename
# mkdir /etc/rc.d
# ln -s /etc/rc0.d /etc/rc.d/rc0.d
# ln -s /etc/rc2.d /etc/rc.d/rc2.d
# ln -s /etc/rc3.d /etc/rc.d/rc3.d
# ln -s /etc/rc4.d /etc/rc.d/rc4.d
# ln -s /etc/rc5.d /etc/rc.d/rc5.d
# ln -s /etc/rc6.d /etc/rc.d/rc6.d
# ln -s /etc/init.d /etc/rc.d/init.d
# echo "Red Hat Linux release 4" > /etc/redhat-release
# echo -e "fs.file-max = 65536\nkernel.shmall = 2097152\nkernel.shmmax = 2147483648\nkernel.shmmni = 4096\nkernel.sem = 250 32000 100 128\nnet.ipv4.ip_local_port_range = 1024 65000\nnet.core.rmem_default = 4194308\nnet.core.rmem_max = 4194308\nnet.core.wmem_default = 262144\nnet.core.wmem_max = 262144\n" >> /etc/sysctl.conf
# sysctl -p
# echo -e "oracle soft nproc 2047\noracle hard nproc 16383\noracle soft nofile 1023\noracle hard nofile 65535\n" >> /etc/security/limits.conf

Letöltjük a binárist

Egy alkalmas könyvtárba (ahol van elég hely - nálam /oracle) letöltjük az alábbi zipet: linux11gR1database.zip (1 844 533 232 byte)

# unzip linux_11gR1_database.zip
# chown -R oracle:oinstall database

Az Oracle feltelepítése

Grafikus felületen:

# xhost +
# su - oracle
$ export DISPLAY=:1
$ cd /oracle/databases
$ ./runInstaller

How to install Oracle 11g R1 on Ubuntu 6.06.1 LTS

2007-08-18 14:13:04
Címkék: ubuntu , oracle , install

Prerequisites

  • 1,6GB swap
  • 1GB RAM
  • 6GB hard disk space (for install + installed application
  • X11 (nice how-to)
  • proper apt sources configuration (*verse
  • internet connection

Teljes bejegyzés

System parameters

# apt-get update
# apt-get -f -y install unzip gcc make binutils lesstif2 libc6 libc6-dev rpm libmotif3 libaio libstdc++5 gawk alien libg++2.8.1.3-glibc2.2 ksh gcc-3.3 g++-3.3 libstdc++5
# addgroup oinstall
# addgroup dba
# addgroup nobody
# useradd -g oinstall -G dba -p password -d /home/oracle -s /bin/bash oracle
# usermod -g nobody nobody
# mkdir /home/oracle
# chown oracle.dba /home/oracle
# passwd oracle
# ln -s /usr/bin/awk /bin/awk
# ln -s /usr/bin/rpm /bin/rpm
# ln -s /usr/bin/basename /bin/basename
# mkdir /etc/rc.d
# ln -s /etc/rc0.d /etc/rc.d/rc0.d
# ln -s /etc/rc2.d /etc/rc.d/rc2.d
# ln -s /etc/rc3.d /etc/rc.d/rc3.d
# ln -s /etc/rc4.d /etc/rc.d/rc4.d
# ln -s /etc/rc5.d /etc/rc.d/rc5.d
# ln -s /etc/rc6.d /etc/rc.d/rc6.d
# ln -s /etc/init.d /etc/rc.d/init.d
# echo "Red Hat Linux release 4" > /etc/redhat-release
# echo -e "fs.file-max = 65536\nkernel.shmall = 2097152\nkernel.shmmax = 2147483648\nkernel.shmmni = 4096\nkernel.sem = 250 32000 100 128\nnet.ipv4.ip_local_port_range = 1024 65000\nnet.core.rmem_default = 4194308\nnet.core.rmem_max = 4194308\nnet.core.wmem_default = 262144\nnet.core.wmem_max = 262144\n" >> /etc/sysctl.conf
# sysctl -p
# echo -e "oracle soft nproc 2047\noracle hard nproc 16383\noracle soft nofile 1023\noracle hard nofile 65535\n" >> /etc/security/limits.conf

Download the installer

Download the installer in a directory which has enough space (my place is /oracle): linux11gR1database.zip (1 844 533 232 byte)

# unzip linux_11gR1_database.zip
# chown -R oracle:oinstall database

Installing Oracle 11g

On the X11:

# xhost +
# su - oracle
$ export DISPLAY=:1
$ cd /oracle/databases
$ ./runInstaller

Hogyan tegyünk grafikus felületet Ubuntu 6.06.1 Serverre?

2007-08-18 14:09:55
Címkék: xfce , x11 , vnc , ubuntu

Egyszerű, és csak 47.5MB-nyi csomagot kell letölteni:


Teljes bejegyzés
# apt-get update
# apt-get -f -y install xserver-xorg xfce4 xfonts-base vncserver
# vncpasswd
# vncserver :1 -name x11 -depth 24 -geometry 1280x800

És már csatlakozhatunk is vnc-vel!


Apache2 - WebDAV - Ubuntu 6.06.1 - Windows XP kliens

2007-08-13 19:48:34
Címkék: webdav , ubuntu , davfs , apache

Az alábbi leírás megmutatja, hogy hogyan konfiguráljunk be egy apache2-t webdavval úgy, hogy azt windows xp-s kliensekkel is tudjuk használni (utóbbi ugyanis alapesetben nem képes normálisan alkalmazni a standardokat)


Teljes bejegyzés

Csomagok

# apt-get -f -y install apache2 libapache2-mod-encoding

Modulok

# ln -s /etc/apache2/mods-available/{dav*,encoding*,headers*} /etc/apache2/mods-enabled/

Konfigurációs paraméterek

/etc/apache2/apache2.conf tartalma:

...
Header add MS-Author-Via "DAV"
EncodingEngine on
NormalizeUsername on
...

/etc/apache2/sites-enabled/000-default tartalma:

<VirtualHost *>
...
...
    Alias /dav /var/www/dav
    <Directory /var/www/dav>
        Dav On
        Order deny,allow
        Allow from all

        AuthType Basic
        AuthName "DAV hozzaferes"
        AuthUserFile /etc/apache2/.davpw
        Require valid-user
    </Directory>

</VirtualHost>

/etc/apache2/.davpw létrehozása:

# htpasswd -d -c /etc/apache2/.davpw felh
# chown root.www-data /etc/apache2/.davpw
# chmod 640 /etc/apache2/.davpw

Utolsó simítások

# mkdir /var/www/dav
# chown www-data.www-data /var/www/dav
# /etc/init.d/apache2 restart

Kliens-konfiguráció

  • asztalon "Hálózati helyek" elnevezésű ikonra katt
  • bejövő ablakban "Hálózati hely hozzáadása" elemre katt
  • feljövő varázslóban: Tovább
  • "Válasszon másik hálózati helyet", Tovább
  • Internet- vagy hálózati cím: http://szerver.valahol.com:80/dav, Tovább
  • Korábban megadott felhasználónév és jelszó beírása ("felh

Karbantartás

Új felhasználó felvétele

# htpasswd -d /etc/apache2/.davpw ujfelh

CVS beállítása Ubuntu 6.06.1-re

2007-05-21 19:39:32
Címkék:

CVS - Concurrent Versions System (Wiki)


Teljes bejegyzés
# apt-get -f -y install cvsd cvsutils
# sed -i "s/RootJail/# RootJail/ig" /etc/cvsd/cvsd.conf
# mkdir /CVSREP
# ln -s /var/lib/cvs/CVSROOT /CVSREP
# cvsd-passwd /CVSREP admin
# /etc/init.d/cvsd restart
# chown -R cvsd.cvsd /CVSREP
# chown -R cvsd.cvsd /var/lib/cvs/CVSROOT

Mára már fejlettebb módja is van a verziókövetésnek: SVN, Git


IBM DB2 8.2 Express install Debian 4.0-ra (64 bit)

2007-05-15 20:21:33
Címkék: install , debian , db2 , 64bit

Előfeltételek

  • kernel: 2.6.18-4-amd64
  • DB2 8.2: db2exc_LNX64_26x86.tar.gz

Teljes bejegyzés

Az install folyamat

# apt-get -f -y install libstdc++5 alien ia32-libs
# tar zxfv db2exc_LNX64_26x86.tar.gz
# sed -i "s/rpm -ivh/alien -dic/ig" db2exc_LNX64_26x86/db2/linux26/db2_install
# cd db2exc_LNX64_26x86
# echo DB2.EXP | ./db2_install

# groupadd -g 999 db2iadm1
# groupadd -g 998 db2fadm1
# groupadd -g 997 dasadm1
# useradd -u 1004 -g db2iadm1 -m -d /home/db2inst1 db2inst1
# useradd -u 1003 -g db2fadm1 -m -d /home/db2fenc1 db2fenc1
# useradd -u 1002 -g dasadm1 -m -d /home/dasusr1 dasusr1
# /opt/IBM/db2/V8.1/instance/dascrt -u dasusr1
# /opt/IBM/db2/V8.1/instance/db2icrt -a server -u db2fenc1 db2inst1

# su - db2inst1
$ db2 update dbm cfg using svcename 50055
$ db2set DB2COMM=tcpip
$ db2stop
$ db2licm -a db2exc_LNX64_26x86/db2/license/db2exp.lic
$ db2start

IBM DB2 8.2 Express install Ubuntu 6.06.1-re

2007-05-09 20:47:34
Címkék: ubuntu , install , db2

Előfeltételek

  • kernel: 2.6.15-26-server
  • DB2 8.2: db2excLNX26x86.tar.gz

Teljes bejegyzés

Az install folyamat

# apt-get -f -y install libstdc++5 alien
# tar zxfv db2exc_LNX_26x86.tar.gz
# sed -i "s/rpm -ivh/alien -dic/ig" db2exc_LNX_26x86/db2/linux26/db2_install
# cd db2exc_LNX_26x86
# echo DB2.EXP | ./db2_install

# groupadd -g 999 db2iadm1
# groupadd -g 998 db2fadm1
# groupadd -g 997 dasadm1
# useradd -u 1004 -g db2iadm1 -m -d /home/db2inst1 db2inst1
# useradd -u 1003 -g db2fadm1 -m -d /home/db2fenc1 db2fenc1
# useradd -u 1002 -g dasadm1 -m -d /home/dasusr1 dasusr1
# /opt/IBM/db2/V8.1/instance/dascrt -u dasusr1
# /opt/IBM/db2/V8.1/instance/db2icrt -a server -u db2fenc1 db2inst1

# su - db2inst1
$ db2 update dbm cfg using svcename 50055
$ db2set DB2COMM=tcpip
$ db2stop
$ db2licm -a db2exc_LNX_26x86/db2/license/db2exp.lic
$ db2start

Lemez olvasási/írási sebesség tesztelés linux alatt

2007-05-05 20:14:30

hdparm

$ hdparm --direct -t /dev/sdc
$ hdparm -t /dev/sdc
$ hdparm --direct -T /dev/sdc
$ hdparm -T /dev/sdc

Teljes bejegyzés

bonnie

$ bonnie++ -d /store/bench -u root -s 4G -n 1 -m sata -r 1G -x 4 -q -b > bench_4096_1_1024.csv
$ bon_csv2html < bench_4096_1_1024.csv > bench_4096_1_1024.csv.html

dbench

$ dbench -t 20 -D /store/bench 100
$ dbench -t 20 -s -D /store/bench 100

iozone

$ iozone -a -b ioz.xls -g 256m -n 128m -r 256k -s 256m

postmark

pm.set fájl tartalma:

set location /store/bench
set size 268435456
set number  128
set transactions 128
set subdirectories 16
set read 262144
set write 262144
set buffering true
set report verbose

futtatás:

$ postmark
pm> load pm.set
pm> run

Oracle Applications tippek 1.

2007-05-03 20:47:55

Felhasználók által futtatott konkurrens programok listája


Teljes bejegyzés
select count(*) "Futásszám",
       lpad(a.concurrent_program_id,8) "ProgID",
       lpad(a.program_application_id,6) "ApplID",
       rpad(b.user_concurrent_program_name,75) "Program név",
       rpad(c.concurrent_program_name,25) "Rövid név"
  from applsys.fnd_concurrent_requests a, 
       applsys.fnd_concurrent_programs_tl b, 
       apps.fnd_concurrent_programs_vl c
 where a.program_application_id=b.application_id
   and a.program_application_id=c.application_id
   and a.concurrent_program_id = b.concurrent_program_id
   and a.concurrent_program_id = c.concurrent_program_id
   and b.language='HU'
 group by a.concurrent_program_id,
          a.program_application_id,
          b.user_concurrent_program_name,
          c.concurrent_program_name
 order by count(*) desc;

A felrakott patchek kódjai, és felrakásukhoz szükséges idő

select ap.patch_name
      ,substr(pr.patch_top, instr(pr.patch_top, ap.patch_name), 20) "patch"
      ,to_char(pr.start_date, 'HH24:MI:SS') "start"
      ,to_char(pr.end_date, 'HH24:MI:SS') "end"
      ,to_char(trunc(pr.end_date) + (pr.end_date - pr.start_date), 'HH24:MI:SS') "elapsed"
  from applsys.ad_applied_patches ap
 inner join applsys.ad_patch_drivers pd on ap.applied_patch_id=pd.applied_patch_id
 inner join applsys.ad_patch_runs pr on pd.patch_driver_id=pr.patch_driver_id
 order by 2

Hosszan futó konkurrens programok, idejük, indítóik

select rpad(u.description,16) "Indító",
       to_char(fr.request_id,'99999999') "Feld. ID",
       rpad(fp.user_concurrent_program_name,50) "Program név",
       sysdate "Lekérdezés ideje",
       fr.actual_start_date "Feld. indulás",
       to_char(trunc(sysdate) + (sysdate - fr.actual_start_date), 'HH24:MI:SS') "Fut. idő"
  from apps.fnd_concurrent_requests fr, apps.fnd_concurrent_programs_tl fp, apps.fnd_user u
 where ((sysdate - fr.actual_start_date) * 24) > 1
   and phase_code = 'R'
   and status_code = 'R'
   and fr.program_application_id = fp.application_id
   and fr.concurrent_program_id = fp.concurrent_program_id
   and u.user_id = fr.requested_by
   and language = 'HU';

Melyik modul milyen product verzióval van fent

select application_short_name, patch_level 
  from fnd_product_installations i, fnd_application a 
 where a.application_id = i.application_id

Kinek milyen jogosultságai vannak

select u.user_id, u.user_name, u.description, r.responsibility_name, g.start_date, g.end_date
  from apps.fnd_responsibility_vl r
      ,apps.fnd_user_resp_groups g
      ,apps.fnd_user u
 where u.user_id = g.user_id
   and r.responsibility_id = g.responsibility_id
   and u.user_id >= 1110
 order by u.user_id;


Windows Event Log bedolgozás MSSQL adatbázisba

2007-04-30 21:06:33
Címkék: windows , script , mssql , event log

Több szerver esetén az eseménynaplót igencsak nehéz követni. Ráadásul lehetnek olyan alkalmazások, amik teleszemetelik a logot normális működés esetén is. A Windows beépített "Event Viewer-e (eventvwr.msc)" igencsak kevés szűrési lehetőséget kínál, igény lehet esetleg valamilyen kúltúrált módon feldolgozni a naplóban lévő adatokat, bejegyzéseket. Az alább található scriptek segítenek az eseménynapló könnyebb szűrésében olyan módon, hogy egy MSSQL adatbázisba teszik az utolsó gyűjtés óta keletkezett bejegyzéseket, onnan pedig könnyen olvasható módon, tetszőleges feltételekkel szűrve le lehet kérdezni.


Teljes bejegyzés

Tábladefiníció (MSSQL-hez)

CREATE TABLE [dbo].[events] (
[EventID] [int] IDENTITY (1, 1) NOT NULL ,
[RecordNumber] [int] NULL ,
[Category] [int] NULL ,
[CategoryString] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[ComputerName] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[EventCode] [int] NULL ,
[EventType] [int] NULL ,
[LogFile] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Message] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[SourceName] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[TimeGenerated] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Type] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[UserName] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[TimeWritten] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
)
GO

 CREATE  CLUSTERED  INDEX [IX_CL_Written] ON [dbo].[events]([TimeWritten]) WITH  FILLFACTOR = 90
GO

 CREATE  UNIQUE  INDEX [IX_Events01] ON [dbo].[events]([EventID]) WITH  FILLFACTOR = 90
GO

A gyűjtő script, visual basicben (evtosql.vbs)

Option Explicit
Dim objWMI, colLoggedEvents, strComputer, objItem, cnames, conn, cmd, rs, lasttime

cnames = Array("MSSQLDB01", "MSSQLDB02")

set conn = CreateObject("ADODB.Connection")
set cmd = CreateObject("ADODB.Command")
set rs = CreateObject("ADODB.RecordSet")
conn.Open "DRIVER={SQL Server};SERVER=mssql_szerver;DATABASE=teszt;UID=teszt;PWD=teszt"
set cmd.ActiveConnection = conn

For Each strComputer In cnames

  rs.Open "select ISNULL(MAX(TimeWritten), '2007') as TimeWritten from events where ComputerName = '" & strComputer & "'", conn
  lasttime = rs("TimeWritten")
  rs.Close

  set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
  set colLoggedEvents = objWMI.ExecQuery("Select * from Win32_NTLogEvent where TimeWritten > '" & lasttime & "' and LogFile != 'Security'")

  WScript.Echo "Processing: " & strComputer
  For Each objItem in colLoggedEvents
      cmd.CommandText = "insert into events (RecordNumber, Category, CategoryString, ComputerName, EventCode, EventType, LogFile, Message, SourceName, TimeGenerated, Type, TimeWritten, UserName) values (" & _
      "" & objItem.RecordNumber & ", " & _
      "" & objItem.Category & ", " & _
      "'" & objItem.CategoryString & "', " & _
      "'" & objItem.ComputerName & "', " & _
      "" & objItem.EventCode & ", " & _
      "" & objItem.EventType & ", " & _
      "'" & objItem.LogFile & "', " & _
      "'" & Replace(objItem.Message & " ", "'", """") & "', " & _
      "'" & objItem.SourceName & "', " & _
      "'" & objItem.TimeGenerated & "', " & _
      "'" & objItem.Type & "', " & _
      "'" & objItem.TimeWritten & "', " & _
      "'" & objItem.User & "')"
      cmd.Execute
  Next
  WScript.Echo "Done: " & strComputer

Next

WSCript.Quit

Egy kellemes kis lekérdezés, amit tetszőlegesen lehet szűrni az értékes információért (events.sql)

print ''
print ''
print '~~~~~~~~~'
print 'Esemenyek'
print '~~~~~~~~~'
print ''
declare @day int
set @day = 3
select  SubString(TimeWritten, 1, 4) + '-' + SubString(TimeWritten, 5, 2) + '-' +
        SubString(TimeWritten, 7, 2) + ' ' + SubString(TimeWritten, 9, 2) + ':' +
        SubString(TimeWritten, 11, 2) + ':' + SubString(TimeWritten, 13, 2) [TimeWritten]
       ,SubString(ComputerName, 1, 15) [ComputerName]
       ,SubString(LogFile, 1, 3) [Log]
       ,SubString(SourceName, 1, 20) [SourceName]
       ,SubString(Type, 1, 1) [Type]
       ,SubString(Replace(SubString(Message, 1, 512), char(13)+char(10), ''), 1, 60) [Message]
  from teszt.dbo.events
 where EventType != 3
   and SourceName not in ('W32Time', 'Print')
   and TimeWritten > (Cast(DatePart(yyyy, GetDate()-@day) as varchar(4))
       +CASE
         WHEN DatePart(mm, GetDate()-@day)<10
         THEN '0'+Cast(DatePart(mm, GetDate()-@day) as varchar(4))
         ELSE Cast(DatePart(mm, GetDate()-@day) as varchar(4))
        END
       +CASE
         WHEN DatePart(dd, GetDate()-@day)<10
         THEN '0'+Cast(DatePart(dd, GetDate()-@day) as varchar(4))
         ELSE Cast(DatePart(dd, GetDate()-@day) as varchar(4))
        END)
 order by TimeWritten desc

Egy batch fájl, ami mindent elintéz (evsql.bat)

@echo off
cscript evtosql.vbs
osql -E -s "|" -w 146 -S MSSQL_SZERVER -i events.sql | findstr /v "affec" | findstr /v ">"
echo Vege
pause > nul

Oracle tippek 1.

2007-04-30 17:20:25
Címkék: sql , oracle , database

Szabad hely megállapítása a táblaterekben


Teljes bejegyzés
select f.tablespace_name,
       to_char(sum(f.bytes)/1024/1024, '999G999G999D99')||'M' "FREE",
       to_char(t.bytes/1024/1024, '999G999G999D99')||'M' "TOTAL",
       to_char(sum(f.bytes)/t.bytes*100, '990.99')||'%' "FREE %"
  from dba_free_space f, dba_data_files t
 where f.tablespace_name=t.tablespace_name
 group by f.tablespace_name, t.bytes
 order by 3 desc

Objektumok méreteinek megállapítása

select segment_name
      ,to_char(sum(bytes)/1024/1024, '999G999G999G999') as MB
  from dba_segments
 where owner='SYS'
 group by segment_name
 order by 2 desc;

Cache találati arányok

select to_char((1-(phy.value - lob.value - dir.value)/ses.value)*100, '900') "buffer cache hit ratio"
  from v$sysstat ses, 
       v$sysstat lob, 
       v$sysstat dir, 
       v$sysstat phy
 where ses.name ='session logical reads'
   and dir.name ='physical reads direct'
   and lob.name ='physical reads direct (lob)'
   and phy.name ='physical reads'
select to_char(((sum(gets-getmisses))/sum(gets))*100, '900') "dictionary cache hit ratio" from v$rowcache
select to_char(sum(pins-reloads)/sum(pins)*100, '900') "library cache hit ratio" from v$librarycache

Végrehajtási terv kiírása

explain plan for
select * from dual;
select * from table(dbms_xplan.display());

sqlplusrc az sqlplus-hoz

set lines 156
set pages 50
set colsep |
set long 2000000
set timing on
set time on
set serveroutput on
alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';

col db_name format a14
col host format a14
col terminal format a14
col sessionid format a14
col db_domain format a14
col ip_address format a14

select
sys_context('userenv', 'db_name') db_name,
sys_context('userenv', 'host') host,
sysdate,
sys_context('userenv', 'terminal') terminal,
sys_context('userenv', 'sessionid') sessionid,
sys_context('userenv', 'db_domain') db_domain,
sys_context('userenv', 'ip_address') ip_address
from dual;

Ezek után az sqlplus-t a következőképpen érdemes indítani:

$ sqlplus "/ as sysdba" @sqlplusrc

Hogyan derítsük ki, hogy milyen lekérdezések futnak FULL TABLE SCAN-nel?

select substr(s.sql_text, 1, instr(upper(s.sql_text), upper('from'))+4) as sel, o.name, u.name
-- select 'select '''||o.name||''', count(*) from "'||u.name||'"."'||o.name||'" union all'
  from v$sql s, x$kqlfxpl p, obj$ o, user$ u
 where p.kqlfxpl_oopt = 'FULL' 
   and p.kqlfxpl_oper != 'FIXED TABLE'
   and p.kqlfxpl_phad = s.address
   and o.obj# = p.kqlfxpl_objn
   and u.user# = o.owner#
   and (o.name not like '%$%' 
    and o.name != 'DUAL' 
    and o.name != 'PLAN_TABLE'
    and o.name not like '%SQLPLUS%'
    and o.name not like '%LOGMNR%'
   )
 group by o.name, u.name, substr(s.sql_text, 1, instr(upper(s.sql_text),upper('from'))+4);

Melyik OS processzhez milyen SQL tartozik?

select p.pid,
       p.spid,
       p.username,
       p.program,
       s.sid,
       s.user#,
       s.status,
       s.schemaname,
       s.osuser,
       s.machine,
       s.terminal,
       s.module,
       s.action,
       s.logon_time,
       s.event,
       q.sql_text,
       q.sql_id,
       q.parsing_schema_name,
       q.object_status,
       q.program_id,
       q.last_active_time
  from v$process p
 right join v$session s on p.addr = s.paddr
 right join v$sql q on q.address = s.sql_address
 where p.spid = <OSPID>

MySQL automatikus backup készítés jelszó felfedése nélkül

2007-04-18 23:42:51
Címkék: mysql , backup

Miért fontos ez?

  • egy nagyobb mysql adatbázis dumpja akár órákig is eltarthat, és nem akarjuk, hogy valaki a parancssorba beírt jelszót a 'ps -ef' listában meglássa
  • ha a rendszerünk elég biztonságos, akkor jelszó nélkül nem lehet csatlakozni semmilyen formában az adatbázishoz

Teljes bejegyzés
mysqldump --defaults-file=backup.conf --all-databases=true > backup.sql

backup.conf tartalma:

[client]
user=root
password=jelszo

Itt persze gondoskodni kell arról, hogy a backup.conf-ot csak root jogosultsággal lehessen olvasni.


LVM - logikai lemezkezelés (skicc)

2007-04-15 19:28:33
Címkék: ubuntu , lvm

LVM quick how-to

PV (Physical Volume) - fizikai lemez LV (Logical Volume) - logikai lemez VG (Volume Group) - lemezcsoport


Teljes bejegyzés
# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created

# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created

# vgcreate volumegroup1 /dev/sdb1 /dev/sdb2
  Volume group "volumegroup1" successfully created

# vgchange -a y volumegroup1
  0 logical volume(s) in volume group "volumegroup1" now active

# lvcreate -L100 -nlogicalvolume1 volumegroup1
  Logical volume "logicalvolume1" created

# mkfs.ext3 /dev/volumegroup1/logicalvolume1
# mount /dev/volumegroup1/logicalvolume1 /mnt/extend
# df -h
/dev/mapper/volumegroup1-logicalvolume1     97M  5.6M   87M   7% /mnt/extend
# umount /mnt/extend
# lvextend -L+100 /dev/volumegroup1/logicalvolume1
  Extending logical volume logicalvolume1 to 200.00 MB
  Logical volume logicalvolume1 successfully resized

# resize2fs /dev/volumegroup1/logicalvolume1
resize2fs 1.40-WIP (14-Nov-2006)
Resizing the filesystem on /dev/volumegroup1/logicalvolume1 to 204800 (1k) blocks.
The filesystem on /dev/volumegroup1/logicalvolume1 is now 204800 blocks long.

# mount /dev/volumegroup1/logicalvolume1 /mnt/extend
# df -h
/dev/mapper/volumegroup1-logicalvolume1      194M  5.6M  179M   4% /mnt/extend

# pvdisplay /dev/sdb1
# vgdisplay volumegroup1

Counter Strike 1.6 telepítése Ubuntu 6.06.1-re

2007-04-08 12:15:32
Címkék: counter strike

1. Le kell tölteni a steam installert a hivatalos honlapról

$ wget http://storefront.steampowered.com/download/hldsupdatetool.bin

2. Update-elni kell az installert

(ha 64 bites rendszerre történik a CS telepítése, akkor előtte fel kell tenni egy csomagot: $ apt-get install ia32-libs)


Teljes bejegyzés
$ chmod u+x hldsupdatetool.bin
$ ./hldsupdatetool.bin
Enter 'yes' to accept this agreement, "no" to decline: yes
$ ./steam

3. Le kell töltetni az installerrel a kívánt játékot: Counter Strike (cstrike)

$ ./steam -command update -game cstrike
  (ha az install megállna véletlenül, a parancsot újra kell futtatni)

4. Le kell tölteni a metamod-ot és az amxmodx-et

http://metamod-p.sourceforge.net/ Download Linux i586 binary (metamod-1.19p31-linux-i586.tar.gz)

http://www.amxmodx.org/downloads.php AMX Mod X Base (v1.76d Linux) Counter-Strike Addon (1.76d Linux)

$ cd cstrike
$ mkdir -p addons/metamod
$ cd addons/metamod
$ wget http://switch.dl.sourceforge.net/sourceforge/metamod-p/metamod-1.19p31-linux-i586.tar.gz
$ tar zxf metamod-1.19p31-linux-i586.tar.gz
$ cd ../..
$ wget http://switch.dl.sourceforge.net/sourceforge/amxmodx/amxmodx-1.76d-base.tar.gz
$ wget http://switch.dl.sourceforge.net/sourceforge/amxmodx/amxmodx-1.76d-cstrike.tar.gz
$ tar zxf amxmodx-1.76d-base.tar.gz
$ tar zxf amxmodx-1.76d-cstrike.tar.gz

5. Be kell állítani a CS-t, hogy a metamodot használja a pluginek kezelésére

$ echo linux addons/amxmodx/dlls/amxmodx_mm_i386.so > addons/metamod/plugins.ini

A liblist.gam fájlban a

gamedll_linux "dlls/cs_i386.so"
sort módosítani kell a következőre:
gamedll_linux "addons/metamod/metamod_i386.so"

6. Indítóscript létrehozása

$ cd ..
$ touch startcs
$ chmod a+x startcs
$ echo \#\!/bin/sh >> startcs
$ echo export LD_LIBRARY_PATH=`pwd`:\$LD_LIBRARY_PATH >> startcs
$ echo cd `pwd` >> startcs
$ echo ./hlds_run -debug -game cstrike +log on +map de_aztec +maxplayers 12 >> startcs

7. Counter Strike indítása

$ ./startcs

(esetleg praktikus a 'screen' nevű programból indítani)


A C4nn0N logó

2014-07-26 20:50:32
0

Virtualizálás Xen 4.4-gyel Ubuntu 14.04 alatt (64 bit)

2014-04-30 09:46:38
0

Xen és XenServer előadás

2014-04-17 06:11:00
0

HLDS-V8: Javscripttel programozható HLDS (CS 1.6)

2014-03-15 09:33:53
0

Node.js lazy hibakezelés

2013-08-19 22:08:35
0

Office 2013 animáció kikapcsolása

2013-07-02 08:31:35
1

Node.js ékezetes szövegbevitel konzolból / parancssorból

2013-06-27 07:41:54
0

Egy Counter Strike szerver üzemeltetési tapasztalatai

2013-05-17 14:21:14
0

Hogyan tegyünk grafikus felületet Ubuntu 10.04 Serverre?

2013-05-07 08:19:05
2

Torrent tracker node.js-ben 65 sorban

2013-04-28 10:23:25
0

Hányadik vagyok a Google-ben?

2013-04-24 09:09:01
0

Virtualizálás Xen 4.1-gyel Ubuntu 12.04 alatt (64 bit)

2013-01-22 08:58:15
1

Cloud Backup - Ments a felhőbe

2012-05-02 21:46:13
0

VIP plugin CS 1.6-hoz

2012-04-22 16:35:07
7

Ki az az admin?

2012-03-17 23:45:04
0

Csináltam egy blogot

2011-12-09 15:32:11
2

Az IT szabályozásokról

2009-09-01 17:30:58
0

Twitter - IRC gateway, avagy hogyan twitteljünk irc protokollon

2009-06-05 09:51:47
0

Hogyan lehet blokkolhatatlan hirdetéseket elhelyezni egy weblapon?

2008-10-28 10:56:30
11

Virtualizálás Xen-nel Ubuntu 8.04.1 Server-en

2008-09-04 18:46:02
0

Hogyan tegyünk grafikus felületet Ubuntu 8.04 Serverre?

2008-05-19 20:02:29
0

FAR Manager kedvcsináló I.

2008-05-02 11:41:02
0

Far Manager 1.80 - Open Source

2008-01-04 21:11:19
0

IBM DB2 9.5 Express install Ubuntu 7.10 Serverre

2007-12-19 10:35:03
0

IBM Websphere Application Server 6.1.0.3 Express és WAS Plugin install Ubuntu 7.10 Serverre

2007-12-19 10:33:27
0

Hogyan tegyünk grafikus felületet Ubuntu 7.10 Serverre?

2007-12-11 22:00:17
0

Warezolás, gazemberség?

2007-11-20 21:01:00
0

iSCSI Target és Initiator installálása Ubuntu 6.06.1 LTS-re

2007-10-13 18:23:40
0

Oracle 11g R1 install Ubuntu 6.06.1-re

2007-08-18 14:13:04
0

How to install Oracle 11g R1 on Ubuntu 6.06.1 LTS

2007-08-18 14:13:04
0

Hogyan tegyünk grafikus felületet Ubuntu 6.06.1 Serverre?

2007-08-18 14:09:55
0

Apache2 - WebDAV - Ubuntu 6.06.1 - Windows XP kliens

2007-08-13 19:48:34
0

CVS beállítása Ubuntu 6.06.1-re

2007-05-21 19:39:32
0

IBM DB2 8.2 Express install Debian 4.0-ra (64 bit)

2007-05-15 20:21:33
0

IBM DB2 8.2 Express install Ubuntu 6.06.1-re

2007-05-09 20:47:34
0

Lemez olvasási/írási sebesség tesztelés linux alatt

2007-05-05 20:14:30
0

Oracle Applications tippek 1.

2007-05-03 20:47:55
0

Windows Event Log bedolgozás MSSQL adatbázisba

2007-04-30 21:06:33
0

Oracle tippek 1.

2007-04-30 17:20:25
0

MySQL automatikus backup készítés jelszó felfedése nélkül

2007-04-18 23:42:51
0

LVM - logikai lemezkezelés (skicc)

2007-04-15 19:28:33
0

Counter Strike 1.6 telepítése Ubuntu 6.06.1-re

2007-04-08 12:15:32
0