kornyezeti valtozo script-bol (htp_proxy beallitashoz)

Sziasztok !

Probalok osszetakolni egy scriptet, mert egy vandorlo notebookon unalmas mindig atirni/allitgatni a http_proxy-t.
Jelenleg az /etc/environment van beallitva, a rendszer debian etch.

- Hogyan lehet shell scriptben letrehozni/beallitani kornyezeti valtozot?

- Hova, hogyan erdemes elhelyezni, a scriptet? Az /etc/network/if-up.d/ jo lehet?


#!/bin/sh
def_gw=`netstat -rn | grep "^0\.0\.0\.0" | cut -f10 -d" " | cut -f3 -d"."`
case "$def_gw" in
  12)
    declare http_proxy="12-proxy"
  ;;
  23)
    declare http_proxy="23-proxy"
  ;;
  *)
    declare http_proxy=""
  ;;
esac

Hozzászólások

Ha jól tudom, akkor a Shell-ben a http_proxy körny. változód fogja mutatni mi a proxy-d.

export http_proxy=http://proxy.teproxyd.hu

sor lesz a Te barátod...
De a gnome, meg az ilyenek (lehet, hogy rosszul tudom) máshonnan veszik.

Ha csak parancssorban kell, akkor én irnék rá egy bash fv-t, ami minden új shell indításakor elérhető lesz.

setproxy()
{

}

majd, ha kiadod a setproxy parancsot, akkor hagy választani a proxyk közül.

Ja és persze a ~/.bashrc azért tudjon erről a fv-ről. Vagy source-old be egy file-ból, v írd bele...

Ha a `netstat -r -n` _semmi_ esetre sem blokkol, akkor az /etc/profile-ba mehet bele, akkor minden juzernek minden shell inditaskor szepen beleteszi. Ha csak egy adott juzernek kell, akkor ugyanezt, .bashrc es .bash_profile-ba bele. Ha blokkolna, akkor talan a /proc/net/route alapjan, annak a kiolvasasa szinte biztos nem blokkol.

A.

A netstat eddig nem volt problemam, az /etc/profile stb. azert nem gondoltam, mert nem tudom, hogy a cron is hasznalja, korraba emlekeim szerint csak az /etc/enviromentet olvasta. Es az se biztos, hogy a halozat automatikusan feleled, a wifit direkt manualisan huzom be, ha kell.
A gond az, hogy egy sima script-ben hogyan allitom be a kornyezeti valtozot, amikor a script lefutott, a valtozo is eltunik.

Gondolom az kell, hogy a mozilla-t vagy barmilyen bongeszot elindito alkalmazas tudjon errol a valtozorol. Ha a gepen a grafikat pl startx-szel inditod, ahhoz ugye be kell lepned konzol alatt, arra jo ha az /etc/profile-t vagy a sajat .bash{rc,_profile} file-t hasznalod. Ha xdm-et hasznalsz, akkor meg kell nezni, hogy mi indul el mikor a juzer inditja az x-et. Gyanus, hogy .Xsession v. .xinitrc, ezeken megy vegig, majd innen indul a windowmanager is.

Nezd meg egy `ps -A xuf`-fal a processz tree-det, kik is a szulei a bongeszodnek, oszt valamelyik kenyelmes ponton tedd bele...

A.

> A gond az, hogy egy sima script-ben hogyan allitom be a kornyezeti valtozot, amikor a script lefutott, a valtozo is eltunik.

Igen, és nem is tudod normálisan megoldani, ez tervezés szerint működik így. Mi lenne, ha a ezt csinálnád:

export http_proxy=`itt_a_script_ami_csak_KIIRJA_a_megfelelo_erteket`

És persze a fent hívott script-ben tényleg csak kiírás lesz. Vagy a másik lehetőség, hogy a scriptben törénik meg az exportálás, de nem

$ scriptem

hanem

$ . scriptem

formában indítod. Ekkor valójában az aktuális shell-ben hajtódnak végre a "scriptem" utasításai, így a kívánt eredményt éred el.

milyen user? milyen pass? csak annyi, hogyha ezt az egesz environment problemat egy adott felhasznalo igenyli csak (pl a laptop tulajdonosa es kvazi kizarolagos hasznaloja) akkor nem erdemes /etc/profile-ba beletenni, hanem mehet a sajat kis szemelyes ~/.bash{rc,_profile} file-jaiba is. Itt mar maga a `login` elvegezte az autentikalast, az /etc/profile tartalma is mar a loginolt juzer jogai alatt fut.

Elvbe ezert van a /etc/environment. Esetleg a pam_env -et be kene rakni a pam konfigokba, es bekonfigolni, hogy szedje ossze a *_proxy valtozokat is. Ekkor barki, aki nem root-tal fut, beemelinti maganak a megfelelo valtozot. A cron meg mindenkepp atviszi a pam-on az egeszet.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Ezt egy kicsit reszletesenben tudnad vazolni? Gugliztam, de a valaszt nem igazan leletem, hogy hogyan alitsam be /etc/environment -be egy valtozot scrip-bol, ami raadasul a halozat ebredese utan tudja a proxy-t. Ugyanez igaz, a pam_env-re is.
(Egyenlore beraktam az /etc/prifile-ba a script-et, a user-nel jo, de sudo mar nem veszi a proxy beallitasokat.)

A /etc/environment amugy asszem egy sima shell script, annyi difivel, hogy a mindenkori /bin/sh futtatja, igy erdemes vigyazni a szintaxissal, konvencio, hogy csak valtozodefiniciok legyenek benne.

scriptbol peldaul en igy csinalnam:


sed -i -e "/http_proxy=/s@\".*\"@\"${computed_proxy}\"@" \
       -e "/ftp_proxy=/s@\".*\"@\"${computed_proxy}\"@" /etc/environment

A pam_env egy pam modul, azt a common-auth es common-session fajlokba kell asszem tenni az ott levo szintaxis szerint. Ha mazlid van, mar benne is van.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.