Linux-haladó

[MEGOLDVA] rrdtool NaN értékek

Fórumok

Hali,

Egy mikrovezérlős áramkörre van kötve 2x DS18S20 as hőszenzor. Egy bash szkript le is kérdezi az aktuális hőmérséklet értékeket.
Az echo $TEMPERATURE -ra visszakapott értékek a következő formátumban jelennek meg :

20.31:-0.63

rrdtool al szeretném grafikonon ábrázolni a negativ értékeket is, mert az mrtg alapból nem képes rá.

Az adatbázist így hoztam létre :
rrdtool create bentikinti.rrd DS:benti:GAUGE:60:-500.00:500.00 DS:kinti:GAUGE:60:-500.00:500.00 RRA:AVERAGE:0.3:1:10

rrdtool update N:$TEMPERATURE

itt már elakad a dolog ha lekérdezem :

rrdtool info bentikinti.rrd
filename = "bentikinti.rrd"
rrd_version = "0003"
step = 300
last_update = 1329125173
header_size = 860
ds[benti].index = 0
ds[benti].type = "GAUGE"
ds[benti].minimal_heartbeat = 60
ds[benti].min = -5,0000000000e+02
ds[benti].max = 5,0000000000e+02
ds[benti].last_ds = "20.31"
ds[benti].value = 3,9110560800e+02
ds[benti].unknown_sec = 54
ds[kinti].index = 1
ds[kinti].type = "GAUGE"
ds[kinti].minimal_heartbeat = 60
ds[kinti].min = -5,0000000000e+02
ds[kinti].max = 5,0000000000e+02
ds[kinti].last_ds = "-0.63"
ds[kinti].value = -1,0955335370e+01
ds[kinti].unknown_sec = 54
rra[0].cf = "AVERAGE"
rra[0].rows = 10
rra[0].cur_row = 4
rra[0].pdp_per_row = 1
rra[0].xff = 3,0000000000e-01
rra[0].cdp_prep[0].value = NaN
rra[0].cdp_prep[0].unknown_datapoints = 0
rra[0].cdp_prep[1].value = NaN
rra[0].cdp_prep[1].unknown_datapoints = 0

Ezzel a kimenettel ugye egy üres grafikont kapok, mert valamiért NAN értékeim vannak.
Mi lehet a probléma ? Próbáltam a min / max értékekkel babrálni de nem segített.

rrdtool fetch esetén csak NaN értékek szerepelnek az adatbázisban.

dhcp+tftp+pxe boot - sebesség növelése?

Fórumok

Sziasztok,

nem teljesen Linux specifikus ugyan, de a legtöbb releváns (PXE, TFTP) találatot itt találtam.

HP Blade-ek telepítéséhez használnék EDA vagy UDA appliance-okat, ezek mindegyike egy vSphere4.1-en futó VM, Ubuntu/Centos OS, 1vcpu, némi ram, hálókártya. Az elv mindig hasonló, dhcp szerver fut tftpd boot pxe-vel. A gond a sebesség, a max amit el tudtam érni az kb. 800kbps ami nonszensz, tekintve hogy 10G-s és 2.5G-re konfigolt kapcsolatok vannak.

A konkért kérdés hogy milyen dhcpd/tftpd/pxe opciókkal lehetne gyorsítani? Próbálkoztam a --B -blocksize xyz opciókkal tftpd-hpa.conf-ban és option blksize xyz + option interface-mtu opciókkal a dhcpd.conf-ban, de valahogy nem sikerült megtalálni a helyes kombinációt. Igazából megállapítani se sikerült hogy az adott opció működik-e vagy hogy jó-e a szintakszis amit használtam.

Minden tippet/linket előre is köszönök!

[Megoldva] Párhuzamos folyamatok bash-ben

Fórumok

Tekintsük az alábbi bash kódrészletet:


cd "$tempdir"
ls -1 | (
    for ((i=0; i<cores; i++)); do
        pids[i]=0
    done
    count=0                             # DEBUG
    EXEC='pnmtopng'
    while read; do
        if [ -f "$REPLY" -a -r "$REPLY" ]; then
            while :; do
                found=0
                for ((i=0; i<cores; i++)); do
                    if [ ${pids[i]} -eq 0 ]; then
                        found=1
                        break
                    # elif [ x"`ps -p${pids[i]} -o comm=`" != x"$EXEC" ]; then
                    elif ! pgrep -x "$EXEC" | grep -q "^${pids[i]}\$"; then
                        echo -e "pids[$i]=${pids[i]}\t:\t`ps -p${pids[i]} -o comm=`,\tEXEC=$EXEC"
                        pids[i]=0
                        found=1
                        break
                    fi
                done
                if [ $found -eq 1 ]; then
                    break
                else
                    sleep 0.2
                fi
            done
            "$EXEC" "$REPLY" >"$imagesdir/${REPLY%.*}.png" & pids[i]=$!
            ((count2+=suly2))
            ((count++))         # DEBUG
            echo -ne "\r$[count1/max1+count2/max2] %\t\t"
        fi
    done
    wait
    echo -e "\r100 %\t\t"
    echo "count=$count"         # DEBUG
)

A kimenet itt látható.

Az elképzelés szerint egy filelistát pipe-olok egy subshell-be, ott inicializálok egy tömböt, amely annyi elemű, ahány magos a CPU, jelenleg ez 4. A tömbben a 0 azt jelenti, hogy ehhez nem tartozik futó process. Egy ciklusban végigmegyek a tömbön, ha találok benne 0-t, akkor kilépek. Ha nem 0 a pids[i], akkor megnézem, az adott pidhez tartozóan fut-e process, s annak neve az-e, amelyet én indítottam. Ha a név más, az csak úgy lehet, hogy időközben felszabadult ez a pid, s a kernel kiosztotta egy egészen más process-nek, ezért ellenőrzöm a nevet. Ha ez történt, bejegyzem, a tömbbe, hogy felszabadult a pid, s kilépek a ciklusból. Meg persze kiírok egy debug sort: a pids[i], a hozzá tartozó név - ez üres, ha nem került megint kiosztásra az adott pid a programomtól független folyamat által.

Ezután, ha mind a 4 pid valós, általam indított, élő programra hivatkozik, várok 200 ms-ot, majd pollingolom újra, befejezte-e valamelyik folyamat a működést. Amennyiben valamelyik pid már kihalt - found=1 -, úgy kilépek a látszólag végtelen while ciklusból egy break-kel, s indítom a megfelelő paraméterekkel a következő konverziót a háttérben, a pid-jét pedig tárolom a tömb felszabadult helyére: pids[i]=$! .

Mindösszesen ennyi lenne az egész, nem bonyolult. Ennek fényében a kimeneten látszik, hogy ahol a kettőspont utáni tabulátorokat követően csak vessző van, ott jól működik, ugyanakkor van, ahol pdf2png-t mond a ps -p${pids[i]} -o comm= kimenete. Azt tudni kell, hogy a pdf2png a saját scriptem neve, tehát lényegében a basename "$0".

További furcsaság, hogy amikor meghülyül, a pidek 4-esével, 8-asával vagy 10-esével követik egymást szabályosan, s mindig ugyanazon i indexhez tartozóan.

Vagy valamit nagyon rosszul csinálok, vagy van egy bug a bash-ben, vagy a $! néha hülyeséget ad vissza, de akkor sem lehet, hogy 10-esével növekvő pid-del úgy gondolja, az a saját shell-em.

Nem értem. Ha valakinek van jó ötlete, jelezze!

~/.local ~/.config ~/.cache ~/.kde4 stb.

Fórumok

Sziasztok!

Néhány kérdést szeretnék feltenni a címben szereplő könyvtárakkal kapcsolatban. Arról van szó, ugyebár, hogy sok program ezekbe a könyvtárakba rak mindenféle adatokat, pl. gyorsítótára-tartalmat a ~/.cache-be, ikonokat a ~/.local/share/inconsba, .desktop fájlokat a ~/.local/share/applications-be, konfigurációt a ~/.configba, stb.

Azt szeretném megkérdezni, hogy ezt csak valami szabványnak vagy konvenciónak eleget téve "manuálisan" valósítják meg a programozók, vagy vannak olyan függvénykönyvtárak, amelyek absztrahálják, és a programok számára kikényszerítik ezt a viselkedést.

A ~/.kde4 könyvtárral és alkönyvtáraival kapcsolatban pontosan ugyanezt szeretném kérdezni, bár szinte biztos vagyok benne, hogy a KDE libjei kikényszerítik és szabványosítják az ott tárolt konfigurációk és egyéb fájlok használatát. Jól gondolom?

BACKUP script hiba

Fórumok

Sziasztok, egy kis segítséget szeretnék kérni van egy backup scriptem és hibásan csomagolja a fájlokat, mar többször átnéztem de nem találom a hibát, csinál egy xy.gz csomagot de a tartalma mar nem elérhető.

#!/bin/bash
# Shell script to backup MySql database and clients websites

# Database credentials. Use a DB user with full read access or use the root user
ispUSER="root" # DB user
ispPASS="---yourpass---" # user's password
ispHOST="localhost" # Hostname

CURDIR="$(pwd)"
# Variables with full path to binaries
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
GZIP="$(which gzip)"
TAR="$(which tar)"

# Your Server's Main Backup Directory
DEST="/var/backup"

# Sites (ONLY) backup directory in your Main Backup Directory
SITES="$DEST/sites"

# Variables for Dates in yymmdd format
TODAY=`date +%Y%0m%0d`
YESTERDAY=`date -d '1 day ago' +%Y%0m%0d`
BACK2=`date -d '2 day ago' +%Y%0m%0d`
BACK3=`date -d '3 day ago' +%Y%0m%0d`
BACK22=`date -d '22 day ago' +%Y%0m%0d`

[ ! -d $SITES ] && mkdir -p $SITES || :

# Give Only root access to backups in this scripts folders
$CHOWN 0.0 -R $SITES
$CHMOD 0600 $SITES

# --------------------------------------------------------------------------
# Remove previous (current) backups of the client directory
# The backups are in the form :
# *BU*gz
# -------- CAUTION ---------
# Do not store any other file in this form in the clients directory
# --------------------------------------------------------------------------
echo "-------------------------------------------------------------"

QRY="use dbispconfig; SELECT web_domain.system_user, web_domain.system_group, \
web_domain.document_root, web_domain.domain FROM web_domain WHERE \
web_domain.type!='alias' AND web_domain.system_user IS NOT NULL AND (LENGTH(web_domain.redirect_path)<5 OR web_domain.redirect_path IS NULL) ;"

echo $QRY | mysql -u $ispUSER -h $ispHOST -p$ispPASS | while read -r line
do # ${col[0]}=domain user / folder name / system user, ${col[1]}=clientID / system group ,
while read -a col # ${col[2]}=path to website, ${col[3]}= domain name
do
echo " CLEANING OLD BACKUPS in ${col[2]} folder "
for delfile in ${col[2]}/*BU*gz ;
do [ -f $delfile ] && rm $delfile;
done
done
done

# --------------------------------------------------------------------------
# Remove anything that is 22 days old and have the form :
# *[date 22 days old]*gz
# from server's $SITES directory
# --------------------------------------------------------------------------
echo "-------------------------------------------------------------"
echo " CLEANING OLD BACKUPS in SITES folder "
for delfile in $SITES/*$BACK22*gz ;
do [ -f $delfile ] && rm $delfile;
done
echo "-------------------------------------------------------------"
echo " "
echo " "

# --------------------------------------------------------------------------
# For each client, backup his database in his website folder
# For client with multiple sites backup all dbs in his first site
# Furthermore copy today's backup in the server's $SITES directory
# Remove the backup that is older than 3 days from server's $SITES directory
# Keep the last 3 Sundays
# --------------------------------------------------------------------------

QRY="use dbispconfig; SELECT web_database.database_name , web_database.database_user ,\
min(web_domain.system_user) as muser, web_domain.system_group, min(web_domain.document_root) as mpath, \
web_domain.domain FROM web_database, web_domain WHERE web_database.sys_userid=web_domain.sys_userid \
AND web_database.sys_groupid=web_domain.sys_groupid AND web_domain.type='vhost' \
AND web_domain.system_user IS NOT NULL AND (LENGTH(web_domain.redirect_path)<5 OR web_domain.redirect_path IS NULL) \
GROUP BY web_database.database_name , web_database.database_user, web_domain.system_group;"

echo $QRY | mysql -u $ispUSER -h $ispHOST -p$ispPASS | while read -r line
do # ${col[0]} = dbname, ${col[1]}=dbuser , ${col[2]}=domain user / folder name / system user,
while read -a col #${col[3]}=clientID / system group , ${col[4]}=path to website
do
echo " DB: "${col[0]}
echo "-------------------------------------------------------------"
echo "Backing Up DB:" ${col[0]} "in :" ${col[4]}/${col[0]}BU.gz
$MYSQLDUMP -u $ispUSER -h $ispHOST -p$ispPASS -c --add-drop-table --add-locks \
--all --quick --lock-tables ${col[0]} | $GZIP -9 > ${col[4]}/${col[0]}BU.gz
cp ${col[4]}/${col[0]}BU.gz $SITES/${col[0]}.$TODAY.gz
if [ `date -d '3 day ago' +%u` -ne 7 ] # if 3 days ago is not Sunday
then #remove the backup
[ -f $SITES/${col[0]}.$BACK3.gz ] && rm $SITES/${col[0]}.$BACK3.gz
fi
$CHOWN ${col[2]}:${col[3]} ${col[4]}/${col[0]}BU.gz
$CHMOD 0660 ${col[4]}/${col[0]}BU.gz
echo "-------------------------------------------------------------"
echo " "

done
done

# --------------------------------------------------------------------------
# For each client, backup his sites in his website folder
# Furthermore copy today's backup in the server's $SITES directory
# Remove the backup that is older than 3 days from server's $SITES diriectory
# Keep the last 3 Sundays
# --------------------------------------------------------------------------

QRY="use dbispconfig; SELECT web_domain.system_user, web_domain.system_group,\
web_domain.document_root, web_domain.domain FROM web_domain WHERE \
web_domain.type!='alias' AND web_domain.system_user \
IS NOT NULL AND (LENGTH(web_domain.redirect_path)<5 OR web_domain.redirect_path IS NULL) ;"

echo $QRY | mysql -u $ispUSER -h $ispHOST -p$ispPASS | while read -r line
do # ${col[0]}=domain user / folder name / system user, ${col[1]}=clientID / system group ,
while read -a col # ${col[2]}=path to website, ${col[3]}= domain name
do
echo " "
echo " Site:" ${col[3]}
echo "-------------------------------------------------------------"
echo "Backing Up site: " ${col[2]}/ "in :" ${col[2]}/${col[3]}BU.tar.gz
cd ${col[2]}
sudo -u ${col[0]} $TAR -czf ${col[2]}/${col[3]}BU.tar.gz .
cp ${col[2]}/${col[3]}BU.tar.gz $SITES/${col[3]}.$TODAY.tar.gz
if [ `date -d '3 day ago' +%u` -ne 7 ] # if 3 days ago is not Sunday
then #remove the backup
[ -f $SITES/${col[3]}.$BACK3.tar.gz ] && rm $SITES/${col[3]}.$BACK3.tar.gz
fi
$CHOWN ${col[0]}:${col[1]} ${col[2]}/${col[3]}BU.tar.gz
$CHMOD 0660 ${col[2]}/${col[3]}BU.tar.gz

echo "-------------------------------------------------------------"
echo " "
done
done
cd $CURDIR

Forrás ip cím

Fórumok

Ha van egy interface-en több ip cím is, pl eth0 10.1.1.1/24 eth0:0 10.1.2.1/24 eth0:1 10.1.3.1/24, akkor hogy tudom azt megadni, hogy egyes esetekben melyik forrás címet használja?

[megoldva] Cod2 webinterface

Fórumok

Sziasztok!

Cod2-höz keresek valami webinterface-t, olyat ami kijelzi, hogy éppen hányan vannak fent, megy-e a szerver-e vagy nem, esetleg milyen pálya fut, talán, hogy kik vannak fent, bár utóbbi nem fontos. Tud valaki segíteni? Vagy ha nem, esetleg van lehetőség arra, hogy kinyerjem valahogy (bash scripttel pl.) hogy hányan vannak fent?

Természetesen linuxos cod2 szerverről van szó.

A szerver:
Distributor ID: Ubuntu
Description: Ubuntu 10.04.3 LTS
Release: 10.04
Codename: lucid

[ Megoldás ]

http://www.gametracker.com/

software RAID + LVM + EFI + Grub = tanácstalanság

Fórumok

Hello!

Adva van egy alaplap (AsusE35M1-M)ami EFI-vel bootol.
A terv az, hogy Ubuntu szerver legyen rajta úgy, hogy a diszkek szoftver RAID1-ben, ennek a tetején LVM, majd mindenféle partíciók a logikai volume-okon.
Azt már sikerült elérni, hogy pendrive-ről bootolva fel tudom tenni az operációs rendszert, de az nem jelenik meg az EFI-ben, csak a diszkek, amiről nem tudok bootolni. (Nem talál oprendszert.)
Próbáltam GPT-vel a RAID alatt és EFI volume-mal az LVM tetején valamint ugyanez msdos particiós sémával is. A grub felment majd nem bootolt róla.
A Google-lel és Wikivel barátkoztam jó sokat, de még nibcs eredmény.

Mit tud a kollektív bölcsesség a témáról?

Olyat nem szeretnék, ha a boot partíció nem lenne tükrözve.
Esetleg a particionált RAID1 lenne a nyerő?

Linux fájlrendszerek és hibernáció

Fórumok

Sziasztok!

Néhány kérdést szeretnék feltenni Linux backupokkal kapcsolatban:

-Amikor lemezre hibernálja magát a Linux, milyen állapotban vannak a fájlrendszerei? A bonyolultabb programcsomagok, pl. adatbázisszerverek nyilván inkonzisztens állapotban hagyják a fájljaikat hibernáláskor, de legalább a fájlrendszer lemountolt állapotba kerül e az s2disk végrehajtásakor, hogy legalább egy snapshotot lehessen készíteni róla backupoláshoz?

-GNU tar-nak van-e olyan verziója, ami elmenti az extended attribútumokat (man 5 attr), vagy legalább a posix acl-eket? (vagy van-e olyan másik backup eszköz, ami képes egyszerre extended attribútumokat menteni és inkrementális backupokat készíteni)?

-Az előző kérdéshez kapcsolódva: ext3-hogy vagy ext4-hez van-e olyan dump program, ami inkrementális mentést tud csinálni?

Kernel MCE panic

Fórumok

Sziasztok,

Nem nagyon jutok előrébb egy probléma megoldásában felteszem hát itt a kérdést hátha tudja valaki a megoldást... és közösen okulhatunk.

1., adott 3 darab Dell PE1900 gép
2., a gépek 2.6.32.32-es kernellel (grsec+drbd) gond nélkül működtek
3., a kernel frissítve lett 2.6.32.48 majd 50, 52, 54 verziókra (grsec + drbd)

Az újabb kernelekkel folyamatos para van, Machine Check Exception van. A gépek teljesen véletleszerűen megdöglenek (akkor is ha semmi terhelés nincs rajtuk).
A RAC logjában az újabb kernelekkel megjelenik a CPU bus parity error es Machince Check Exception hiba bejegyzések (csak az újabb kernelekkel). Az az érdekes, hogy más gépeken is fut ez a kernel mindenféle probléma nélkül (Nem Dell gépek).
Az egyik képen a drbd be sincs kapcsolva mert ott nincs rá szükség, tehét ezt kizártam mint hiba forrás.
A grsec más gépeken megy, tehát nem hiszem, hogy ez okozná.
A kernel changelog-ot átnézetem a 32-es verziótól én nem látok olyan jellegű módosítást ami ezt okozná.
A hardver hibát azért zárnám ki mert egyszerre jelentkezett mindhárom gépen és csak akkor ha az újabb kernellel fut (valamint forumon találtam ilyen problémát Windows Server-rel és ott is szoftveres gond volt).

A pánikról shot itt látható: http://zsalab.ironcube.info/pacrash20120206.jpg

Az mcelog semmit sem segít.

Ha van valakinek ötlete, vagy esetleg már látott is ilyet akkor ossza meg velem.