Spouštění exec v PHP v Debianu pod rootem

Někdy můžete chtít využít možnost spustit v rámci nějakého PHP skriptu příkaz exec, který vykoná příkaz v linuxu s právy roota. Ukážeme si jak webovému uživateli (v Debianu typicky www-data) nastavit aby mohl příkazy vykonávat bez zadávání hesla.

/etc/sudoers

Abychom mohli uživateli www-data dát možnost vykonávat příkazy bez hesla, musíme pozměnit konfigurační soubor umístěný v /etc/sudoers. Jednoduše tam přidáme tuto řádku:

www-data ALL=(ALL) NOPASSWD: ALL

Nyní můžeme v PHP spouštět skripty s právy roota, když ve skriptu použijeme příkaz sudo, např.:

<?php
echo exec('sudo /etc/init.d/apache2 restart');
?>

Publikováno 26.6.2015 v 05:48 | Kategorie: Debian

Jak vytvořit bootovatelné USB v Debianu

Je zjevné že používání CD/DVD mechanik je spíše na ústupu a proto se často pro instalaci systémů používají USB disky. V tomto příspěvku si ukážeme jak si vytvořit bootovací disk v operačním systémem Debian.

Nahrání systému na disk

Předpokládejme že jste si typicky stáhli nějaký ISO soubor (např. s Debianem). Existuje více způsobů jak jej dostat na USB disk tak, aby šel nabootovat.

UNetbootin

Nejčastěji se v tomto směru používá aplikace UNetbootin, která je k dispozici i v základních repozitářích Debianu nebo je jí možné použít i v jiných operačních systémech. V Debianu jí teda stačí jednoduše nainstalovat:

aptitude install unetbootin

Pak spustit (doporučuji pod rootem), vybrat v ní náš stáhnutý obraz, disk na kterém ho použijeme a aplikace se již o vše postará.

Další postup

Dalším řešením je zadat jednoduše příkaz:

cat nazev-souboru.iso > /dev/XXX; sync

Kde samozřejmě nazev-souboru nahradíme názvem iso souboru, který jsme si stáhli a /dev/XXX za přípojný bod pod kterým máme připojen náš USB disk.

Možné problémy

Pokud se Vám nedaří USB disk nabootovat, tak to nejčastěji bývá způsobeno těmito problémy.

Špatně naformátovaný disk

Disk je mít potřeba naformátovaný jako FAT32 (na naformátování disku můžete použít např. nástroj gparted, který je taky součástí základních repozitářů Debianu).

Missing operating system

Pokud vám to hlásí tuto chybu, je potřeba zpravidla opravit MBR. To provedete takto:

aptitude install mbr
install-mbr /dev/XXX

Publikováno 25.6.2015 v 07:58 | Kategorie: Debian

MySQL: dotaz na velikost databáze

V tomto příspěvku si ukážeme jak by měl vypadat MySQL dotaz pro vypsání velikosti konkrétní databáze a jak to pak využít na webových stránkách.

MySQL dotaz

Dotaz pro vypsání velikost konkrétní databáze v MB by mohl vypadat například takto:

SELECT table_schema "nazev_databaze", sum( data_length + index_length ) / 1024 / 1024 "Velikost databáze v MB" FROM information_schema.TABLES WHERE table_schema = "nazev_databaze" GROUP BY table_schema;

Po zadání dotazu by se nám měl objevit tento výsledek:

+--------------------+------------------------+
| Data Base Name     | Velikost databáze v MB |
+--------------------+------------------------+
| nazev_databaze     |           4.05635357   |
+--------------------+------------------------+
1 row in set (0.00 sec)

Zobrazení na webových stránkách

Daný dotaz můžeme využít i např. v PHP pro zobrazení konkrétní informace na webových stránkách. Dejme tomu že budeme chtít vypsat jméno databáze a její velikost. Daný skript by pak mohl vypadat např. takto:

<?php

$mysqli= mysqli_connect("127.0.0.1","root","heslo") or die ('Error connecting to mysql: '
    . mysqli_error($mysqli).'\r\n');

$mysqli->query("SET NAMES 'utf8'");

$q=$mysqli->query("SELECT table_schema 'nazev_databaze',
sum( data_length + index_length ) / 1024 / 1024 'Velikost databáze v MB'
FROM information_schema.TABLES WHERE table_schema = 'nazev_databaze' GROUP BY table_schema"
);

while($r=$q->fetch_assoc()) {
    $text = "{$r["nazev_databaze"]} má velikost {$r["Velikost databáze v MB"]} MB";
    echo $text;
}

?>

Výsledek pak bude vypadat nějak takto:

nazev_databaze má velikost 4.05635357 MB

Publikováno 19.6.2015 v 14:50 | Kategorie: MySQL