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.
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.
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.
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ó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.
... 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.
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.
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.
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.
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 &
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.
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?
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.
Í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álató 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')
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.
A csomag tartalma tehát:
A fájlokat feltöltöttem githubra: https://github.com/deejayy/google-position-check
Pontszám: a kisebb jobb
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
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
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
root@ub12:~# mkdir virthdd
root@ub12:~/virthdd# mount /dev/vg01/virt-os .
root@ub12:~/virthdd# debootstrap precise .
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
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
A Google bejelentette a Google Drive-ot, sok-sok gigabyte tárolóhely 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ó.
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!
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:
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 inkrement kb. 800 MB, ez viszonylag fájdalommentesen szinkronizálható a (felfelé) 25 MBites internet kapcsolaton.
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/
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.
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
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)
Ebben a bejegyzésben a Counter-Strike 1.6 nevű játékról lesz szó.
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.
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 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ánvezé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.
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.
Ú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).
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.
Akkor lássuk mit tud most (avagy Update 0):
What's next?
Update 1:
plusz mezők db-ben:
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:
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.
Update 4:
Update 5:
Update 6:
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:
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.
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.
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 motíválni, hogy munkaidőben dolgozzon, legalább az elvárható mennyiséget. Ki így, ki úgy teszi ezt.
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.
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.
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:
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".
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.
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ámonké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.
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.
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..."
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.
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 parancssal 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 twitet, 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 twitek további sorai a státuszablakba íródnak; ha lefetcheli az újabb twiteket, 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.
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.
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 Twitek 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 twitek, illetve csak ki-be lépéssel oldható meg a probléma.
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).
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.
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 reklámok szűrhetelenségére az alább felsorolt megoldásokat látom reálisnak.
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 wegboldal-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 efö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.
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.
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.
Felsorolok néhány példát, hogy hogyan nem szabad:
Ha valaki a fent felsoroltak bármelyikét alkalmazni akarja, előtt 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.
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:
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 parítá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 paríticó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 konfigfá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:
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
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 &
Azok, akik még nem ismerik a FAR (File and ARchive) Manager-t, azoknak most bemutatnám egy rövid bejegyzés erejéig.
Saját profilomat tekintve szoftverfejlesztő lennék, szeretem a számokat és tényeket, konkrét dolgokat, adatokat.
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.
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.
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 testreszabni, 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áljlokat 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, tradícioná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, cimké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.
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:
A fájlkezelő felülete igen praktikus és - természetesen - teljesen testreszabható. 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ő.
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:
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.
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 ottvan.
Elérhetőség: http://www.farmanager.com/
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
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:
# apt-get install libstdc++5 libaio1
# tar zxfv db2exc_950_LNX_x86.tar.gz
# cd exp
# ./db2setup
További teendők képekben.
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).
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
(A telepítést a grafikus felületen kell végezni.)
# cd WAS/
# ./install
A további lépések a screenshotokban: klikk.
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
(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 :)
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:
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.
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).
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:
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.
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.
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.
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.
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.
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.
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...
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 ...
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:
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.
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ő.
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?
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ó.
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".
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).
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ő.
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.
É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.
This article is available in english.
# 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
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
Grafikus felületen:
# xhost +
# su - oracle
$ export DISPLAY=:1
$ cd /oracle/databases
$ ./runInstaller
# 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 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
On the X11:
# xhost +
# su - oracle
$ export DISPLAY=:1
$ cd /oracle/databases
$ ./runInstaller
Egyszerű, és csak 47.5MB-nyi csomagot kell letölteni:
# 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!
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)
# apt-get -f -y install apache2 libapache2-mod-encoding
# ln -s /etc/apache2/mods-available/{dav*,encoding*,headers*} /etc/apache2/mods-enabled/
/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>
# htpasswd -d -c /etc/apache2/.davpw felh
# chown root.www-data /etc/apache2/.davpw
# chmod 640 /etc/apache2/.davpw
# mkdir /var/www/dav
# chown www-data.www-data /var/www/dav
# /etc/init.d/apache2 restart
# htpasswd -d /etc/apache2/.davpw ujfelh
CVS - Concurrent Versions System (Wiki)
# 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
# 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
# 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
$ hdparm --direct -t /dev/sdc
$ hdparm -t /dev/sdc
$ hdparm --direct -T /dev/sdc
$ hdparm -T /dev/sdc
$ 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 -t 20 -D /store/bench 100
$ dbench -t 20 -s -D /store/bench 100
$ iozone -a -b ioz.xls -g 256m -n 128m -r 256k -s 256m
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
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;
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
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';
select application_short_name, patch_level
from fnd_product_installations i, fnd_application a
where a.application_id = i.application_id
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;
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.
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
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
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
@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
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
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;
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
explain plan for
select * from dual;
select * from table(dbms_xplan.display());
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
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);
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>
Miért fontos ez?
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.
PV (Physical Volume) - fizikai lemez LV (Logical Volume) - logikai lemez VG (Volume Group) - lemezcsoport
# 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
$ wget http://storefront.steampowered.com/download/hldsupdatetool.bin
(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)
$ chmod u+x hldsupdatetool.bin
$ ./hldsupdatetool.bin
Enter 'yes' to accept this agreement, "no" to decline: yes
$ ./steam
$ ./steam -command update -game cstrike
(ha az install megállna véletlenül, a parancsot újra kell futtatni)
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
$ 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"
$ 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
$ ./startcs
(esetleg praktikus a 'screen' nevű programból indítani)