Около половин година след последния ми анонс по Dreambox monitoring ситестемата ми мога да анонсирам новата и вероятно някоя от последните си версии на Nuki. Версията беше готова още преди 2 месеца но къде от мързел къде заради дебъгване нещата се позабавиха с анонса. От няколко дни работи на 32 dreambox 500-s и общо взето резултатите са много добри. Промените са многопремахната е идиотската звисимост от Linux server на които да се прехвърлят логоветевече е необходимо да имате apache + php, защото новата система за писане на логове е като се подава параметри към един php скрипт на сървъра. Отделно съм променил скрипта да работи и без сървърна частако имате малко сателитни приемници не е смислено да имате постоянно пуснат сървър от които да се взима инфото затова може да се нанесе хардкоднато в скрипта с 2 променливи информацията за CAM-а. Също така съм декларирал допълнителна променлива за debugако не искате няма да ви мята логовеотново малоумен пропуск в сравнение с преди 🙂 Леки поправики по кода бяха напревени, че приличаше като писан от полуграмотен олигофрен (не че несъм де). Остране ни бяха 2 критични грешки в кода водещи до прекратяване на работа на скрипта в някакъв случаен момент, отново олигофренски пропуски от моя страна. Общо взето писането не беше много просто трябваше да се помисли да се направи като хората, че busybox и ash не са най лесни неща за опитомяване. Тоя път мисля да спестя голямата тирада с кода и направо да обясня променливите коя за какво е и какви манипулации могат да се направят с нея (новите) 🙂

SERVER="192.168.100.1"
 STANDALONE="FALSE" #using like stand alone app no server side depends ; )
 HCAM1="" ## if starting like stand alone app give me CAM namezzz if HCAM1 is empty its means chanel is free
 HCAM2="" ## CAM2 name
 PORT="666" # port rockzzz : D : )))))))))))))))))
 IP=$(ifconfig eth0 | grep inet | awk '{print $2}' | sed -e '[email protected]:@@')
 FILE='/tmp/debug'
 INFO='/tmp/info_file'
 NC=$(which nc)
 WGET=$(which wget)
 MAX_DAYS="10"
 TIMEOUT="600"
 MAX=70 #max cpu usage per process
DEBUGING="TRUE" #if u wanna script send debug information set DEBUGING to TRUE if SEVERLESS is set to true this var will be skiped
 NEWDBGSTYLE="TRUE" #debuging new style sending info to apache derectly, old style using nc

Така очевидно имената на променливити говорят сами за себе си достатъчно но все пак и аз да кажа някоя и друга умна дума.

STANDALONE е една от най важните променливи ако е сетната на TRUE няма да се правят обръщения към сървъра и няма да изисква вече зависимост от сървър ако я използвате трябва да сложите стойности и на следната HCAM1 (незнам защо съм я кръстил така не помня вече но няма и значение). Ако няма стоиност в нея а скритпа е самостоятелен скрипта приема че ще работи на некриптиран канал и няма прави проверка за декриптиращ модул, ако има ще провери според зададената стоиност. HCAM2 е незадължителна ако декодиращия ви модул използва само 1 процес да речем CCcam например.

DEBUGING втората интересна променлива ще ви прлюе информация или ще пази мълчание според зависи каква стойност сте забили. Авотматично преминава в тих режи ако STANDALONE е TRUE

NEWDBGSTYLE трата важна променлива. Тя определя как ще се прехвърлят логовете към сървъра. Ако е TRUE ще е по новия начин без идиостката зависимост от netcat. Ако все пак си държите на стария метод слагате FALSE. В общи линии това са нещата на които трябва да наблегнете но мисля, че промените въпреки че са кардинални ще останат една идея прозрачни заради зададените стойности по подразбиране 🙂

Определено вече съм много доволен как се получиха нещатаскрипта стана достатъчно гъвкав отпднаха идиотките зависимост на допълнителни файлове за функции както и вече отпдна и зависимост на nc мисля или пък нуждата от сървър и прочие не всеки ползва 30+ box-a че да има и сървър или пък може да има само някакъв домаше router. Все още има какво да се подобри но засега мисля да се въздържам от таквиа неща защото не е наложително 🙂

Файловете както обикновено се намират в директорията а крипта за въвеждане на логовете може да свалите от тук

И по случай добрия скрипт едно ускорено парче за всички ускорители 😀

Enhanced by Zemanta

Lähes vuoden en ollut työskennellyt minun demoni Kävi koulua NUKI. Minulla on tänään vähän aikaa korjata asioita, koska oli paljon asioita, jotka eivät olleet aivan oikeassa.. Lisäsin hieman uusia toimintoja. Järjestin koodin uudelleen., Enemmän ominaisuuksia niin olen lyhentää sitä ja tuli enemmän.

Tärkein uusi toiminnallisuus, että laitoin on signaalin ansa. Jossain vaiheessa sen kehruu demoni Dreambox vastaanotin päättää tappaa sen ja siten se henget seuranta minun prosessi, Mikä sinänsä on melko epämiellyttävä hetki. Ja ei ole mitään keinoa selvittää, mitä tapahtuu, koska sijainti lokit on jumalaton vähän, ja minun täytyy tehdä joitakin monimutkaisia piirejä verkkoosakkeita, että en käsitellä. Riveillä signaali ansa-on miellyttävä ominaisuus bash skriptejä siepata signaaleja poistumiset tai lähettäneet kernel-kill sanoa 😉 ja siten voimme estää joitakin välittömiä myöhempiä tapahtumia. Vain lisätä, että SIGKIL tai tappaa -9 ei voida ottaa talteen ja estää, Niin on suunnittelu ydin. Se päättyy suoraan pid-kohteeseensa. Nyt asianmukainen koodi

#trapping signals I know -9 dosent work but we try it just in case ; )
trap on_exit 0 14 1 2 9 13 15 6 8 4 3 11 5
on_exit () {
make_debug 10 #unexpected error
#reboot now if we hawe trapped signal
reboot -d 0
exit 0
}

Ensimmäinen rivi ilmoittaa meille, mihin toimiin ryhdymme ja millä signaaleilla saamme enemmän signaaleja Ihmisen signaalit 😉 tässä tapauksessa olen kiinnostunut näistä. Kuten nähdään johtaa yksinkertainen toiminto, joka tekee virheenkorjaus viestin ja käynnistää vastaanottimen. En ole vakuuttunut., Tämä tuo tuloksen odotan, Koska luulen, että kaikki, mikä häiritsee, tappaa tappo. -9 Mutta mikään ei vaivaudu kokeilemaan.

Muut kardinaali muutokset ovat toimintoja useimmat asiat, jotka toistetaan koodi pakkasin ne toimintoihin, Se oli hieman epämiellyttävää katsella ei, Että nyt on de 😉 minulla oli hieman draamaa palata bash – Laitoin palata toiminto ja odottaa käyttäytymistä kuten kaikki muut tuttavat ohjelmointikielet, Mutta kävi ilmi, että palautus palauttaa vain kokonaislukuarvot ja enintään 2 😀 ja halusin palata merkkijono. Se on ruma sika.. Ratkaisu ongelmaan on sotkua

#---cuted---

if [ $T -eq $N ]
 then
 echo "Cam is down! Reboot..."
make_debug 4 # cam is down
 else
echo $rcam
 fi

# ---cuted----

#finding real cam1
 rcam1=$(find_cam $cam1)

Ensimmäinen osa on loppuun minun tehtävä ja kautta kaiku syljen ulos tulos. Kun se on alkeisja viimeinen rivi ylemmän matkan.

Hmmm mielestäni, Että tämä on mielenkiintoinen osa koodia.

Искам да изкажа благодарност на вдххновението 😉

http-protokolla://www.youtube.com/watch?V=SilMJ0O13UI (suom.&feature=liittyvä

Най- накрая успях да завърша работата си по скрипта които пиша толкова време 🙂 Вече Kävi koulua NUKI е един доста стабилен скрипт. Подчертавам 1 защото премахнах допълнителния скрипт като го вградих в основния. Вече придоби монолитна структура, но лично според мен е по добре за демон вариант 🙂 Вече подобренията не са много, по скоро са фиксове на разни ситни бъгове и опити за подобряване на кода. Единственото осезаемо нещо което съм добавил е проверка за uptime-а на приемника. Нагласил съм го на всеки 10 дни да си прави рестарт сам.

Като погледна назад и първоначалната ми идея за скрипт които просто да следи приемниците какво се случава с тях мисля, че доволно добре съм реализирал идеята си много кратно. Единствения бъг които се надявам да избегна с 10 дневния рестарт еима моменти в които приемника започва да се рестартира, но не успява. Избива повечето сервизи включително и мрежовия но неуспява да достигне до рестарт. За съжаление поради ограниченията наложени ми от боксовете неможях да направя рестарта да е от ядрото и по този начин да избегна и този момент. Може би някои ден за в бъдеще ще си компилирам мои си image за боксовете и по този начин ще успея да се справя с този проблем. Засега се надявма последното ми е решение да го замаже 🙂 Иначе всичко останало се получи изключително добре, дори много по добре от първоначалния ми замисъл. Особено при положение, че преимана през толкова метаморфози. Най бъгавата част си остана web интерфеиса, затова продължавам да не го давам 😆 след като седна да го пренапиша тия дни ще го кача и него за свободна консумация. Финални думивместо да протаквам просто искам да благодаря на всичките ми приятели, че търпяха глупавите ми въпроси за това и оноваимате важен принос в деизаина на кода. Признателност заслужава и човека на които е кръстен проекта и ми е служил като вдъхновение в повечето моменти на бездарно писане 🙂Дам заслужаваш го!

Днес поработих малко над новата NUKI верси. Най накрая докарах ред и до нея, а ми се ще да я пооправя малко преди да пусна последната стабилна, вероятно и финална версия. Та имах идеята да проверявам колко дни е uptime на приемник, че повечето ми правят проблеми след като са били повечко време, затова реших да правя през 10 дни един прфилактичен рестарт. Набързо драснах конвеирче дето да ми изчиства дните от останалите променливи защото резултата откомандата uptime е доста неприятен за работа

# uptime
12:13:57 up 30 days, 20:07,  1 user,  load average: 0.00, 0.00, 0.00

Та въпросни ред се филтрира само от суперския конвеир 😛

uptime | awk -F'up' '{ print $2 }' | awk -F'days' '{ print $1 }'

Като ако работното време е дни резултат е цяло число с дните, а ако е часове резулататът е подобен на

[email protected]:~$ uptime | awk -F'up' '{ print $2 }' | awk -F'days' '{ print $1 }'
1:34,  5 users,  load average: 0.46, 0.39, 0.41
[email protected]:~$

Заради Което минава през проверка за вида на стойноста

if echo $days | grep "^[0-9]*$" > /tmp/null
then
   echo "Uptime in days is $days"
else
  echo "Uptime isnt in days"
fi

Просто лесно и ясно в if-а конструкцията проверява дали стоиснота съдържа само цифри с регулярни израз grep^[0-9]*$”.

Еее доживяхме го има Kävi koulua NUKI 1.0 🙂 Защо от версия 0.6 скочих на 1.0 ще ме попитате ами много простовече имаме едно 100% универсално NUKI покриващо всички изисквания, с малки изключения кото ще фиксна за в бъдеще и по важното настоящата версия е реализирана по коренно различен начин. Върнах се към старата ми идея да е демон и с малко проби и грешки този път нещата сработиха отлично. Сървърното приложение е изкормено изцяло като изключим едно кратки php скриптче от което черпи информация NUKI-то 🙂

Е вече постигнах почти всичко с NUKI накъде повече? Ами ко трябва да съм честен винаги може и повече, например обмислям да направя инсталатор на самия скрипт да речем да направя нещата някак си по лесни и разбираеми дори и за не линукс потребител всичко да се случва с възможно най- малко проблеми за потребителя. Но за всичко си има време. Към момента в NUKI освен всичко друго съм добаваил модул които следи за връзка към сървъра, ако изчезне самия приемник се рестартира. За момента все още несъм установил дали работи хихихиихх 😆 Абе като цяло вианги ще има какво да се желае още или някоя свежа идея от някои все пак една глава неможе да мисли като 2-3-4 или повече, дори и моята 😈

ps Отново пускам с кодово име. Смятам че вече имам една изключително твърда основа за всичко което реша за в бъдеще да правя със скрипта ми