Sziasztok! Már ideje lenne annak, hogy pár apróságot megosszak veletek, és ne csak titokban magamnak csináljak mindent. Mivel úgy általánosságban fórumunkon a BSD-vel kapcsolatban érhető el a legkevesebb tartalom, ezért e köré fog orientálódni a témám.
Célközönséget nem neveznék meg, kezdőknek mindenképpen ajánlott, a haladóbbak meg lehet megcsinálták már ezt maguknak valamilyen formában, de ha nem akkor nekik is a hasznukra válik.
Még a leírások előtt szeretném hangsúlyozni, hogy az elérési utakat minden esetben nézzétek majd át, mert van esély rá, hogy nektek eltér a leírásban szereplőktől.
(Például van egy teljesen felesleges és szükségtelen "home" mappa az elérésen...)
1. Aliasok
A régi Invoice (instant delete) SF-ekből ismerős lehet, az "mt2 start/stop" és egyéb parancsok, amik segítségével nem kell bogarászni a mappák között, nem kell annyit gépelni, hanem beírunk egy egyszerű szót/szavakat, és már el is indult a szerver, vagy leállt, vagy amit éppen szeretnénk.
Lépjünk fel az ftp szerverre, majd az alapértelmezett könyvtárban (/root) lesz egy .cshrc nevű fájl, ezt nyissuk meg, majd keressük meg ezt a sort:
alias ll ls -lAF
A működése azt hiszem egyértelmű, baloldalt szerepel az aliasunk, ezt kell majd beírni a konzolba, ami meghívja a baloldali parancsot.
Másoljuk be alá az következő sorokat:
[spoiler](Természetesen erre a sémára készíthettek újakat, vagy módosítsátok az aliasok neveit, ha nektek nem szimpatikus)[/spoiler]
alias start "cd /usr/game && sh start.sh"
alias stop "cd /usr/game && sh stop.sh"
alias quest make "cd /usr/game/share/locale/hungary/quest && python make.py"
alias game gmake "cd /usr/src/mainline/Srcs/Server/game/src && gmake -j3"
alias game clean "cd /usr/src/mainline/Srcs/Server/game/src && gmake clean"
alias db gmake "cd /usr/src/mainline/Srcs/Server/db/src && gmake -j3"
alias db clean "cd /usr/src/mainline/Srcs/Server/db/src && gmake clean"
Ha ezzel megvagytok akkor feltétlen ki kell jelentkezni (exit), különben addig nem lépnek életbe a parancsok.
2. Hibás "A szerver elindult" szöveg
Sokunknak szerepel az indító shell fájljának a végén a fenti kifejezés (vagy bármely nemű formája), viszont, ha törik, ha szakad, ez a szöveg akkor is meg fog jelenni, cseppet sem fedi le a valóságot, akkor is megjelenik, ha a szerver valójában nem indult el.
De ha lecserélitek az alábbi parancsra, akkor végre értelmét nyeri a szöveg, mert csak akkor fog megjelenni, ha tényleg elindult a szerver. Ellenkező esetben értesít minket arról, hogy nem fut, és hogy érdemes lenne felkeresni a syserr-eket.
if ps ax | grep -v grep | grep 'game' > /dev/null; then
echo -e "\033[32mA szerver elindult!\033[0m"
else
echo -e "\033[31mA gamefile nem fut!\nEllenorizd a syserr-eket!\033[0m"
fi
3. Forrás másolása a gépre / biztonsági másolat
Gondolom többünk szokta letölteni a szerver forrást a gépére, hogy gyorsan és egyszerűen lehessen keresgélni benne a notepaddal, viszont kicsit macerás mindig letölteni a szükséges fájlokat, hisz sok számunkra felesleges is szerepel közöttük.
Viszont írtam egy egyszerű másoló scriptet, ami egy külön mappába másolatot készít nekünk a szükséges kiterjesztésű fájlokról.
Mindenek előtt ezt írjátok be a konzolba:
cd /usr/src/mainline/Srcs/
mkdir backup
cd backup
mkdir mainline
Tehát az alábbi elérésen lesz majd a mentés:
/usr/src/mainline/Srcs/backup
Az alábbi scriptet pedig másoljátok egy shell (.sh) fájlba:
#!/bin/sh
echo -e "\033[31mEgy pillanat...\033[0m"
rm -rf /usr/src/mainline/Srcs/backup/mainline/
cd /usr/src/mainline/Srcs/backup/
mkdir mainline
cd mainline
mkdir common
mkdir game
mkdir db
cd /usr/src/mainline/Srcs/Server/common/
cp -p *.h /usr/src/mainline/Srcs/backup/mainline/common/
cd ../db/src/
cp -p *.h *.cpp *.py *.txt /usr/src/mainline/Srcs/backup/mainline/db/
cd ../../game/src/
cp -p *.h *.cpp *.py *.txt /usr/src/mainline/Srcs/backup/mainline/game/
echo -e "\033[32mBefejezve!\033[0m"
Ha lefuttatjátok, akkor csak egyszerűen át kell húzni a benne található mainline mappát a gépetekre, és már lehet is használni.
4. Game/db Makefile módosítás
A fordítás után még külön nekünk kell pakolászni a kapott fájlt, ez eléggé lelassítja a tesztelés folyamatát, viszont egy egyszerű megoldással a fordítás utána a szerver magának teszi a megfelelő helyre a fájlunkat.
Nyissátok meg a game Make fájlját, majd a teteje felé ez alá:
OBJDIR = OBJDIR
Másoljátok be a következő sort:
GAMEDIR = /usr/game/share
Ezután keressetek a "linking" szóra, alatta ezt fogjátok látni:
@$(CC) $(CFLAGS) $(LIBDIR) $(COBJS) $(CPPOBJS) $(MAINOBJ) $(LIBS) -o $(TARGET)
És alá másoljátok be ezt:
(A tabra ügyeljetek!)
@echo strip $(TARGET)...
@strip $(TARGET)
@echo moving $(TARGET) to $(GAMEDIR)
@mv $(TARGET) $(GAMEDIR)
@echo -e "\033[32mGamefile kesz!\033[0m"
Így stripelve is lesz, ha ezt nem szeretnétek akkor a felső két sort töröljétek ki.
DB esetén erre keressetek rá erre:
OBJDIR = .obj
És alá másoljátok be a következő sort:
DBDIR = /usr/game/share
Ezután keressetek a "linking" szóra, alatta ezt fogjátok látni:
@$(CC) $(CFLAGS) $(LIBDIR) $(OBJS) $(LIBS) -o $(TARGET)
És ezt másoljátok be alá:
@echo strip $(TARGET)...
@strip $(TARGET)
@echo moving $(TARGET) to $(DBDIR)
@mv $(TARGET) $(DBDIR)
@echo -e "\033[32mDB kesz!\033[0m"
A tabra és a stripelésre természetesen itt is az vonatkozik, amit a game-nél leírtam.
5. Egyszerűsített Starter
Gondolom ismerős nektek is, hogy egy start.sh könnyen meghaladja a több száz sort, főleg akkor, ha több magra vannak osztva a CH-k. Én viszont röviden, tömören egybeépítettem ezeket, semmilyen felesleges ismétlődés nincs benne, így egyrészt sokkal egyszerűbb, másrészt sokkal rövidebb lett az egész.
Sőt! Még egy bónusz funkcióval is rendelkezik, indítás után a neve után meg tudjátok adni, hogy mennyi CH-t szeretnétek elindítani. Például: sh start.sh 2 így csak 2 CH indul el.
Ezenkívül betudjátok állítani az alapértelmezett értéket, szóval ha csak simán elindítjátok, akkor ne kelljen mögé számot írni. Ezt a 16. sorban tudjátok módosítani.
Tehát (ha használjátok az első pontban leírtakat, akkor csak simplán) start a konzolba, mindegy melyik mappában álltok, és már indul is 4 CH.
Fontos!
A starter tartalmazza 2. pontban leírtakat is, továbbá komment formájában a második magok elindítását is. Ha szükségetek van rá, csak töröljétek ki a kommentet előlük.
Az egészet értelemszerűen tudjátok bővíteni.
#!/bin/sh
clear
echo -e "\033[33m\nDB inditasa...\033[0m"
cd /usr/game
cd db && ./database &
sleep 7
clear
echo -e "\033[33m\nAuth inditasa...\033[0m"
cd auth && ./auth &
sleep 5
ch=$1
if [ "$ch" == "" ]; then
ch=4
fi
if [ $ch -ge 1 ]; then
clear
echo -e "\033[33m\nCH1 inditasa...\033[0m"
cd channel1 && ./ch1 &
sleep 5
# clear
# echo -e "\033[33m\nCH1_2 inditasa...\033[0m"
# cd channel1_2 && ./ch1_2 &
# sleep 5
fi
if [ $ch -ge 2 ]; then
clear
echo -e "\033[33m\nCH2 inditasa...\033[0m"
cd channel2 && ./ch2 &
sleep 5
# clear
# echo -e "\033[33m\nCH2_2 inditasa...\033[0m"
# cd channel2_2 && ./ch2_2 &
# sleep 5
fi
if [ $ch -ge 3 ]; then
clear
echo -e "\033[33m\nCH3 inditasa...\033[0m"
cd channel3 && ./ch3 &
sleep 5
# clear
# echo -e "\033[33m\nCH3_2 inditasa...\033[0m"
# cd channel3_2 && ./ch3_2 &
# sleep 5
fi
if [ $ch -ge 4 ]; then
clear
echo -e "\033[33m\nCH4 inditasa...\033[0m"
cd channel4 && ./ch4 &
sleep 5
# clear
# echo -e "\033[33m\nCH4_2 inditasa...\033[0m"
# cd channel4_2 && ./ch4_2 &
# sleep 5
fi
clear
echo -e "\033[33m\nCH99 inditasa...\033[0m"
cd channel99 && ./ch99 &
sleep 5
clear
if ps ax | grep -v grep | grep 'game' > /dev/null; then
echo -e "\033[32mA szerver elindult!\033[0m"
else
echo -e "\033[31mA gamefile nem fut!\nEllenorizd a syserr-eket!\033[0m"
fi
Nos, egyelőre ennyit szerettem volna megosztani veletek. Azt hiszem sikerült mindent érthetően leírnom, de ha esetleg valami mégsem világos, akkor nyugodtan keressetek meg privát üzenetben.
A téma létrejöttét illetően Feco (http://metin2hungary.net/index.php?action=profile;u=56561)t is köszönet illeti, hisz amikor még kezdő voltam, akkor ezek közül pár dolgot ő mutatott meg nekem.
Szerk.:
- A 3. pont scriptjét kicsit szépítettem.
- A 4. pont leírása kicsit pontosítva.
- Egyszerűsített Starter hozzáadva.