Fórum Root.cz
Hlavní témata => Hardware => Téma založeno: tuxmartin 05. 05. 2014, 13:22:30
-
Zdravim,
budu mit X (X=hodne) linuxovych krabicek, ktere budou sbirat binarni data. Bude to priblizne 4MB za minutu (240MB za hodinu). Kazdych 15 minut mi vypadnou soubory (pro ucely dotazu se jedna o binarni blob, ktery uz nelze komprimovat) o velikosti cca 15MB, jejich pocet bude 1 az 5. Celkove se tedy bude pohybovat velikost mezi 15 a 60MB za 15 minut, jak ktera krabicka.
Tyto data potrebuju ukladat na centralni server.
Problem krabicek je jejich slaby hardware, rad bych pouzil TP-Link wifi routery. Narozdil treba od Raspberry Pi se daji koupit kolem 500Kc se vsim - neni potreba zadna dalsi, SD karta, krabicka, zdroj. Pripojim zdroj, flashnu OpenWrt a je hotovo.
TL-WR741ND (http://www.alza.cz/tp-link-tl-wr741nd-d155297.htm) za 490Kc ma 4MB flash a 32MB RAM.
TL-WR842ND (http://www.alza.cz/tp-link-tl-wr842nd-d293991.htm) za 870Kc ma 8MB flash a 32MB RAM, ale ma USB. Teoreticky se da pripojit (http://wiki.openwrt.org/doc/howto/extroot) root oddil na usb flash disk, ale to nechci. Vzdy se najde blbec, ktery ze zapnuteho routeru flashku vytahne...
Velkou vyhodou je take 5x Ethernet a WiFi, do kterych muzu napichat merena zarizeni.
Puvodne jsem chtel 15 minut ukladat soubory do RAM a kazdych 15 minut je poslat na server - pri 32MB RAM je to nerealne. Navic nebudu mit zalozni zdroje a nerad bych prisel o 15 minut dat.
Otazka zni: Jak sifrovane dostavat data z krabicek na centralni linuxovy server? Moje napady:
- Samba disk pres OpenVPN. Neni to overkill?
- SFTP (pripojeny disk pres SSH)
- WebDAV (https)
- FTPS / FTPES (sifrovane ftp)
- Rozsekat soubory napr. na 1MB dily (kvuli male RAM) a pres curl je periodicky nahravat pomoci HTTP POST na server, ktery si je spoji. imho velka prasarna...
Rad bych idealne malou rezii, nechci zbytecne velky prenos dat. Uz takhle s tim budu mit na dost mistech problem.
Rad bych to mel bezpecne, tedy aby se nikdo po hacknuti krabicky nemohl dostat k datum poslanych ostatnimi krabickami (kazda krabicka bude mit svuj samotny ucet, oddeleny od ostatnich). Tady se mi libi WebDAV, nastavim konkretni adresar a je hotovo. Samba take neni spatna, ale jak je to s bezpecnosti? U sftp uz se musi nastavovat chroot (http://www.root.cz/clanky/jak-nahradit-ftp-pomoci-sftp-a-zamknout-uzivatele/), to by snad taky nebyl problem.
Uzivatele vytvoreni pro krabicky nesmi mit pristup k shellu.
U OpenVPN a WebDAV me laka pouzizi certifikacni autority, pokud bude problem, okamzize muzu revokovat certifikat dane krabicky.
Na OpenVPN se mi take libi moznost syslogu a vzdalene ssh administrace krabicek z centralniho serveru (krabicky budou mit neverejne IP).
-
SSH potřebuje výkon, aby dokázalo tlačit data solidní rychlostí. Otázka je, zda zařízení má dostatečnej výkon a/nebo zda ten výkon můžeš obětovat.
Možná by stálo za úvahu taky NFS přes OpenVPN - je to víc systémový (myšleno nativní), než Samba.
Co plánuješ sbírat? Resp. jakej to bude mít účel? (ptám se jen tak ze zajímavosti)
-
Provozuji něco podobného. Jenom číslo X se blíží stovce a každá ta krabička sbírá cca 140 MB/sec. :-) takže místo TPlinku tam máme vlastní HW s hromadou hardwarovýh polí od Xilinxu, aby se to stíhalo v reálnéím čase přehrabovat. Nicméně ten počítač za tím (linux na bázi slackware10 běžící v RAMdisku) to plive tak, že jednotlivé události, které se z toho trvalého toku vyzobávají (pár až pár desítek MB), tlačí pomocí FTPS na server přímo ze své RAM. Používá se libcurl. Jednoduché a relativně blbovzorné a funguje to tak roky.
Co to sbírá je nepodstatné. :-)
-
SSH potřebuje výkon, aby dokázalo tlačit data solidní rychlostí. Otázka je, zda zařízení má dostatečnej výkon a/nebo zda ten výkon můžeš obětovat.
OpenVPN (a SSL a další…) šifrují stejným způsobem, tak to výkonově asi bude nastejno. A docela to jde, řádově 1 MB/s to dá.
Tazatel: Rozsekal bych to na fragmenty a scpčkoval. Pokud by byl overhead na handshake SSH, můžeš použít takovou tu démonizační/socketovou SSH feature, která naváže spojení jen jedno a zbytek jde přes soket. Taky (pokud máš stabilní síť) to můžeš tlačit rovnou pajpou "logger | ssh stroj".
Pan M. sbírá odposlechy u ISP a telefonních operátorů.
-
SSH potřebuje výkon, aby dokázalo tlačit data solidní rychlostí. Otázka je, zda zařízení má dostatečnej výkon a/nebo zda ten výkon můžeš obětovat.
OpenVPN (a SSL a další…) šifrují stejným způsobem, tak to výkonově asi bude nastejno. A docela to jde, řádově 1 MB/s to dá.
Tazatel: Rozsekal bych to na fragmenty a scpčkoval. Pokud by byl overhead na handshake SSH, můžeš použít takovou tu démonizační/socketovou SSH feature, která naváže spojení jen jedno a zbytek jde přes soket. Taky (pokud máš stabilní síť) to můžeš tlačit rovnou pajpou "logger | ssh stroj".
Pan M. sbírá odposlechy u ISP a telefonních operátorů.
1MB/s je absolutne dostatecne. Takovou rychlost z 90% nebude mit ani internetove pripojeni u jednotlivych krabicek.
Nad sifrovanym FTP jsem taky uvazoval, ale moc se mi to nelibi. Nemam ten protokol rad. Spousty spojeni a ruznych portu, sifrovani se obcas chova podivne. Prece jen to je 43 let stary protokol...
NFS v OpenVPN tunelu zni zajimave, ale v 99% jsem vzdy vsude pouzival sambu, takze s NFS nemam skoro zadne zkusenosti.
Zkousel jsem nainstalovat NFS. Na serveru jsem do /etc/exports dal "/home 192.168.0.0/255.255.0.0(rw,sync,no_root_squash,no_subtree_check)" a pokud na klientovi udelam "mount 192.168.1.1:/home/martin /mnt/test/" pripoji mi to muj domovsky adresar. Jenze na klientovi musim pripojiovat pod rootem a pak se me to nepta na zadne heslo.
Da se nejak u NFS na serveru nastavit jmeno/heslo? Jako u samby \\server\home a po zadani jmena a hesla uzivatele jsem pouze v jeho home adresari. U NFS jsem nic takoveho nenasel, ve vsech navodech je "zabezpeceni" resene IP adresou v /etc/exports...
Stale uvazuju o monitoringu krabicek (asi nagios). Proto by se hodilo mit VPN pristup do krabicek. Kdyz se neco po.... tak take budu mit moznosti dostat se k ssh v krabicce.
Proto je pak nesmysl jeste uvnitr sifrovane vpn mit sifrovane kopirovani souboru.
Zmena - kvuli vypadkum a rychlosti pripojeni bude wifi router ukladat na usb flash disk a jednou za X minut nakopiruje data na server. Stale tedy zkustava problem, pres jaky protokol kopirovat.
-
NFS funguje na základě UID a GID. Klient musí mít stejně UID a GID, jako má an serveru, jinak na "své" soubory nemůže. Proto žádné jméno a heslo. Dá se to tuším nějak "ochcat" pomocí nastavení NFS (jako třeba překlad z UID 1001 na UID 1010, pokud by uživateli nesouhlasilo UID). Jinak zabezpečení jako takové řešeno vůbec není (žádný login, prostě jen otevřený port).
Pokud budeš mít stejně VPN (kvůli nagiosu/správě), tak to udělej přes čisté FTP a nazdar bazar ;-)
-
Stale uvazuju o monitoringu krabicek (asi nagios). Proto by se hodilo mit VPN pristup do krabicek. Kdyz se neco po.... tak take budu mit moznosti dostat se k ssh v krabicce.
Když použiješ tu metodu, že se to SCPčkuje/SSHčkuje, tak stačí přidat reverzní SSH tunel a můžeš se tam přihlásit.
-
Vsuvka k USB disku - ten pidiflashdisk se do krabice dá zalepit, aby jej nikdo nemohl vytáhnout.
RIPE Atlas takhle nějaké zalepené věci do TP-Linku má.
-
Hezkej dotaz! S chutí jsem si přečetl různé návrhy řešení :)
Pokud to dobře chápu, chceš řešení pokud možno pomocí nějakých základních utilit, do kterých jenom data naláduješ? Protože pokud by byla možnost napsání vlastní malé aplikace, tak jsou zase možnosti jinde...
Např. v energomonitor.cz používáme tftp, http POST, mqtt. Pokud nechceš nějaké extra featury, tak bych se s protokolem nezalamoval a volil bych co nejrobustnější (=> nejjednodušší) řešení. Takže NFS a sambě bych se určitě vyhnul, s tím budeš mít při takovém množství zařízení kdesi v trapu na kdovíjaké síti jenom problémy. Pokud budeš mít šifrování na jiné vrstvě (VPN), tak bych klidně šel do toho tftp. Anebo do http post, to už záleží spíš na tobě, s čím se víc kamarádíš a líp to ukočíruješ a taky co s datama budeš dělat dál. Režie je u obojího rozumná, pokud nechceš posílat nějak butálně realtime, tam by to pak chtělo něco speciálnějšího jako právě to mqtt, něco custom po udp apod.
Dost důrazně bych ale NEdporučoval ukládat jakákoli průběžná data na flashku. Flashky při konstantním zápisu odchází rychlostí, která by tě dost nemile překvapila. Fakt to určitě nedělej, je to asi ten nejhorší nápad, co jde v takové situaci vymyslet. Pokud to nutně chceš, pak jedině mini pci-e ssd, nebo ještě líp rovnou notebookový disk. Lepší ale je se tomu vyhnout, pokud to jenom trochu jde, protože tím nic nezískáš - množství posílaných dat bude pořád stejný, akorát se trochu sníží režie za cenu imho výraznýho snížení spolehlivosti.
-
Presne tak, rad bych poslepoval jiz exitujici programy.
Nechci se podcenovat, ale ftp, samba nfs, ... jsou mnohem lepsi a lety overenejsi protokoly, nez ja ted u kafe vymyslim. :-)
Ja potrebuju v realnem case sbirat data, ale na server mohou dorazit klidne i s 12 hodinovym zpozdenim (dele ne). Problem je, ze na danych lokalitach neni extra rychle pripojeni k internetu. Navic behem dne byva dost casto zpomalene praci uzivatelu. Proto s nejvetsi pravdepodobnosti nepujde, jak jsem puvodne zamyslel data primo ukladat na sitovy disk. Takhle se data muzou ukladat na kartu a v noci se pres FTP odesilat (co se behem dne nestihne).
Dalsi problem, kdyz na par minut chcipne internet, byl bych bez dat.
Uvazoval jsem o male USB ctecce (http://www.ebay.com/itm/261453321692) microSDHC karet a do toho za 120Kc 8GB (http://www.alza.cz/kingston-micro-secure-digital-8gb-d120791.htm) kartu.
Pokud by ji bylo nutne jednou za rok vymenit, snad by se to dalo prezit. Cenove urcite, horsi ta prace s tim :-(
Jak to delaji treba dnes tolik oblibene kamery v autech? Ty imho taky neustale od zacatku do konce ve smycce prepisuji sd kartu. Jak dlouha tam karta vydrzi?
Nemate zkusenosti s zivotnosti sd karet? Kdyz budu cca 12 hodin denne zapisovat 4 soubory kazdy cca 1MB/minutu, za jak dlouho bude karta na vyhozeni?
-
Hehe, jak člověk dospěje v podobném případě k pdobnému řešení. Také máme i nějaký systém pro monitorování elektro, akorát místo pulzů z elektroměru monitoruje trošku ryhlejší děje, občas doprovázené létáním zbytků vedení a transformátorů do okolí, takže těch dat je o pár řádů více. Po letech to došlo k přenosu FTP, HTTP PUT a ZeroMQ. Na to MQTT se podívám, to vypadá zajimavě. Třeba bych se konečně zbavil vlastního bastlu na gateway 0MQ na WS (respektive SSE). :-)
Jinak souhlas, komplikované protokoly jako Samba a NFS nebrat. S tím jsem si nabil držku už před hodně lety (NFSv3 tehdy, ať TCP nebo UDP spojení), a to i na celkem vyhrazených linkách, jak je to dál, je z toho bolehlav.
Trvalé cachování na flashku je problém také, doložený bednou plnou mrtvých DOC, SD a dalších modulů. Leda to dělat tak, že data mám v RAM, odesílám a jen když se nepodaří odeslat, tak po nějaké době zhajuji cachování na disk pro případ ztráty napájení a po obnovení spojení odešlu (v mém případě prvně posílám obsah RAM a pak doposílám co ja na flashce). Ale výrazně to komplikuje logiku aplikace, takže je vhodné zvážit, zda mi to za tu námahu stojí. Jinak dle popisu toho MQTT, tak některé klientstké knihovny podporují cachovábí na disk při nedostupnosti spojení.
-
Cachovani do RAM je zajimavy napad, urcite by se hodne usetril zapis na kartu. Skoda jen, ze mam jen 32MB RAM. Ale ve vetsine pripadu by to mohlo stihat odesilat po internetu.
MQTT jsem neznal, urcite se na nej podivam. Klientska cast v Pythonu pro OpenWrt by mohla byt relativne jednoducha (http://stackoverflow.com/a/19511815/1974494).
-
Nechci se podcenovat, ale ftp, samba nfs, ... jsou mnohem lepsi a lety overenejsi protokoly, nez ja ted u kafe vymyslim. :-)
To záleží na typu těch dat. Pokud bys potřeboval každou půl minutu odeslat tři byty, s jistotou a navěky to budou 3B, tak je zbytečný kvůli tomu cokoli řešit a stačí jednoduchý C prográmek na deset řádků :)
U samby i nfs je ten problém, že to jsou protokoly primárně určený na LAN. Všelijaký výpadky, ztráty packetů apod. je můžou docela rozhodit. Prostě tímhle si jenom přiděláš problémy, který budou obtížně řešitelný a neustálý, proto je to špatný řešení. Potřebuješ něco naprosto jednoduchýho, robustního, bezúdržbovýho, jinak se z toho zblázníš.
Nemate zkusenosti s zivotnosti sd karet? Kdyz budu cca 12 hodin denne zapisovat 4 soubory kazdy cca 1MB/minutu, za jak dlouho bude karta na vyhozeni?
S SD kartama ne, ale můžu ti říct, že normální USB flashka, na kterou logoval málo vytížený servřík, odešla asi za dva měsíce. Jestli mají SD karty jinou technologii, to nevím, ale jestli jich hodláš do světa rozeslat tisíc, tak bych si to prvně hodně dobře ověřil, jinak ztrávíš příští rok objížděním republiky a vyměňováním karet :)
Jak to dělají kamery dneska, to netuším, dřív se AFAIK používaly CF karty, které by měly vydržet víc.
Třeba bych se konečně zbavil vlastního bastlu na gateway 0MQ na WS (respektive SSE). :-)
Náhodou ZMQ je super :)
-
To cachování umí i ZeroMQ, ať už 0MQ SWAP nebo PZQ modul. Takže aplikace nastaví watermark, kolik RAM může mít fronta v RAM a když se naplní (pro nedostupnost spojení nebo malý průtok), tak se začne odkládat do souboru. S tímto se dá obejít náročnosti řídit si to ve vlastní logice aplikace, zkrátka zapisuji zprávy do fronty a nechám na knihovně, ať je nějak dopraví dál.
Jenom bude problém, co z toho dokážete narvat do toho routeru/OpenWRT.
-
Zni to zajimave, dokonce jsem nasel nejaky port ZeroMQ na OpenWrt (https://github.com/vperron/openwrt-zmq-packages).
Vidim v mem pripade zasadni problem. Musel bych mit velky soubor a ten chtit posilat. Ja ale soubor nemam. Mam souvisly stream dat (cca 1MB/min), ktery mi generuje jiny program a zapisuje ho na disk do souboru. Ja maximalne muze nastavit vytvareni novych soubou kazdych par minut, abych se vesel do RAM.
Takze asi nakonec budu mit 1 soubor na jednu minutu, ktery se bude ukladat do RAM disku. Po skonceni souboru, se zacne novy a stary se posle pres FTP/ HTTP POST/ ... na server. Pokud se to nepovede, odlozi se na SD kartu a zkusi se to pozdeji.
Chudak server, kdyz mu kazdou minutu dorazi stovky souboru (cca 4 soubory na jednu krabicku). Souborovy system bude mit z tisicu souboru velkou radost. Ale ukladat binarni data do MySQL se mi porad zda jako nesmysl, radeji ulozim do db nazev souboru a nejaka metadata.
-
Vidim v mem pripade zasadni problem. Musel bych mit velky soubor a ten chtit posilat. Ja ale soubor nemam. Mam souvisly stream dat (cca 1MB/min), ktery mi generuje jiny program a zapisuje ho na disk do souboru. Ja maximalne muze nastavit vytvareni novych soubou kazdych par minut, abych se vesel do RAM.
No tak to je právě přesně situace, kdy bys měl využít to zmq - data si nabufferuješ v paměti do nějaké libovolné velikosti, jaká se ti bude hodit a pak odešleš přes zmq. Zmq je taková v podstatě jenom obálka kolem klasických socketů, přidávající (kromě výšúrovňových věcí jako publish-subscribe) příjemné vlastnosti jako bufferování, reconnect apod. Takže být tebou bych se vykašlal na nějaký soubory a s chutí bych si napsal krátkou vlastní aplikaci komunikující pomocí zmq. V jazyce dle libosti - Python, C, nebo snad dokonce Erlang? ;)
-
... Chudak server, kdyz mu kazdou minutu dorazi stovky souboru (cca 4 soubory na jednu krabicku). Souborovy system bude mit z tisicu souboru velkou radost. ...
Z jakého důvodu by měl být server chudák nebo by z toho neměl mít souborový systém radost? Máš vůbec představu o výkonu dnešních počítačů? ;)
Já bych to řešil tak, že bych data bufferoval třeba po 1 MB a každý takový soubor nahrál přes ssh na server do složky, kam bych měl právo pouze zapisovat. Takto i kdyby se ti někdo naboural do krabičky a získal přístup na server, tak získá max. obsah aktuálního bufferu. Pokud by ti nakonec vadily ty spousty souborů, tak je můžeš ukládat do stromové struktury adresářů nebo případně úlohou z cronu periodicky spojovat do jednoho.
-
Zni to zajimave, dokonce jsem nasel nejaky port ZeroMQ na OpenWrt (https://github.com/vperron/openwrt-zmq-packages).
Vidim v mem pripade zasadni problem. Musel bych mit velky soubor a ten chtit posilat. Ja ale soubor nemam. Mam souvisly stream dat (cca 1MB/min), ktery mi generuje jiny program a zapisuje ho na disk do souboru. Ja maximalne muze nastavit vytvareni novych soubou kazdych par minut, abych se vesel do RAM.
Takze asi nakonec budu mit 1 soubor na jednu minutu, ktery se bude ukladat do RAM disku. Po skonceni souboru, se zacne novy a stary se posle pres FTP/ HTTP POST/ ... na server. Pokud se to nepovede, odlozi se na SD kartu a zkusi se to pozdeji.
Chudak server, kdyz mu kazdou minutu dorazi stovky souboru (cca 4 soubory na jednu krabicku). Souborovy system bude mit z tisicu souboru velkou radost. Ale ukladat binarni data do MySQL se mi porad zda jako nesmysl, radeji ulozim do db nazev souboru a nejaka metadata.
Delam denodenne se slozkami se stovkami tisic az miliony souboru. Jedinej problem s tim ma GUI systemu, kdyz se s tim pracuje prez programy a ne rucne neni to problem.
Kdybych volil databazi, tak tahle uloha vhledem k absenci relaci je idealni pro nosql. Na MongoDB mame odzkouseny liti stovek dokumentu ("radku") o velikosti kolem 1MB do kolekce ("tabulky") za sekundu. Asi by slo i vic, ale pak prestal stihat RAID (Zkouselo se vytizeni jaky to zvladne - na RAID0 z 6 disku to davalo kolem 400MB/s). Muzes jednim nebo vic programy tlacit do DB a jinym to pak online zpracovavat, jde tam cist z kolekce primo kdyz pribyvaj novy polozky.
-
Já bych to řešil tak, že bych data bufferoval třeba po 1 MB a každý takový soubor nahrál přes ssh na server do složky, kam bych měl právo pouze zapisovat.
Ještě jeden dobrej fígl, ktrej by se mohl hodit, je nastavit tomu uživateli speciální shell - program, kterej přečte data ze stdin a někam je uloží. Když pak někdo získá přístup ke krabiččce, nemůže nic víc než ukládat soubory. Nemůže se ani přihlásit na server.
-
No ja bych mozna zvolil nejake standardni (=stare) reseni.
Treba scp? :)
SSH muzes nastavit i aby pouzival vypocetne nenarocne sifrovani (RC4, blowfish), pokud Ti nejde o nejake super zabezpeceni.
-
Z jakého důvodu by měl být server chudák nebo by z toho neměl mít souborový systém radost? Máš vůbec představu o výkonu dnešních počítačů? ;)
Pokud by ti nakonec vadily ty spousty souborů, tak je můžeš ukládat do stromové struktury adresářů nebo případně úlohou z cronu periodicky spojovat do jednoho.
1 soubor kazdou minutu * 4 zarizeni * 60 minut * 24 hodin = 5 760 souboru za den
za mesic * 30 = 172 800 souboru
pro sto zarizeni uz to bude 17 280 000 souboru za mesic o velikost v radech kB na kus. Co jsem kdy pracoval s malymi soubory, vzdy to bylo pomale.
Spojovat se bohuzel bez relativne velkeho vykonu nedaji, nejde jenom o "useknuti", kazdy soubor ma svuj "zacatek a ukonceni". Nebo jak to rict :-)
Ještě jeden dobrej fígl, ktrej by se mohl hodit, je nastavit tomu uživateli speciální shell - program, kterej přečte data ze stdin a někam je uloží. Když pak někdo získá přístup ke krabiččce, nemůže nic víc než ukládat soubory. Nemůže se ani přihlásit na server.
To zni zajimave.
No ja bych mozna zvolil nejake standardni (=stare) reseni.
Treba scp? :)
SSH muzes nastavit i aby pouzival vypocetne nenarocne sifrovani (RC4, blowfish), pokud Ti nejde o nejake super zabezpeceni.
100% by stacilo.
Ja vlastne potrebuju jen prenos souboru a nejaky monitoring. Jak to lepe resit, nez pomoci VPN? Kopirovani na server neni problem to je klient->server spojeni, porad se mi nejvic libi HTTP POST, budu tak mit rovnou v databazi prehled o souborech (nemusim monitorovat ftp adresar, udela si to aplikaci pri nahravani souboru).
Na monitoring bych asi musel mit SSH tunel. Neni uz lepsi VPN?
A kdyz se neco podela, bez vpn se nedostanu do krabicek na ssh. Verjenou ip mit krabicky nebudou. Takze mit dlasi tunel na ssh?
Ja na VPN netrvam, byl to jen napad.
-
Pokud lze aplikaci nastavit tak aby zapisovala pouze do jednoho souboru s urcenym nazvem ... pak bych vyzkoušel vytvorit pojmenovanou rouru a pustit data do ni a jinou aplikaci si je kouskovat na bloky jake jsou pro odesilani optimalni ...
Co se tyka zivotnosti usb flash disku ... tusim ze bunka ma cca 100K prepisu ... pri zmene celeho obsahu 8GB 2x denne (zapis/smazani) je zivotnost vic nez dostacujici ( 120 let ) ... ale tady musi byt pouzit specialni FS (jffs2 a podobne ) nebo k flash disku pristoupit jako memory maping file a ridit si to sam
pro odesilani bych osobne zvolil HTTP protokol s metodou PUT ... je jednoduchy a mam ho otestovany pro podobne ucely ...
V pripade nutnosti zabezpečeni pak HTTPS ... se jmenem a heslem pres basic autentizaci az po autentizaci klientskym sertifikatem .... otazka jaky stupen autentizace je dostačující.
Monitoring koncovych zarizeni lze pak provadet na základě posledniho doruceneho datoveho bloku na http server ...
Na serveru pak data ukladat minimalne do stromove struktury napr rok / den / zarizeni (souboru bude ale velke mnozstvi tak pocitat s dlouhou dobou v pripade fsck ) nebo zvolit jine metody ... to zalezi na dalsim pouziti dat ...
Pro ukladani ti postaci jednododuchy skript v php nebo v necem podobnem co podporuje http server ....
-
Ahoj,
neco podobneho jsem resil, akorat tech krabycek nebylo 1000 ale asi 30 a vykonu maji dost(standartni PC). A ted moje zkusenosti :
Open vpn pro spravu urcite, ale po dobu olympiady byl v cine blokovanej veskerej UDP provoz.
Rozhodne nepouzivat FTP - V CR kde se aplikace ladila a nasazovala prvne do produkce vse OK, ale v cine to pak naprosto zhavarovalo. Routry se snazi byt chytrejsi nez uzivatel a ani pasivni mod FTP nefungoval.
Takze momentalne veskery upload pres HTTPS - odesilana data vypadaji jako klasicky POST request, rozumi tomu i ruzne obskurni transparentni proxy. Rozhodne je potreba podporovat http proxy. Pokud bych vytvarel nejakou podobnou aplikaci, asi bych volil obycejne HTTP a data opatril nejakym HMAC pro overeni puvodu, ponevadz nekteri paranoidni administratori zakazuji i HTTPS. Pokud je potreba data sifrovat neni problem je predtim prohnat nejakou standartni sifrovaci funkci(AES, 3DES, ...).
Radek
-
Ja vlastne potrebuju jen prenos souboru a nejaky monitoring. Jak to lepe resit, nez pomoci VPN? Kopirovani na server neni problem to je klient->server spojeni, porad se mi nejvic libi HTTP POST, budu tak mit rovnou v databazi prehled o souborech (nemusim monitorovat ftp adresar, udela si to aplikaci pri nahravani souboru).
Na monitoring bych asi musel mit SSH tunel. Neni uz lepsi VPN?
A kdyz se neco podela, bez vpn se nedostanu do krabicek na ssh. Verjenou ip mit krabicky nebudou. Takze mit dlasi tunel na ssh?
Monitoring je hodně široký pojem, to bys asi musel nějak líp specifikovat. Ale zase: fakt bych v tom nehledal složitosti, čím jednodušší cestou v tomhle prostředí půjdeš, tím líp. Např. možná bude stačit si uvědomit, že když krabička posílá data, tak žije. Co víc bys chtěl monitorovat? ;)
Jinak potom jsou samozřejmě standardní věci jako SNMP, ale to už máš spojení opačným směrem, což v popsaným prostředí implikuje nějakou tu VPNku... Stejně tak ssh. Pokud teda na vzdáleným přístupu na krabičky trváš a nechceš vytvářet nějaké vyloženě custom řešení, tak VPN je jasná.
Tím custom řešením myslím nějakou inteligentní komunikaci s krabičkou. V Energomonitoru máme třeba vzdálený update firmware - krabička se jednou za čas zeptá, jestli není potřeba update, a když jo, tak si ho stáhne. Že je k dispozici update jí říká server, takže de facto tímhle způsobem krabičku plně ovládáš, i když na ni nevidíš. Nějakou podobnou cestou bys v případě nouze mohl jít taky - krabička by se jednou za čas zeptala, jestli na ní nechceš přistoupit a v případě že jo, někam by ti vytvořila ssh tunel (zpětnej - takže bys na ni ty vidět nepotřeboval, spojení by šlo na server).
Ale to už je fakt všechno spíš na tvoje zvážení, který řešení je ti sympatičtější, víc odpovídá tvé představě a bude se ti líp spravovat.
-
Co se tyka zivotnosti usb flash disku ... tusim ze bunka ma cca 100K prepisu ... pri zmene celeho obsahu 8GB 2x denne (zapis/smazani) je zivotnost vic nez dostacujici ( 120 let ) ... ale tady musi byt pouzit specialni FS (jffs2 a podobne ) nebo k flash disku pristoupit jako memory maping file a ridit si to sam
Obávám se, že tohle je čistá teorie... Moc o tom nevím, ale pokud se nepletu, dává se dneska nějaký ten wear levelling už i do těch nejlevnějších flashek a pak je otázka, jak moc situaci jffs pomůže. Nevím, ale spolíhat na to bych si fakt netroufl, pokud by to nebylo nějaký průmyslový zařízení s garantovanými parametry...
-
Monitoring je hodně široký pojem, to bys asi musel nějak líp specifikovat. Ale zase: fakt bych v tom nehledal složitosti, čím jednodušší cestou v tomhle prostředí půjdeš, tím líp. Např. možná bude stačit si uvědomit, že když krabička posílá data, tak žije. Co víc bys chtěl monitorovat? ;)
Nějakou podobnou cestou bys v případě nouze mohl jít taky - krabička by se jednou za čas zeptala, jestli na ní nechceš přistoupit a v případě že jo, někam by ti vytvořila ssh tunel (zpětnej - takže bys na ni ty vidět nepotřeboval, spojení by šlo na server).
To zni rozumne, zarizeni bude ukladat vzdy treba 5 minut data do RAMdisku a pak je posle na server pres HTTPS (jmeno a heslo, certifikaty jsou zbytecne).
Pokud nebude server odpovidat (treba vypadne internet), ulozi se soubor z ramdisku na sd kartua posle se pozdeji. Takze v idealnim stavu se na sd kartu nebude nikdy zapisovat.
Tim se zbavim problemu, jak se na serveru dostane do databaze info o novych souborech, poresi to webova aplikaci pri nahrani.
Zaroven s nahranim se krabicka zepta, jestli ma zapnout vzdaleny pristup. Pokud server odpovi ano, krabicka nahodi ssh tunel. Takze do max. 5 minut budu mit ssh.
Monitoring asi poradne omezim - krabicka posila data, je ok. Krabicka si asi bude delat svou vnitrni statistiku a pokud dojde k problemu, posle data opet pres HTTPS na server (treba nejaky json s daty).
-
Tim se zbavim problemu, jak se na serveru dostane do databaze info o novych souborech, poresi to webova aplikaci pri nahrani.
Ano. Oproti nejakymu nahravani pres ftp do adresare, kterej bys musel monitorovat, je to urcite pohodlnejsi.
Zaroven s nahranim se krabicka zepta, jestli ma zapnout vzdaleny pristup. Pokud server odpovi ano, krabicka nahodi ssh tunel. Takze do max. 5 minut budu mit ssh.
Jenom mysli na to, ze mas o neco malo vetsi pravdepodobnost, ze se na zarizeni nedostanes - chyba v tom sw na krabce apod. Ale pokud to jednou odladis a pak do toho nebudes vrtat, melo by to byt v klidu. A v pripade zavady jedne krabky ze sta ti ji proste nekdo posle postou k diagnostice, no, to se da logisticky zvladnout :)
-
Ještě bych zvážil, zda to nechat jen na protlačení toho mega fajlu a od toho odvozovat stav. Pokud budeš mít krabičky na nedefinovaných Internetových linkách pochybnývch kvalit, tak se ti může stát, že uživatel je spokojen, facebook mu jede, webmail taky, ale cokoliv nad 10 kB neodešleš, protože má zrovna tak zprasen uplink, že víc jak těch pár paketů potvrzující TCP linka nedá...
Pak je lepší posílat i něco nějakou signalizací. Ja to s těma binármáma balíky dělam tak, že když je hotov, prvně MQ posílá bonz s metadaty do DB, že záznam vznikl a příznak, že data ještě nejsou v centrálním úložišti, bokem se to tlačí přes FTP a až to dotlačí, tak jde druhý bonz, co to zaregistruje do DB (používám Oracle, takže ty binární soubory pak registurji jak BFILE a jde s nima hejbat jak souborově, tak přes SQL jako BLOBy) a nastaví data přítomna. Tím pádme vím, že to jede, data vznikají a jen problém v dopravě. Takže signalizaci a ovládání dělat zvlášť a ne v jednom balíku, co pošle i ten záznam z domací webkamery z ložnice. :-)
-
Trochu jsem si ujasnil, co vsechno potrebuji a mam nekolik dalsich dotazu:
1) Pro nahravani dat na server pouzit HTTPS POST, nebo PUT?
2) Puvodne jsem chtel WiFi router s USB TL-WR842ND (http://www.alza.cz/tp-link-tl-wr842nd-d293991.htm) za 890 Kc (8MB flash a 32MB RAM).
Jenze do 8MB flash skoro nic nedam a potreboval bych vice RAM na ukladani souboru. S 32MB bych mohl ukladat vzdy cca 1 minutu a pak bych musel odesilat na server.
Doma u televize mam Androidi prehravac Minix Neo X5 mini (http://www.minix.com.hk/Products/MINIX-NEO-X5mini.html) s Androidem a chodi vyborne.
Na eBay jsem nasel nejlevnejsi (http://www.ebay.com/itm/Android-4-2-HD-3D-TV-Smart-Box-A20-Dual-Core-1-5GHZ-1GB-DDR3-4GB-1080P-EU-Plug-/371053759289) za 925 Kc. Ma dual-core 1,5GHz ARMv7 procesor, 1GB DDR3 RAM a 4GB flash.
V linuxu asi nepujde 3D akcelerace grafiky, ale to me vubec nevadi.
Linux mi spotrebuje cca do 50MB RAM (na OpenWrt se bezne vejdu do 10MB) a do zbytku muzu ukladat data. Ve srovnani s 32MB u wifi routeru je to rozdil. Do integrovanych 4GB flash si dam system a jeste mi kolik GB zustane volnych.
Porad jsem resil, jak uzivateli zpristupnit nastaveni. Puvodne jsem chtel mit na SD karte maly (radove jednotky MB) oddil s FAT32 a txt soubor s natavenim, jako to ma malina. Tady je HDMI, takze tam muze bezet nastavovaci TUI/GUI aplikace.
Je rozumna volba, koupit TV prehravac misto wifi routeru? Podle me ano.
Pokud bych nechtel pouzivat HDMI (na 100% tam bude SSH), tak by bylo dobre zakazat USB klavesnice a mysi. Stejne by je nikdo nemel pouzivat. Zkousel jsem na PC v Lubuntu do /etc/modprobe.d/ pridat blacklist na hid, usbhid a hid_generic moduly, ale po restartu klavesnice a mys porad funguje. Nasel jsem jenom par navodu pres xinput, ale to bude asi jen pro X a musi se hledat konkterni zarizeni klavesnice.
Jak v linuxu zakazat USB klavesnice a mysi?
-
1) Pro nahravani dat na server pouzit HTTPS POST, nebo PUT?
AFAIK, spravne by PUT melo ukladat nejaka data na danou uri. Tj. je to opak GET - nevim, jak moc dusledne se tohle ma dodrzovat - jestli pomoci GET ma clovek dostat presne to, co tam PUTem ulozil.
POST oproti tomu posila data nejakemu skriptu.
Takže pokud PUTem pošleš data A na uri U a pak na totéž uri PUTem data B, měl by být výsledný efekt stejný, jako bys tam A vůbec neposlal. Oproti tomu pokud pošleš data A POSTem na uri U a pak POSTem data B na totéž uri U, provede se nějaká činnost (daná tím U) prvně nad daty A a potom nad tady B - činnost může mít vedlejší efekty, takže tam neplatí totéž co u PUTu.
Jinak ale v praxi ti to muze byt celkem jedno - kdyz to pouzijes blbe, tak to jenom nebude podle specifikace semantiky http, ale to ti muze byt celkem fuk, pokud je to pro interni ucely...
Jak v linuxu zakazat USB klavesnice a mysi?
Asi by ses mel podivat do dmesg, jak se klavesnice hlasi. Pokud se nepletu, nektere biosy usb klavesnici nejak preonaci, aby vypadala jako "legacy". Ale nejsem si tim ted vubec jisty, snad to nekdo vi lip...
-
1) Pro nahravani dat na server pouzit HTTPS POST, nebo PUT?
AFAIK, spravne by PUT melo ukladat nejaka data na danou uri. Tj. je to opak GET - nevim, jak moc dusledne se tohle ma dodrzovat - jestli pomoci GET ma clovek dostat presne to, co tam PUTem ulozil.
POST oproti tomu posila data nejakemu skriptu.
Základní rozdíl mezi PUT a POST je že PUT má být idempotentní zatímco POST nemusí (a většinou není). Jestli ta data dostane ke zpracování skript nebo cokoliv jiného je úplně jedno.
-
Jinak ale v praxi ti to muze byt celkem jedno - kdyz to pouzijes blbe, tak to jenom nebude podle specifikace semantiky http, ale to ti muze byt celkem fuk, pokud je to pro interni ucely...
Ja vim, melo by to byt jedno. Jen me zajimalo nejspravnejsi reseni. Necham tam POST a bude vyreseno.
Jedno mnou postavene zarizeni (mam ho doma) posila namerena data na server pres GET a take to funguje. Ale spravne by mel byt GET jen na ziskavani dat. Uz jen treba kvuli obnove F5 v prohlizeci, POST kazdy prohlizec nedovoli znova odeslat, GET ano.
Asi by ses mel podivat do dmesg, jak se klavesnice hlasi. Pokud se nepletu, nektere biosy usb klavesnici nejak preonaci, aby vypadala jako "legacy". Ale nejsem si tim ted vubec jisty, snad to nekdo vi lip...
Ja jsem zkousel jenom virtualbox.
Toho se prave bojim, ze se kazda klavesnice/mys na kazdem pocitaci hlasi jinak.
Neexistuje nejaky univerzalni zpusob, jak zakazat klavesnice, mysi a vystupy z grafiky? Proste uzivateli co nejvic znesnadnit vstup do systemu.
Samozrejme tam bude potreba prihlaseni, takze kdyz nekdo pripoji klavesnici a namacka rm- rf /, nic se nestane.
-
Základní rozdíl mezi PUT a POST je že PUT má být idempotentní zatímco POST nemusí (a většinou není). Jestli ta data dostane ke zpracování skript nebo cokoliv jiného je úplně jedno.
Diky, to jsem nevedel. Ted mi zase vychazi lepsi PUT :-)
Pokud se data nepodari odeslat, ulozi se na SD kartu a pak se poslou znova.
Vice info: http://home.zcu.cz/~kkapusna/pages/HTTP.html
-
Kdyz v /etc/inittab zakomentujes vsechny radky
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
tak by se na konzolich nemely spoustet prihlasovatory a tim padem bude klavesnice k nicemu (protoze sice znaky do jadra posilat bude, ale zadnej program je nebude cist..)
jeste bude potreba vyse zakazat zkratku ctrl+alt+del a v jadre vypnout reakci na sysrq klavesu
-
Poslední dobou zde probíhají zajímavé debaty, které zřejmě používají toto médium jako informační kanál pro znalé.
-
jeste bude potreba vyse zakazat zkratku ctrl+alt+del a v jadre vypnout reakci na sysrq klavesu
...a reset tlačítko, zaheslovat bios a dát do krabice, která v případě narušení spustí autodestrukci, aby nebylo možný vytáhnout baterku :)
Nestačí tam mít prostě normální login prompt, protože kdo se do toho bude chtít dostat a bude k tomu mít fyzicky přístup, ten se tam stejně dostane?
;)
-
Reagoval jsem na otazku autora jak deaktivovat funkci klavesnice napadem, ktery resi alespon malou cast problemu - Neni na mem posouzeni abych rekl jestli je lepsi to nedelat.
-
Reagoval jsem na otazku autora jak deaktivovat funkci klavesnice napadem, ktery resi alespon malou cast problemu - Neni na mem posouzeni abych rekl jestli je lepsi to nedelat.
Jo však ty jsi to napsal dobře. Já se právě zamýšlím nad smysluplnotí toho požadavku.
-
Tak jsem odzkousel (zatim ve virtualu) minimalni instalaci Debianu a Xorg.
Mam uzivatele "config", ktery ma na konci ~/.bashrc
startx
exit
a v ~/.xsession
#!/bin/bash
java -jar mojeapp.jar
System nabehne normalne do textoveho rezimu. Kdyz se prihlasi uzivatel config, nastartuje X server a jedna aplikace v Jave. Zadna dekorace oken, proste nic. Jakmile uzivatel aplikaci zavre, automaticky se odhlasi. Jednoduche a funkci, jsem spokojeny.
Mam ale dotaz ohledne Javy. Rad bych napsal GUI v Java FX, protoze ve Swingu uz imho nema moc vyznam psat nove programy.
Jak je to s Javou FX na linuxu? Pokud jsem dobre googlil (a zkousel), tak OpenJDK 7 neumi Java FX aplikace spustit. OpenJDK 8 jeste neni v distribucich a ani jsem ji nezkousel.
Nejlepsi by bylo pouzit original Oracle Javu. Jenze v jejich licenci (http://www.oracle.com/technetwork/java/javase/terms/license/index.html) jsem nasel:
A. COMMERCIAL FEATURES. You may not use the Commercial Features for running Programs, Java applets or applications in your internal business operations or for any commercial or production purpose, or for any purpose other than as set forth in Sections B, C, D and E of these Supplemental Terms. If You want to use the Commercial Features for any purpose other than as permitted in this Agreement, You must obtain a separate license from Oracle.
To bude asi trochu problem, ja bych rad tu krabicku s aplikaci prodaval...
Zkousel jsem v Eclipse s Oracle javou 7 vygenerovat jar, je v nem 15MB velka knihovna jfxrt.jar, ale kdyz vysledne jarko spustim pod openjdk7, nejde to. A navic zahrnuta Oracle knihovna by muj problem nevyresila. Asi by bylo nutne pouzit OpenJDK8.
martin@martin:/tmp$ /usr/lib/jvm/java-7-oracle/bin/java -jar jfx.jar
martin@martin:/tmp$ /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java -jar jfx.jar
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: Invalid URL for class: jar:rsrc:jfxrt.jar!/com/sun/glass/utils/NativeLibLoader.class
at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:284)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:127)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:163)
at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47)
at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.UnsatisfiedLinkError: Invalid URL for class: jar:rsrc:jfxrt.jar!/com/sun/glass/utils/NativeLibLoader.class
at com.sun.glass.utils.NativeLibLoader.loadLibraryFullPath(NativeLibLoader.java:145)
at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:88)
at com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:31)
at com.sun.glass.ui.Application.loadNativeLibrary(Application.java:74)
at com.sun.glass.ui.Application.loadNativeLibrary(Application.java:81)
at com.sun.glass.ui.gtk.GtkPlatformFactory$1.run(GtkPlatformFactory.java:28)
at com.sun.glass.ui.gtk.GtkPlatformFactory$1.run(GtkPlatformFactory.java:25)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.glass.ui.gtk.GtkPlatformFactory.<clinit>(GtkPlatformFactory.java:25)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:190)
at com.sun.glass.ui.PlatformFactory.getPlatformFactory(PlatformFactory.java:20)
at com.sun.glass.ui.Application.Run(Application.java:104)
at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:274)
... 5 more
martin@martin:/tmp$
Na notebooku pro vyvoj pouzivam instalator od webupd8.org (http://www.webupd8.org/2014/03/how-to-install-oracle-java-8-in-debian.html). Je i verze primo pro Debian. Podle obsahu balicku (http://ppa.launchpad.net/webupd8team/java/ubuntu/pool/main/o/oracle-java8-installer/oracle-java8-installer_8u5-1~webupd8~3_all.deb), by se mela na ARM stahnout ARM verze.
Jenze pri instalaci balicku je nutne odsouhlasit Oracle licenci k Jave. Ale ja bych potreboval Javu mit predinstalovanou.
Jak nejlepe problem s Javou vyresit?
- Dat tam Oracle Java 8, ale co s licenci? Pujde to prodavat?
- Zkusit OpenJDK 8.
- Napsat to ve starem Swingu.
A nereste prosim vhodnost Javy. Vsechno v ni pisu, mam ji rad a pouziju ji. EOF
-
System nabehne normalne do textoveho rezimu. Kdyz se prihlasi uzivatel config, nastartuje X server a jedna aplikace v Jave. Zadna dekorace oken, proste nic. Jakmile uzivatel aplikaci zavre, automaticky se odhlasi. Jednoduche a funkci, jsem spokojeny.
Jak moc to potřebuješ mít bezpečný? U tohodle řešení si teď nejsem jistej, jestli by nestačilo uživateli dostatečně rychle mačkat ^C aby se dostal do shellu...
Robustnější řešení by bylo dát do inittabu něco na způsob "/bin/su - config /path/to/my_ingenious_app"
-
Jak nejlepe problem s Javou vyresit?
- Dat tam Oracle Java 8, ale co s licenci? Pujde to prodavat?
- Zkusit OpenJDK 8.
- Napsat to ve starem Swingu.
Nechapu proc se bojite Swingu. Je to perfektne proverena technologie a v posledni verzi (po Jave 6u10) nema zadne podstatne vady. Tak proc se tomu branit?
-
Jak moc to potřebuješ mít bezpečný? U tohodle řešení si teď nejsem jistej, jestli by nestačilo uživateli dostatečně rychle mačkat ^C aby se dostal do shellu...
Robustnější řešení by bylo dát do inittabu něco na způsob "/bin/su - config /path/to/my_ingenious_app"
Mate pravdu, zkousel jsem hned po prihlaseni drzet Ctrl+C a okamzite X spadly a dostal jsem se do terminalu.
Podle vasi rady jsem do /etc/inittab pridal radek:
app:2345:once:/bin/su config -c /usr/local/bin/mojeapp
a v /usr/local/bin/mojeapp mam:
#!/bin/bash
startx
java -jar /usr/local/bin/program.jar
killall Xorg
exit
Po nabootovani se spusti X a ukaze se prihlaseny terminal (v X) na uzivatele config. Moje java aplikace se ale nespusti. Jakmile napisu do X terminalu exit, nebo zmacknu Ctrl+D, vypise se chyba javy, ze nebezi X.
A sputit primo java app z inittab nemuzu, protoze mi nebezi X. Pokud ve skriptu /usr/local/bin/mojeapp mam startx &, spadne to hned vcetne chyboveho vypisu javy a vubec se nedostanu do terminalu.
Jeste jsem zkousel spoustet java app pomoci startx, /usr/local/bin/mojeapp:
#!/bin/bash
startx "java -jar /usr/local/bin/program.jar" -- :0
exit
Jenze to spadne na "xterm: /usr/bin/xterm: bad command line option -a"
Neprojde nic s pomlckou, ani 'startx mc -a" -- :0'. Naopak vse bez pomlcky funguje: 'startx mc" -- :0'
Nevite, jak to nejlepe vyresit? Me uz v tuto dobu dochazeji napady.
Take mi prijde zbytecne mit trvale spustene X, kdyz se aplikace pouzije jednou a pak v idelanim pripade jen parkrat za rok, nebo vubec. Castecne se mi to povedlo vyresit zapisem v inittab:
kb:2345:kbrequest:/bin/su config -c /usr/local/bin/mojeapp
pak se normalne nabootuje do textoveho rezimu a kdyz uzivatel zmackne Alt+sipkaNahoru, spusti se dany prikaz.
Nechapu proc se bojite Swingu. Je to perfektne proverena technologie a v posledni verzi (po Jave 6u10) nema zadne podstatne vady. Tak proc se tomu branit?
Ja se Swingu nebojim, par aplikaci jsem v nem uz taky napsal.
Ale pokud jste zkousel Javu FX, je o hodne lepsi. U noveho projektu se mi FX zda jako lepsi volba. Ale kvuli mnou vyse popsanym problemum asi nakonec budu muset skoncit u Swingu...
-
Prvně poprosím o tykání :)
Po nabootovani se spusti X a ukaze se prihlaseny terminal (v X) na uzivatele config. Moje java aplikace se ale nespusti. Jakmile napisu do X terminalu exit, nebo zmacknu Ctrl+D, vypise se chyba javy, ze nebezi X.
Omlouvám se, tady jsem tě zmátl, napsal jsem to moc jako zkratku. To řešení s .xsession bylo správné. Tak, jak jsi to udělal teď, to fungovat nemůže, protože se prvně spustí Xka a po jejich skončení teprve java. I kdybys Xka spustil s &, tak to fungovat nebude, protože se jednak java spustí moc rychle (Xka ještě nebudou poslouchat) a navíc nebude nastavená proměná DISPLAY.
Takže pokud bys to chtěl udělat takhle, tak do toho inittabu dát jenom "su - config startx" a do .xsession už tu aplikaci.
Take mi prijde zbytecne mit trvale spustene X, kdyz se aplikace pouzije jednou a pak v idelanim pripade jen parkrat za rok, nebo vubec. Castecne se mi to povedlo vyresit zapisem v inittab:
kb:2345:kbrequest:/bin/su config -c /usr/local/bin/mojeapp
pak se normalne nabootuje do textoveho rezimu a kdyz uzivatel zmackne Alt+sipkaNahoru, spusti se dany prikaz.
Anebo to udělat tak, že jako shell nastavíš uživateli config script, který spustí Xka a v nich tu aplikaci (opět pomocí .xsession). Takže to bude fungovat tak, že bude zobrazený normální login prompt a jakmile se uživatel přihlásí, spustí se mu Xka+aplikace. Výhoda tohodle řešení je v tom, že můžeš mít různé uživatele s různými aplikacemi a taky normální uživatele s normálním shellem (budeš chtít třeba funkčního roota...)
Jenom si musíš zjistit, jaká má tvoje distribuce omezení na shelly - jestli nebudeš muset tu aplikaci přidat i do /etc/shells.
-
Jestli ta data dostane ke zpracování skript nebo cokoliv jiného je úplně jedno.
Myslel jsem to tak, že při PUT má ten případný skript ta data uložit někam, odkud je při GET na stejné uri zase dostanu zpátky, zatímco POST může dělat cokoli.
Samotná idempotence je slabý požadavek, ne? Pokud by např. PUT dával data jinam než odkud je bere GET, tak to taky porušuje sémantiku - a přitom to idempotentní je.
No ale to jsme trochu OT :)
-
Omlouvám se, tady jsem tě zmátl, napsal jsem to moc jako zkratku. To řešení s .xsession bylo správné. Tak, jak jsi to udělal teď, to fungovat nemůže, protože se prvně spustí Xka a po jejich skončení teprve java. I kdybys Xka spustil s &, tak to fungovat nebude, protože se jednak java spustí moc rychle (Xka ještě nebudou poslouchat) a navíc nebude nastavená proměná DISPLAY.
Takže pokud bys to chtěl udělat takhle, tak do toho inittabu dát jenom "su - config startx" a do .xsession už tu aplikaci.
Anebo to udělat tak, že jako shell nastavíš uživateli config script, který spustí Xka a v nich tu aplikaci (opět pomocí .xsession). Takže to bude fungovat tak, že bude zobrazený normální login prompt a jakmile se uživatel přihlásí, spustí se mu Xka+aplikace. Výhoda tohodle řešení je v tom, že můžeš mít různé uživatele s různými aplikacemi a taky normální uživatele s normálním shellem (budeš chtít třeba funkčního roota...)
Jenom si musíš zjistit, jaká má tvoje distribuce omezení na shelly - jestli nebudeš muset tu aplikaci přidat i do /etc/shells.
Tak jsem dal do ~/.xsession
#!/bin/bash
java -jar mojeapp.jar
a do /etc/inittab
kb:2345:kbrequest:/bin/su config startx
Nyni po nabootovani kdyz zmacknu Alt+sipkaNahoru, najedou X a spusti se java aplikace. Po zavreni dojde k odhlaseni. Zkousel jsem ctrl+c a nijak nereaguje. Vypada to dobre, jenom bych nejak potreboval zajistit prihlaseni. Takhle kazdy, kdo zmackne Alt+sipkaNahoru, ziska bez hesla pristup k java aplikaci.
Pokud dam jako login shell uzivateli skript (v /etc/shells ho mam):
#!/bin/bash
startx xclock --
exit
Uzivateli po prihlaseni nabehnout X a xclock program.
Jakmile mu ale nastavim jako shell
#!/bin/bash
startx "java -jar /usr/local/bin/program.jar" --
exit
spadne to na "xterm: /usr/bin/xterm: bad command line option". Takze startx temer urcite spousti jemu zadany prikaz pres xterm, ktery nechape muj prikaz.
Co mi funguje:
uzivatel config ma shell /usr/local/bin/mojeapp:
#!/bin/bash
startx /usr/local/bin/mojeapp2 --
exit
a v /usr/local/bin/mojeapp2 je
#!/bin/bash
java -jar /usr/local/bin/program.jar
soubor ~/.xsession uzivatel vubec nema. Komplikovane, ale funkcni.
Jen pro zajimavost: nevis, jak upravit puvodni prikaz, aby xterm pochopil parametry predane prikazu? Je zbytecne, mit 2 skripty.
Distribuce je Debian 7.5.0.
-
Jakmile mu ale nastavim jako shell
#!/bin/bash
startx "java -jar /usr/local/bin/program.jar" --
exit
spadne to na "xterm: /usr/bin/xterm: bad command line option". Takze startx temer urcite spousti jemu zadany prikaz pres xterm, ktery nechape muj prikaz.
[...]
Jen pro zajimavost: nevis, jak upravit puvodni prikaz, aby xterm pochopil parametry predane prikazu? Je zbytecne, mit 2 skripty.
Distribuce je Debian 7.5.0.
startx jsem na linuxu nepoužil už drahně let, takže fakt nevím :) Aspoň podle http://manpages.debian.org/cgi-bin/man.cgi?query=startx&apropos=0&sektion=0&manpath=Debian+7.0+wheezy&format=html&locale=en by snad mohlo funguvat:
startx java -jar /usr/local/bin/program.jar --
- tj. to, co máš, ale bez uvozovek. Pokud to fungovat nebude, tak ještě můžeš zkusit něco na způsob
startx xterm -e 'java -jar /usr/local/bin/program.jar' --
Pokud je problém v tom, že startx žere uvozovky, tak zkusit dát dvoje:
startx "'java -jar /usr/local/bin/program.jar'" --
Ale to jenom tak tápu, jak říkám, roky jsem to nepoužíval a instalovat Debian do virtálu se mi nechce. Snad nějaký debianista poradí.
-
Zkus dat programy, ktere se maji spustit po startu X, do souboru .xinitrc a jako posledni dej napr. exec xy. Po ukonceni programu xy se ukonci take X. Pak staci spoustet X pomoci startx bez parametru nebo jenom s parametry pro dpi apod.