Sziasztok.
Adott egy kód:
<?php
$output = shell_exec('init 0');
echo "<pre>$output</pre>";
?>
Azt szereetném elérni, hogy ha egy böngészőben bejön egy weboldal, akkor legyen ott egy button, ami indít egy php kódot, amely meghív szerveroldalon egy bash-scriptet.
Az egész nem lenne internetre kötve, semmiféle extrát nem szeretnék, csupán azt, hogy mint a webminben, elindíthassak egy scriptet, pl. a shutdown-t, vagy valami mást.
Tanácstalan vagyok a mikéntben, mert könnyen lehet, hogy html-ben egy javascript is elég lenne egy shell-híváshoz.
Szerintetek mit tegyek?
- 5227 megtekintés
Hozzászólások
Minden részletezés előtt azt javasolnám, hogy kezdj valamilyen webdev alapozó tankönyvvel, oktató anyaggal, mert több részében a kérdésednek vannak gondok, pl. javascript-ből shell hívás lehetősége, vagy az, hogy a html->php->shell nem külön részként szerepel az elképzelésben. Van egy rakás tananyag, ami ingyen és legális formában elérhető a neten, sok hibája ellenére a w3schools.com indulásnak nem rossz.
Pár ötlet, amivel el tudsz indulni:
- a php kimenetét a böngészőben meg tudod jeleníteni, ez lehet html IS, ebben a html-ben lehet egy link, ami egy másik php fájlra mutat, amiben a fentebb leírt kódod van
- a (html-be ágyazott) javascript shell hívásokat nem tud indítani, nem ez a célja, ezt a fentebb írt módon érdemes tisztázni, php-vel párban lehet használni, egyik erre, másik arra jó (megjegyzés: van php helyett használható js is, de ezt most nem keverném ide, nem erről írtál)
- írtad, hogy ez nem publikus lenne, biztonsági oldaláról ezesetben nincs nagyon szükség beszélni
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
> a (html-be ágyazott) javascript shell hívásokat nem tud indítani
köszi a részleteket, tulajdonképpen erre voltam főleg kíváncsi, javascriptekkel régebben sem foglalkoztam annyira.
php lesz az alap, az fog include-olni egy html fájlt, csakhogy abban lesz ugye a gomb.
De hogy a button egy form része legyen, vagy valami link...
Nos, megint homélyosan tettem fel a kérdést, mint a topicnyitóban, mert az igazság az, hogy borzalmasan fáradt vagyok.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
link vagy gomb: ha nincs input mezőre szükség, és csak 1 vagy pár paramétered van, akkor link egyszerűbb, nem kell köré egy komplett form
javascript: van szerver oldali javascript is (node.js és hasonlók), az tud shell-t hívni, de te nem erről írtál, és amit akarsz arra jó a php is. a másik megoldás, ha bővíteni akarod, akkor javascript-eket aggathatsz a link nélküli gombokra, azok egy php fájlnak ajax-al post-olgatnak, hogy mit csináljanak, azok meg visszajelzik, hogy sikerült-e. w3schools-on erre is biztos van példa.
bátran, de alaposan érdemes ennek nekimenni, ha saját felhasználásra lesz akkor lehet mindent, de a fentiekben leírtakat ha már fizetős munkáról van szó még 10x jobban át kell gondolni (pl.: linkek nehogy úgy nézzenek ki, hogy vegrehajto.php?command=self-destruct%20initiate, mert ebbe ha egy kicsit is publikus helyre kerül bárki bármit beleír, és a php-d meg végre is hajtja, de nem is folytatom)
- A hozzászóláshoz be kell jelentkezni
csinálsz egy PHP-t ami kiír egy html form-ot, ami önmagának post-ol. (mármint a PHP-nek)
(ha a post tartalma üres, akkor kiiratod a form-ot, ha van -értelmes- tartalma, akkor csinálsz valamit (és kiiratod a form-ot) )
pl:
<?php
if (isset($_POST['action']))
// itt értelmezed a form által küldött adatokat
{
if($_POST['action']=="action1")
{$cmd="echo hello";shell_exec($cmd);}
if($_POST['action']=="action2")
{$cmd="echo world";shell_exec($cmd);}
}else
// itt generalod a html form-ot?>
- A hozzászóláshoz be kell jelentkezni
zsír!
ezen elindulok.
Szóval önmagának postoló formot tartalmazó php-kódot is lehet írni..
köszi
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Lehet sokmindent, ilyen rövid programoknál egy méretig még nem is gond, de én javaslom inkább szétszedni már most. Csinálj egy html form-ot (generálhatja egy php azt a html-t, ha van benne változó rész), az post-oljon valamilyen php-re, az hajtson végre valamit, és írja ki ha nem sikerült, vagy ha van annak a valaminek kimenete, és legyen rajta egy vissza gomb. Vagy ha egy felületet akarsz, akkor a shell parancs kimenetét berakod session-be (w3schools-on biztos van egy pársoros demo rá), parancs futtatása után visszairányítasz a "főoldalra", a html formra, és ott kiírod a session tartalmát.
- A hozzászóláshoz be kell jelentkezni
Vagy ha GET-et használsz, akkor tudod könyvjelzőzni a különböző parancsokat, így egyetlen kattintással hajthatod végre a kívánt parancsot, ekkor HTML-mel sem kell bohóckodni. Ha a kimenetre is szükséged van, akkor simán kiechozod pre tagek között.
De ettől óvva intelek, ha leállítás, vagy hasonló "végzetes" parancsokat akarsz futtatni, oda nem árt végrehajtás előtt egy jóváhagyás kérése is (legegyszerűbb esetben JS confirm-mal).
- A hozzászóláshoz be kell jelentkezni
Szerintem többek között pont emiatt ne csináld GET-tel. A GET ilyen esetben (más esetben sem) nagyon nem biztonságos, bár azt írtad, hogy csak belső hálózaton lesz, de vajon ott soha nem fordulhat elő, hogy valaki a böngésző előzmény listájából rákattint valamire ami ott van?
A végzetes parancsokról szóló mondanivalóval messzemenően egyetértek - fogadd meg jól.
- A hozzászóláshoz be kell jelentkezni
Csak én fogom használni és csak a saját böngészőmmel.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Sajnos ez sem megy.
Így írtam át:
<?php
if (isset($_POST['action']))
{
if($_POST['action']=="reboot")
{$cmd="echo hello> /tmp/hell";shell_exec($cmd);}
if($_POST['action']=="shutdown")
{$cmd="echo world> /tmp/hell";shell_exec($cmd);}
}
else
include('./index.html')
?>
ha a /tmp/hell fájl megkeletkezne, lefutna a kicsike. De nem keletkezik meg...
terminálban futtatva a .php fájlt semmi különleges hibaüzenet, csak annyi, hogy a php.ini-ben #-et használtam 2 sorban balga módon. Javítottam, a kimenet ezután tiszta, de a cél még mindig elérhetetlen. Nem mondok le róla, mert ha webminben lehet saját scriptet futtatni, így is lehet valahogy
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Mi lenne ha lepesenkent haladnal?
Elso lepesben megneznem, hogy jol mukodik-e a form egy echo $_POST['action'];
kiiratassal, hogy megfelelo erteket kapok-e.
Masodik lepesben valami echo shell_exec('ls -lsa');
kiiratassal kideritenem, hogy mukodik-e a script hivas.
Amennyiben az elso ket lepes sikeres, megprobalnam osszekombinalni oket.
Sic Transit Gloria Mundi
- A hozzászóláshoz be kell jelentkezni
igen, én mondjuk szoktam olyat beépíteni, hogy if($DEBUG) { print "action: $_POST['action']."
\n";}
és akkor egyből látod, hogy megjött-e az érték. a html legalább megjelenik? :-)
- A hozzászóláshoz be kell jelentkezni
"$cmd="echo world> /tmp/hell";shell_exec($cmd);"
Van valami értelme annak, hogy a fájlba írást shell parancsként valósítod meg?
Miért nem rakod a /tmp/hell fájlba a kívánt szöveget szimplán file_put_contents-szel?
szimplán:
file_put_contents("/tmp/hell", "world");
Ennek a sikerességét is látod, hibaüzenetet is kapsz, ha jogosultságprobléma van.
- A hozzászóláshoz be kell jelentkezni
Ha semmi egyéb interakció nem kell, akkor én úgy csinálnám, hogy egy HTML-fájlt kézzel megszerkesztenék (vagy ha nagyon sok akció kell, akár szkripttel generáltatnám), arra rátenném a kívánt gombokat, mint hivatkozásokat, amelyek egy php-fájlra mutatnak, amelyek a GET függvényében futtatnak le valamit. Röviden:
index.html
<html>
<a href=action.php?action=reboot>Reboot</a>
<a href=action.php?action=shutdown>Shutdown</a>
</html>
action.php
<?
switch ($_GET["action"]) {
case "reboot": exec("reboot now"); break;
case "shutdown": exec("shutdown -h now"); break
}
?>
Persze lehet kozmetikázni akár a HTML-t, akár a PHP-t, de az alapötlet úgy gondolom, érthető.
- A hozzászóláshoz be kell jelentkezni
Kipróbáltam legelsőnek ezt, de sajnos nem futtatja le a scriptet. Az action.php futtatható, www-data a tulaj is, nemtom mi lehet..
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Azt azért konkretizáld legalább magadnak, hogy mi nem fut le? A php? Az exec? (php.ini_ben engedve van pl?) Simán a shutdown, mert a www-data-nak nincs joga? stbstb
- A hozzászóláshoz be kell jelentkezni
A shutdown és a reboot. Alábbiakban aszem megoldódik, jogosultsági problémák vannak
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Shutdown és társaihoz root jog kell, azt egy www-data nem igazán teheti meg...
- A hozzászóláshoz be kell jelentkezni
Ezt jól benéztem.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
.php nak miért,mióta kell futtathatónak lennie?
- A hozzászóláshoz be kell jelentkezni
nem tudtam hogy nem kell, anno amikor a joomlával kínlódva anyáztam, akkor kíséreltem meg ezt is, aztán megszokásból megmaradt.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
ott a :
<?
után egy "php" is kellett így:
<?PHP
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Én ehhez annyit tennék hozzá aranyszabályként, hogy nem illik GET hívásokat használni olyasmire, ami állapotváltozással jár a szerveren.
Ennek több oka van, a részletek itt láthatók: http://stackoverflow.com/a/705789/747704
Célszerűbb linkek helyett űrlapot, és POST hívást használni.
- A hozzászóláshoz be kell jelentkezni
Megcsináltam debianon mindent lépésről lépésre, le is fut minden. Ugyanezt átrámoltam Atch-ra, de ott nem indulnak a scriptek.
Szerintem a problémám Arch-specifikus, vagy a php rosszul van beállítva -- ez utóbbi tényleg kínai számomra, mármint a lehetséges hiba oka.
a@fekete:/var/www/html/php$
cat action.html
<html>
<a href="action.php?action=reboot">Reboot</a>
<a href="action.php?action=shutdown">Shutdown</a>
</html>
a@fekete:/var/www/html/php$ cat action.php
<?php
switch ($_GET["action"]) {
case "reboot": exec("./reboot-rpi.sh"); echo('reboot now...'); break;
case "shutdown": exec("./shutdown-rpi.sh"); echo('shutdown -h now...'); break;
}
?>
a@fekete:/var/www/html/php$ cat reboot-rpi.sh
#!/bin/bash
echo "reboot now" >/tmp/hopp2
#reboot now
a@fekete:/var/www/html/php$ cat shutdown-rpi.sh
#!/bin/bash
echo "shutdown -h now" >/tmp/hopp4
# shutdown -h now
a@fekete:/var/www/html/php$
(...csak elfelejtettem kirakni a code-tageket. Már ott van.)
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Valami hibaüzenet csak van, pl. az apache logjai között én szétnéznék. Az exec
függvénynek pl. első körben teljes (abszolút) elérési utat adnék.
- A hozzászóláshoz be kell jelentkezni
teljes elérési úttal is próbáltam, ami mondjuk felesleges volt a debianos tesztemnél. Ott tényleg lefutott minden.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Debianon működik minden, Arch-on nem.
Ott nincs www-data...
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Hello,
Pár napja én is pont ezzel kezdtem el szórakozni, lassan kezd összeállni egy kis oldal, pár backup, mount, shutdown gombbal, illetve kimenetek megjelenítésével.
Jelenleg így néz ki, az apache default oldalát használtam fel.
Természetesen csak itthoni hobbi projekt, a jogosultsági problémák kikerülése nem túl biztonságos éles környezetben :)
www.letix.hu/webiface.PNG
HTML-be az alábbi kell: (a sorok elejére is kell kezdő relációs jel)
form action="script.php">
input type="submit" value="Script">
/form>
script.php-ba:
<?php
shell_exec("script.sh");
header('Location: http://"ipaddress"/index.html?success=true');
?>
script.sh -ba meg amit szeretnél.
Persze a webszervert futtató usernek kell jog, meg ugye +x a script-re is.
Vagy sudoers..
udv
letix
-----------------------------------------
Linux parancsok, kezdőknek
- A hozzászóláshoz be kell jelentkezni
Arch-on futtatok webszervert, ott tudtommal a rootnak mindenféle joga van.
De sajnos a fentiek szerint sem megy a dolog böngészővel, már gondolkodom az egész ötlet kikerülésével, vagy egyszerűen lemondok a funkcióról.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Fentebb azt írtad, hogy www-data nevében fut a webserver,
ha így van, nem fogja leállítani a script a gépedet jog hiányában.
1: Érdemes lenne a script-ben a hibacsatornát file-ba iránytani valahogy így:
parancs 1> kimenet.txt 2> error.txt
2: Én a te helyedben egy pofonegyszerű Hello World scripttel tesztelném file-ba irányítva. Ha ez megy, akkor lehet folytatni a shutdown-al, amihez szerintem a www-data-t fel kellene NOPASSWD-vel venni a sudoers-be.
Természetesen ilyen felállást csak otthon, izolált körülmények között!
udv
letix
-----------------------------------------
Linux parancsok, kezdőknek
- A hozzászóláshoz be kell jelentkezni
debianon www-data mellett már mindenem megy, mint ahogy fentebb írtam, kilistázva a fájlokat.
A probléma Arch-on van, képtelen vagyok az elmebeteg tájszólásaival megküzdeni. Még a webszerver is máshogy fut? Semmit sem értek. Minden, ami debianon, slackware-en ment, ezen nem működik, hiába küzdök már 2 hete.
Kínomban a html fájlban a link egy csupasz php állományra mutat, ami egy bash-scriptet indít el.
# cat /srv/http/domain1.com/nmea/shutdown.php
<?php
exec("/srv/http/domain1.com/nmea/shutdown-rpi.sh")
?>
# cat shutdown-rpi.sh
#!/bin/bash
systemctl reboot
ha terminálban indítom a php állományt, lefuttatja a bash scriptet. Ugyanezt böngészőn keresztül NEM teszi meg.
Kicseréltem a systemctl... sort egy fájlba írásra a /tmp-be, de böngészőn futtatva az sem megy.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
192.168.12.25 - - [15/Jan/2017:20:24:50 +0100] "GET /nmea/shutdown.php HTTP/1.1" 200 -
ez jelzi, hogy hol a böngésző. Meg hogy a fájl bevirít.
Aztán jön 1-2 érdekesség:
[Thu Jan 01 01:00:16.945344 1970] [http2:warn] [pid 139] AH02951: mod_ssl does not seem to be enabled
[Thu Jan 01 01:00:16.946497 1970] [lbmethod_heartbeat:notice] [pid 139] AH02282: No slotmem from mod_heartmonitor
[Thu Jan 01 01:00:18.341993 1970] [mpm_prefork:notice] [pid 139] AH00163: Apache/2.4.18 (Unix) configured -- resuming normal operations
[Thu Jan 01 01:00:18.342370 1970] [core:notice] [pid 139] AH00094: Command line: '/usr/bin/httpd -D FOREGROUND'
Failed to set wall message, ignoring: The name org.freedesktop.PolicyKit1 was not provided by any .service files
Failed to reboot system via logind: The name org.freedesktop.PolicyKit1 was not provided by any .service files
Failed to start reboot.target: The name org.freedesktop.PolicyKit1 was not provided by any .service files
...szóval a reboot nem futott le.
Kipróbáltam ezt:
#systemctl status polkit.service
* polkit.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
Rendben, akkor húzzuk fel a polkitet, legfeljebb upgrade lesz ha már fent van. Erre jött a gyomorbarúgás:
# pacman -S mate-polkit
resolving dependencies...
looking for conflicting packages...
Packages (22) atk-2.18.0-1 compositeproto-0.4.2-3 gdk-pixbuf2-2.32.3-1 gtk-update-icon-cache-3.18.6-1
gtk2-2.24.29-1 hicolor-icon-theme-0.15-1 inputproto-2.3.1-1 jasper-1.900.1-14 js17-17.0.0-3
libcroco-0.6.11-1 libcups-2.1.2-3 librsvg-2:2.40.11-1 libxcomposite-0.4.4-2 libxcursor-1.1.14-2
libxi-1.7.6-1 libxinerama-1.1.3-2 libxrandr-1.5.0-1 nspr-4.11-1 polkit-0.113-4 randrproto-1.5.0-1
xineramaproto-1.2.1-3 mate-polkit-1.12.0-1
Total Download Size: 9.71 MiB
Total Installed Size: 77.93 MiB
:: Proceed with installation? [Y/n] y
Minek a gtk és a többi szotty egy szerverre?!
Na, mára itt dobtam el az agyam a csomagkezelőkkel, függőségekkel együtt, amikor a szimpla polkitet akartam felhúzni:
# pacman -S polkit
resolving dependencies...
looking for conflicting packages...
Packages (3) js17-17.0.0-3 nspr-4.11-1 polkit-0.113-4
Total Download Size: 1.78 MiB
Total Installed Size: 9.13 MiB
:: Proceed with installation? [Y/n] y
:: Retrieving packages ...
error: failed retrieving file 'nspr-4.11-1-armv6h.pkg.tar.xz' from archlinux.surlyjake.com : The requested URL returned error: 404
error: failed retrieving file 'nspr-4.11-1-armv6h.pkg.tar.xz' from mirrors.evowise.com : The requested URL returned error: 404
error: failed retrieving file 'nspr-4.11-1-armv6h.pkg.tar.xz' from mirror.rackspace.com : The requested URL returned error: 404
error: failed retrieving file 'nspr-4.11-1-armv6h.pkg.tar.xz' from mirror.aarnet.edu.au : The requested URL returned error: 404
error: failed retrieving file 'nspr-4.11-1-armv6h.pkg.tar.xz' from archlinux.mirror.digitalpacific.com.au : The requested URL returned error: 404
error: failed retrieving file 'nspr-4.11-1-armv6h.pkg.tar.xz' from ftp.iinet.net.au : The requested URL returned error: 404
error: failed retrieving file 'nspr-4.11-1-armv6h.pkg.tar.xz' from mirror.internode.on.net : The requested URL returned error: 404
^Cerror: failed retrieving file 'nspr-4.11-1-armv6h.pkg.tar.xz' from ftp.swin.edu.au : The requested URL returned error: 404
Interrupt signal received
Webes letöltésnél próbálkozás itt:
http://us.mirror.archlinuxarm.org/armv7h/community/
van kétféle is. Szóval itt leálltam, ez magas.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Tipp: nem friss a csomagadatbázisod (4.13 az aktuális polkit), bónusz: vélhetően olyan mirror(oka)t használsz, amely(ek) az armv6h csomagokat nem tartalmazza('k).
pacman -Syu polkit
- A hozzászóláshoz be kell jelentkezni
Ez is lefut 404-gyel.
Próbálkoztam más mirrorokkal is, teszteltem egy mirrorgeneráló weboldalt is vagy mit, egy élmény volt. Most visszaállítottam a régit. Hiányos, félrevezető vagy félbeszakadt leírások sorozatát olvastam és próbáltam végig.
Ami a csúcs, hogy ha egy teljes upgrade-et végigfuttatok az Arch-omon, akkor gyakorlatilag képtelen vagyok rájönni, miért megy tönkre az egész (gyakorlatilag megszűnik access pointként üzemelni...) Szóval amit eddig ezen elértem, egy csoda.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Hát, pl. eredetileg armv6h csomagokat keresve kapsz hibát, majd belinkelsz egy armv7h tárolót... Soha életemben nem láttam Arch-ot, de szerintem ez mindenképpen problémát okoz.
Szóval lehet, először el kéne indulni onnan, hogy a választott disztribúcióba (és annak csomagkezelőjébe) beletanulsz, különben minden max. véletlenül fog menni...
- A hozzászóláshoz be kell jelentkezni
Vagy inkább megtanulok erről is lemondani.
- A hozzászóláshoz be kell jelentkezni
A ,,beletanulás'' csak és kizárólag rendesen összerakott disztribúciókból kiidulva lehet. Sajnos ilyet nem nagyon találni. Tettem egy végső kísérletet, elölről kezdtem az egészet, a szűz distrib csomagkezelőjével. Ezt keptam:
# pacman -S polkit
resolving dependencies...
looking for conflicting packages...
Packages (3) js17-17.0.0-3 nspr-4.11-1 polkit-0.113-4
Total Download Size: 1.44 MiB
Total Installed Size: 9.13 MiB
:: Proceed with installation? [Y/n] y
:: Retrieving packages ...
error: failed retrieving file 'nspr-4.11-1-armv6h.pkg.tar.xz' from mirror.archlinuxarm.org : The requested URL returned error: 404
warning: failed to retrieve some files
error: failed retrieving file 'js17-17.0.0-3-armv6h.pkg.tar.xz' from mirror.archlinuxarm.org : The requested URL returned error: 404
warning: failed to retrieve some files
error: failed to commit transaction (unexpected error)
Errors occurred, no packages were upgraded.
ezzel be is fejeztem.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
pacman -Syu polkit
- A hozzászóláshoz be kell jelentkezni
ez felpakolja ugyan a polkitet, de aztán upgradeli a teljes rendszert, amellyel gyakorlatilag hidegrevágok mindent. Sokszor próbálkoztam ezzel, az eredmény az volt, hogy elölről kellett kezdenem mindent. Minden sikerült egészen a teljes upgrade-ig. Magyarázat nulla.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
ez felpakolja ugyan a polkitet, de aztán upgradeli a teljes rendszert, amellyel gyakorlatilag hidegrevágok mindent.
Arch alatt bizony ez kell - mármint a teljes upgrade. Olyan nincs, hogy csak egy csomagot frissítesz, a többi harmincat meg nem. Így marad a rendszerered (elvileg) "összeszedett". Ha teszem azt, az A csomag függősége a B csomag, és csak az A-t frissíted, akkor egy olyan A-t kapsz, ami az újabb verziójú B-vel lett fordítva - neked pedig egy régebbi B-d van. Sok esetben nem okoz gondot, de amikor igen, akkor jön, hogy "sz@r a rendszer", "elbszták a csomagolók", "nem rendesen összerakott a disztró", stb.
- A hozzászóláshoz be kell jelentkezni
A pacman -Sy
megvolt? Ez frissítené a csomagadatbázisodat, ami ELAVULT!!! Jelen pillanatban itt a js17
verziója 17.0.0-4, míg a te esetben 17.0.0-3 verziót keres!!!
- A hozzászóláshoz be kell jelentkezni
Azt hiszem a tied volt a varázsszó.
Visszaraktam az eredeti mirrorlistemet, próbálkoztam még, majd jött az -Sy.
Eredmény (a promptomat ignoráld):
[Mi kell? root@Takarodj /]# pacman -Syu polkit
:: Synchronizing package databases...
core 174.2 KiB 697K/s 00:00 [######################] 100%
extra 2.3 MiB 488K/s 00:05 [######################] 100%
community 3.6 MiB 254K/s 00:15 [######################] 100%
alarm 37.7 KiB 628K/s 00:00 [######################] 100%
aur 28.5 KiB 1423K/s 00:00 [######################] 100%
:: Starting full system upgrade...
:: Replace fuse with extra/fuse2? [Y/n] n
:: Replace libdbus with core/dbus? [Y/n] ^C
Interrupt signal received
(itt megszakítottam, nem hagytam, hogy lefusson, mert még megint elgúródik)
[Mi kell? root@Takarodj /]# pacman -Sy
:: Synchronizing package databases...
core is up to date
extra is up to date
community is up to date
alarm is up to date
aur is up to date
[Mi kell? root@Takarodj /]# pacman -S polkit
resolving dependencies...
looking for conflicting packages...
Packages (3) js17-17.0.0-4 nspr-4.13.1-1 polkit-0.113-4
Total Download Size: 1.44 MiB
Total Installed Size: 9.15 MiB
:: Proceed with installation? [Y/n] y
:: Retrieving packages ...
nspr-4.13.1-1-armv6h 166.6 KiB 595K/s 00:00 [######################] 100%
js17-17.0.0-4-armv6h 1312.7 KiB 1067K/s 00:01 [######################] 100%
(3/3) checking keys in keyring [######################] 100%
(3/3) checking package integrity [######################] 100%
(3/3) loading package files [######################] 100%
(3/3) checking for file conflicts [######################] 100%
(3/3) checking available disk space [######################] 100%
(1/3) installing nspr [######################] 100%
(2/3) installing js17 [######################] 100%
(3/3) installing polkit [######################] 100%
[Mi kell? root@Takarodj /]#
Szóval kösz. Egyszerű életunt ember vagyok, csodálom, ha valami sikerül a képességeim határán.
----------
A tárgy szóban megfogalmazott problémát azonban ez nem oldotta meg, végig tévúton voltam. Hiába van polkit, a "systemctl reboot"-ot tartalmazó bash-scriptet nem lehet lefuttatni PHP-ből, böngészőn keresztül.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Csak szólok, hogy itt írtam, hogy "nem friss a csomagadatbázisod": https://hup.hu/node/151444?comments_per_page=9999#comment-2056790
- A hozzászóláshoz be kell jelentkezni
Pontosan.
- A hozzászóláshoz be kell jelentkezni
Meg hogy a fájl bevirít.
Nókomment. Nyilván semmi log nincs arról, hogy a php-ból egy külső parancs futna. Erről ennyit.
- A hozzászóláshoz be kell jelentkezni
Mesteri leírások egyike:
http://raspberrypi.stackexchange.com/questions/26357/shutting-down-rasp…
Itt az
"</a>"
zárás előtt nincs string. remek kód, böngészőben meg sem jelenik, ha beteszem a hiányzó stringet, akkor sem megy. Ilyen leírásokból eddig hatot néztem meg és próbáltam ki, mára azt hiszem elegem is lett ebből.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
a hibakeresés, általánosan a diagnosztika első alaptörvénye, hogy EGYSZERRE CSAK EGY VÁLTOZTATÁST tesztelünk. nem komplett ismeretlen teszteletlen kódot. (ahogy fentebb leírták) próbáld ki, ha csinálsz egy php fájlt, amiben csak a shell_exec('echo valami > log.log'); van, majd utána ennek nézd meg a kimenetét a fájlban, vagy ha van telepítve notify-send akkor azzal egyszerűen (notify-send php-magus "ez itt a legmenőbb szál") követni hol tartasz.
ez után csinálj köré változásokat, egyesével, pl. az if-es elágazás többféle action-el, amiket tesztelj szintén, majd ez után a html form az egész elé, ...
ne akard megúszni, mások ismeretlen-teszteletlen-nemműködő kódját stackoverflow-ról bemásolni, mert csak megunod a problémákat, mivel nem is érted mi okozza őket. ha te írod a kódot nagyobb esélyed van megérteni gyorsan, hogy hol a hiba.
hajrá.
- A hozzászóláshoz be kell jelentkezni
Igen, így szoktam pontosan. Csak tudod nem vagyok otthon a könyveim között, a net meg akadozik, szakad, időm is kevés van, mert külföldön mindig az idő a kevés. Aztán még egy kis stressz, és kész a homlokom a falhoz vágáshoz.
Holnap lehet, hogy elölről kezdem. Hogy ebből mi lesz...
jóccakát!
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Fordítva ülsz a lovon.
1. a php script tegyen le egy jelző fájlt abba a könyvtárba ahova írhat.
2. inotifycrontab meg olvassa ezt a könyvtárat és hajtsa végre az utasításokat.
--
A főnököm mindig megtartja amit ígér, ha pénzt ígér azt is!
- A hozzászóláshoz be kell jelentkezni
megnézem, mit szól ehhez az Arch
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
dupla
- A hozzászóláshoz be kell jelentkezni
Én erre a célra CGI-t használnék.
Kicsit több beállítás apache oldalon (imho 2-3 sor a httpd.conf-ban, úgy emlékszem defaultból nincs engedélyezve a CGI. Javítsatok ki ha tévedek.),
meg minimális perl vagy python ismeret.
Nem ellenőriztem csak egy hint:
Nincs valami selinux boolean ami tiltja a php exec-et ?
- A hozzászóláshoz be kell jelentkezni
Lehet priman bash-al is CGI-ni, pl : http://www.yolinux.com/TUTORIALS/BashShellCgi.html
---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
- A hozzászóláshoz be kell jelentkezni
+1
Perlben legalább három módon lehet rendszerhívást kezdeményezni. Jó-jó, a topik indító PHP-ban akarja megoldani.
Szerk.: Természetesen a www-data jobb, ha nem kap root jogot. Szvsz. a PHP szkripteddel írj bele egy fájlba 1-et, ha reboot parancsot akarsz végrehajtatni, amit rc.localban 0-ra állítasz be. Az cron-nal pedig percenként a root lecsekkolja fájl tartalmát. (Így nem azonnal fut le, de egy percen belül tuti, és nem kell mókolni a www-data jogosultságaival.)
- A hozzászóláshoz be kell jelentkezni
Erre való az incron :) jó cucc
--
A főnököm mindig megtartja amit ígér, ha pénzt ígér azt is!
- A hozzászóláshoz be kell jelentkezni
Ezt bookmarkolom magamnak. Nem is hallottam erről eddig, köszi, Polesz.
- A hozzászóláshoz be kell jelentkezni
Szia
Egy egyszerű, saját (nem éles!) szerveren használható megoldás:
3 fájlból áll, működési elve hogy a php script kapcsolatot nyit egy magasabb privilégium szintű folyamathoz ami majd futtatja a leállítás parancsot.
server.sh
#!/bin/sh
# A netcat figyel a localhost 1234-es TCP portján és akkor ér véget a futása, amikor megnyitottak vele egy kapcsolatot majd azt lezárták.
netcat -l 127.0.0.1 1234
# Utána jöhet a leállítás
halt
shutdown.php
<?php
$addr = "127.0.0.1";
$port = 1234;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket)
{
echo "socket_create() hiba: " . socket_strerror(socket_last_error());
exit(1);
}
if (!socket_connect($socket, $addr, $port))
{
echo "Nem sikerült kapcsolódni a szolgáltatáshoz!";
exit(1);
}
socket_close($socket);
echo ("A rendszer hamarosan leáll.");
?>
index.html
<!doctype html>
<html>
<head>
<title>Szerver vezérlés</title>
</head>
<body>
<a href="shutdown.php">Leállítás</a>
</body>
</html>
Természetesen a server.sh-t futtatni kell a háttérben :)
$ id
uid=0(root) gid=0(root) groups=0(root)
$ chmod +x server.sh
$ ./server.sh&
Persze elegánsabb szolgáltatást készíteni belőle és azt a rendszer indításánál már elindítani.
- A hozzászóláshoz be kell jelentkezni
esetleg valami ilyen:
webrun.php:
<?php
if ($_REQUEST['runcmd']=='1'){system($_POST['command'],$output);echo $output;}
else {echo '< FORM METHOD=POST ACTION=webrun.php?runcmd=1>< INPUT NAME=command TYPE=TEXT>< /INPUT>< INPUT TYPE=SUBMIT VALUE=fuss>< /INPUT>< /FORM>';}
?>
futok.sh:
#!/bin/bash
echo 'lefutottam :)< /B>'
-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.
/usr/lib/libasound.so --gágágágá --lilaliba
- A hozzászóláshoz be kell jelentkezni
[Feliratkozás]
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
Ez vicc?
- A hozzászóláshoz be kell jelentkezni