BSD scriptek

Indította [VIP]Rin the Exorcist, 2016-08-24, 12:11:50

2016-08-24, 12:11:50 Utolsó szerkesztés: 2017-07-19, 20:16:03 Szerző: Rin the Exorcist
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 Fecot 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.
"Tisztelet a kivételnek! Mindig tisztelet a kivételnek!"
"KezdÅ' vagyok, ne nézz le... (:"