Portál AbcLinuxu, 8. května 2025 18:27

Dotaz: prepis configu a restrat sluzby pod rootom

21.10.2018 10:51 jany2 | skóre: 30 | blog: jany_blog
prepis configu a restrat sluzby pod rootom
Přečteno: 382×
Odpovědět | Admin
sorry, nie som v tychto veciach zdatny a preto sa chcem opytat.
Potreboval by som v /etc/openvpn/server.conf zakomentovat jeden riadok a nasledne restartnut sluzbu.
Je jasne, ze zmeny v tomto confe a restart sluzby moze robit len root, tak chcem vediet ako to spravit (s tym rootom by az taky problem nebol, lebo mozem sa rovno prihlasit ako root a spustit skript).
Ide o to ako ten skript napisat. Viem len zaklady, ze do suboru na koniec mozem zapisvat cez echo >> ale zatial neviem ako pridat do urciteho riadku "#" resp. ako editovat konkretny riadok.
Cize potreboval by som upravit nejaky riadok v configu (nie konkretne podla cisla riadku, ale podla jeho obsahu, pretoze ta direktova nemusi byt vzdy na tom istom riadku).
Celkovo by mal skript obsahovat editaciu configu + nejaky sleep a restart sluzby.
thx
upozornujem, ze v linuxe som vecny zaciatocnik ...
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.10.2018 11:19 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
Odpovědět | | Sbalit | Link | Blokovat | Admin
Konfigurace se nepřepisuje jak jsi se dnes vyspal!

Takže jako root se upraví konfigurák a už se na něj nesahá!

Jak restartnout službu těžko říct když nevíme distribuci většinou nějak takto: "systemctl restart služba"
Josef Kufner avatar 21.10.2018 12:02 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud chceš upravit konfigurák, přihlaš se jako root, spusť mc, najdi konfigurák, zmáčkni F4.

Pokud chceš nějak automaticky upravovat konfiguraci, tak ji neupravuj, ale generuj ze šablony:
#!/bin/bash

cert="server.crt"
key="server.key"

cat >/etc/openvpn/server.conf <<EOF
proto udp
dev tun
port 1194
ca ca.crt
cert $cert
key $key
EOF

systemctl restart openvpn
Otázkou je, zda to je opravdu dobrý nápad a nešlo by to nějak lépe a jednodušeji.
Hello world ! Segmentation fault (core dumped)
21.10.2018 12:32
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
Hlasuji pro "mc, najdi konfigurák, zmáčkni F4".

Pak uprav ručně konfigurák a zmáčkni F2.
21.10.2018 14:42 jany2 | skóre: 30 | blog: jany_blog
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
Teraz to robim cez nano :-D Neni v tom problem, je to robota vsude vseho na 1-2 minutky, ale chcel som si to este ulahcit (a potrebujem to spravit raz za 2-3 mesiace). Urcite by to bolo pohodlnejsie spustenim skriptu, ale ak to nebude cez skript, tak svet sa nezruti :) + chcel som zistit (naucit sa) ako editovat nejaky config cez skript s root pravami.
2Josef Kufner zaujmalo by ma ako to riesit generovanim sablon (zatial som sa s tym nestretol).
2Jendа sleep tam nemusi byt .... vyskusam to
thx
upozornujem, ze v linuxe som vecny zaciatocnik ...
21.10.2018 15:25 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
Však tohle je šablona. Místo proměnných můžeš použít parametry při volání skriptu.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
21.10.2018 15:27 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
Vytkl bych jen nepoužití uvozovek kolem názvů proměnných, jinak OK.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
21.10.2018 12:06 NN
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
Odpovědět | | Sbalit | Link | Blokovat | Admin
sed '23s/.*/#&/' /etc/openvpn/server.conf && service openvpn restart &
Jendа avatar 21.10.2018 14:19 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
Odpovědět | | Sbalit | Link | Blokovat | Admin
Je jasne, ze zmeny v tomto confe a restart sluzby moze robit len root
sudo
ale zatial neviem ako pridat do urciteho riadku "#" resp. ako editovat konkretny riadok
sed -ire "s/^(řádek)$/#\1/"
+ nejaky sleep
Proč?
21.10.2018 15:55 debian+
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vyssie uz pisali, ako zmenit konkretny riadok. Tak len napisem ako zistit riadok (upoznojuem, mozno existuje viac riesieni, toto je jedno z nich).
$ line=`cat -n /etc/openvpn/server.conf|grep "search text"|awk '{print $1}'`

$ echo "je na riadku: $riadok"
21.10.2018 16:20 debian+
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tu mas v PHP. Funkcne. Maj vsetky subory v jednom priecinku.

Nastavenie:
$ chmod 700 comment_and_restart uncomment_and_restart
Spustenie:
$ ./comment_and_restart
$ ./uncomment_and_restart
Subor service.conf
id=persone
name=Unknow
last_name=LAST
Subor config.php
<?php

$path_conf="service.conf";
$search="name=Unknow";

?>
Subor comment_and_restart
#!/usr/bin/php
<?php

include "config.php";

function comment_in_file($path, $search)
{
	/*
	 * Read file
	 */
	/* read file as "C array" */
	$file=@file($path);
	if($file === false)
	{
		fputs(STDERR, "Error open/read file '$path'\n");
		exit(1);
	}
	// print_r($file);                      // vypis na overenie
	
	/*
	 * Comming in memory
	 */
	$count=count($file);
	for($a=0;$a<$count; $a++)
		if(strpos($file[$a], $search) !== false)
		{
			if($file[$a][0] != "#")
				$file[$a]= "#".$file[$a];
			else
				fputs(STDERR, "Warning: Uncomment line $a in '$path'\n");
			// break; # uncomment this, if only first searched line
		}
	
	/*
	 * Write from memory to file
	 */
	if(file_put_contents($path, $file) === false)
	{
		fputs(STDERR, "Error open/write file '$path'\n");
		exit(1);
	}
}

comment_in_file($path_conf, $search);
sleep(2);
system("systemctl restart openvpn");
?>

Subor uncomment_and_restart
#!/usr/bin/php
<?php

include "config.php";

function uncomment_in_file($path, $search)
{
	/*
	 * Read file
	 */
	/* nacita pole ako "C array" */
	$file=@file($path);
	if($file === false)
	{
		fputs(STDERR, "Error open/read file '$path'\n");
		exit(1);
	}
	// print_r($file);                      // vypis na overenie
	
	/*
	 * Uncomment in memory
	 */
	$count=count($file);
	for($a=0;$a<$count; $a++)
		if(strpos($file[$a], $search) !== false)
		{			
			if($file[$a][0] == "#")
				$file[$a]= substr($file[$a], 1);
			else
				fputs(STDERR, "Warning: Uncomment line $a in '$path'\n");
			// break; # uncomment this, if only first searched line
		}
	
	/*
	 * Write from memory to file
	 */
	if(file_put_contents($path, $file) === false)
	{
		fputs(STDERR, "Error open/write file '$path'\n");
		exit(1);
	}
}

uncomment_in_file($path_conf, $search)
sleep(2);
system("systemctl restart openvpn");
?>
21.10.2018 22:32 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
Mám rád PHP. Takovou hnusárnu si fakt nezaslouží.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
22.10.2018 12:06 debian+
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
Konstruktivnu kritiku daj. Ci len skoro prazdne reci.
22.10.2018 13:09 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
Nejlepší řešení poskytl Josef Kufner. Mohl bych to přepsat do PHP, ale to by dávalo smysl jen v případě, že bych to chtěl přepínat přes webové rozhraní.

Ještě ke kritice tvého řešení:
  • PHP není C, proto je generování chybových hlášek zbytečné a ty zavináče před file() také
  • Používáš cyklus for tam, kde patří foreach - soubor není pole řádek, ale seznam řádek
  • Máš to rozstrkané ve třech souborech, přitom by stačil jeden parametrizovaný
  • Zapomínáš psát složené závorky. Je to sice jen kosmetická vada, ale časem se ti to vymstí
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
22.10.2018 21:33 debian+
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
PHP není C, proto je generování chybových hlášek zbytečné a ty zavináče před file() také
Nie je. Ale je s nim dost podobny. ... Da sa aj povedal "super C" (pokial viete C). ... A ano. Pouzil som tento pristup, lebo je najlahsi na pochopenie. Pre nezainteresovaneho.
oužíváš cyklus for tam, kde patří foreach - soubor není pole řádek, ale seznam řádek
Aj tak interne sa musi pouzit nejake for. Jednoduchost. A ulahcuje mi to zmenu riadku. Lebo napr. toto nefunguje:
<?php

$array=array("1","2","3","4");
foreach($array as $line)
	if($line == "3")
	{
		echo "set 'X' for value '$line'\n";
		$line="X";
	}
print_r($array);

?>
vystup:
set 'X' for value '3'
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)
Vdaka za konstr. kritiku.
Máš to rozstrkané ve třech souborech, přitom by stačil jeden parametrizovaný
Pre jednoduchost. ... Logicku funkcnost si moze sam dat do 1 suboru, alebo napisat. Lahsie napisat "./bla" ako "./rob bla".
Zapomínáš psát složené závorky. Je to sice jen kosmetická vada, ale časem se ti to vymstí
Ak je 1 podmienka, nepisem ju - moj programatorsky styl.
22.10.2018 22:54 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
Je třeba umět foreach používat. foreach ($array as &$line) se už bude chovat správně. Jenže když to chceš mít rychlejší, tak je obvykle výhodnější generovat nový seznam.
<?php
 
$array = array("1", "2", "3", "4");
$output = array();
foreach ($array as $line) {
    if ($line == "3") {
        $line="X";
    }
    $output[] = $line;
}
print_r($output);
Jenže PHP umí jít ještě dále:
<?php

$array = array("1", "2", "3", "4");
$komentuj = function ($line) {
    return ($line == "3") ? "X" : $line;
};
print_r(array_map($komentuj, $array));
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
21.10.2018 16:35
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
Odpovědět | | Sbalit | Link | Blokovat | Admin
Neco takoveho:
sed -i -e '
/#NastaveniKtereChciMenit/ s/No/Yes/
/#NastaveniKtereChciMenit/ s/^#//
/^NastaveniKtereChciTakyMenit/ s/^/#/
/^DalsiNastaveniKtereChciMenit/ s/bila/cerna/
' /etc/MojeSluzba/konfigurak

21.10.2018 16:59 pavele
Rozbalit Rozbalit vše Re: prepis configu a restrat sluzby pod rootom
sudo mc -e /etc/openvpn/server.conf && service openvpn restart &

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.