Creeu un mòdul per a Gentoo eselect
Escrit el 23 d'octubre 2009 / / Open Source .Faig eselect Amor!
Per aquells que no saben eselect és una «administració de configuració modular i el marc. En paraules més simples és una eina de gestió inclòs en Gentoo, capaç de canviar entre les versions i paquets d'arxius de configuració, treballant amb els enllaços simbòlics i les variables ambientals.
Només per aclarir millor treball eselect, és capaç de fer canviar entre versions de Java VM, comunicats de Python, els compiladors gcc i que permet escollir el seu editor preferit.
Eselect és una eina modular, el que significa que només ha de crear un simple. Eselect arxiu per fer-ho córrer seus propis comandes. El que vaig a explicar a continuació és com crear un mòdul simple de fer servir un enllaç simbòlic.
Objectiu del tutorial
El que vull aconseguir amb aquest petit tutorial és crear un senzill interruptor per canviar ràpidament el meu / etc / resolv.conf. Aquest arxiu indica a qualsevol interfície de xarxa on buscar la resolució de DNS.
Igual que en els darrers dies he tingut problemes amb el DNS, em vaig veure obligat a canviar molt sovint del meu programa de resolució de domini per defecte (aquest cas un servidor intern) a un extern (Obert). Usant eselect per a aquest fi realment em va simplificar la vida!
Preparació: crear les alternatives "
Com volem canviar entre dues configuracions diferents que hem de crear aquestes alternatives. Obre un terminal, cd / etc i crear els arxius. He creat una trucada i un resolv.orig resolv.opends anomenat, que s'utilitzarà quan resolució DNS local s'ha reduït.
# Anar al directori / etc cd / etc # Còpia original resolv.conf # Per a la primera alternativa cp resolv.conf resolv.orig # La creació d'alternatives noves resolv.conf # Using OpenDNS IP echo-e "nameserver 208.67.222.222 \ nnameserver 208.67.220.220"> resolv.prova
Ara hem de esborrar el fitxer original i substituir-lo per un enllaç simbòlic, òbviament a la orig arxiu.
# Eliminació d'arxiu físic rm resolv.conf # Crear l'enllaç simbòlic ln-s resolv.conf resolv.orig
Hem acabat amb pre-configuració, anem a procedir a la creació del mòdul eselect
Crear el mòdul
Per una guia completa per desenvolupadors eselect creació de mòduls, si us plau aneu a Gentoo Wiki guia oficial . Això és només una "guia d'exemples" per a un començament ràpid.
En primer lloc tots els mòduls eselect ha d'estar ubicat a / usr / share / eselect / modules, així que anar enllà i crear una nova. Eselect arxiu
# A l'entrar en mòduls eselect directori cd / usr / share / eselect / modules # Crear un arxiu nou mòdul toc resolv.eselect
Ara fa servir el teu editor favorit per editar-lo. En aquest exemple estic fent servir vim
Obertura # arxiu amb vim resolv.eselect vim
Cap de la Secció
Com sempre, la secció de capçalera del fitxer conté la informació de metadades sobre el mòdul i l'autor, serà la mateixa rapidesa de revisar a continuació
# -*- Vim eselect-*-: m = eselect # Copyright 1999-2009 Fundació Gentoo # Distribuït sota els termes de la GNU General Public License v2 # $ Id: $ # Això apareixerà a obtenir una llista dels mòduls disponibles DESCRIPTION = "Gestionar l'arxiu / etc / resolv.conf enllaç simbòlic" # Mantenidor de correu electrònic Mantenidor = "personal@andreaolivato.net" # Data, que serveix per crear una versió SVN_DATE = '$ Data: 10/23/2009 12:00:07 +0200 (dv, 23 octubre 2009) $' # La creació de la versió partir de la data VERSION = $ (svn_date_to_version "$ () SVN_DATE")
Buscar les alternatives
La primera funció important que hem de crear és la cura de prendre una de la inclusió de totes les possibles alternatives que tenim per al nostre enllaç simbòlic. Això vol dir que vostè ha de mostrar tots els fitxers que poden estar vinculats a resolv.conf. En el nostre cas, només hi ha dos: resolv.orig i resolv.opendns.
El procediment més fàcil seria escriure els fitxers directament, però com volem aprendre com fer front a eselect correctament crearem una funció de bash per incloure una llista d'arxiu de dos. D'aquesta manera si en el futur ens agradaria crear una nova alternativa, no cal modificar el nostre codi.
En la funció que acabo d'enumerar a continuació (amb la comanda ls) tots els arxius que comencin per resoldre. a la carpeta / etc i després exclou (utilitzar grep-v) l'arxiu original, que és resolv.conf. D'aquesta manera podem afegir més alternativa mitjançant la creació d'arxius resolv.xxx. Aquí està el codi
find_targets () ( dels productes locals per p a $ (ls / etc / resoldrà .* | conf grep-v) fer echo $ p fer; )
Crear i eliminar l'enllaç simbòlic
Continuant amb el nostre codi, ara hem de ser capaços d'eliminar i crear l'enllaç simbòlic.
Per treure, només hem d'utilitzar la comanda rm com aquest
remove_symlink () ( rm "/ etc / resolv.conf" )
Per crear l'enllaç simbòlic, hem de fer front a l'elecció dels usuaris. Aquesta opció està representada per un nombre, identificar l'arxiu per canviar el vincle. Això vol dir que hem de associar un paràmetre que es passa a la funció amb la posició de l'elecció a la nostra llista de fitxers.
set_symlink () ( # Obtenir el paràmetre locals target = $ (1) # Comprovem que és un nombre si is_number "$ (target)", a continuació, # Obtenir la llista dels fitxers mitjançant la funció creada anteriorment objectius locals = ($ (find_targets)) # Obtenir l'arxiu associat amb el paràmetre passat $ (Target = metes objectiu [- 1]) fil # Si el fitxer de resultats no existeix if [[-z "$ destí"]], a continuació, # Tenim la sortida d'un error moren-q "Target" $ (1) "no sembla ser vàlida!" # Si bé si és que existeix més # Creem l'enllaç ln-s "$ (target)" "/ etc / resolv.conf" fil )
Poseu les coses en conjunt
Ara tenim una funció a la llista, un per eliminar i un va a inserir. Hem de posar-los junts i canviar entre ells en funció de les opcions d'usuari. La següent funció rep el paràmetre de l'usuari, els controls, tregui el vincle actual si és que existeix i la crida de la funció de reenviament de crear el paràmetre.
do_set () ( if [[-z $ (1)]], a continuació, # Si no hi ha cap paràmetre es va aprovar moren-q "No em va dir el que per establir l'enllaç a" elif [[-L / etc / resolv.conf]], a continuació, # Si la relació que existeix ha de tractar de retirar si! remove_symlink, a continuació, # Si no ho pot treure de sortida d'error moren-q "No és possible eliminar l'enllaç simbòlic existent" # Intenta crear Elif! set_symlink "$ (1)", a continuació, # Si no pot crear, la sortida d'errors moren-q "No s'ha pogut establir un enllaç simbòlic nou" fil # Si l'enllaç existeix, però no és un enllaç, sinó un arxiu físic elif [[-e / etc / resolv.conf]], a continuació, # Tenim una cosa estranya, error de sortida moren-q "/ etc / resolv.conf existeix però no un enllaç simbòlic" més # Intenta crear set_symlink "$ (1)" | | die-q "No s'ha pogut establir un vincle simbòlic nou" fil )
L'expedient complet
Resta de funcions necessàries són majoritàriament descriptius i jo no els vaig a revisar en detall. A continuació es mostra el codi complet que he fet servir per al mòdul.
# -*- *-- Vim eselect: m = # eselect Drets d'autor 1999-2009 Fundació Gentoo # Distribuït sota els termes de la GNU General Public License v2 # $ Id: $ DESCRIPTION = "Gestionar l'arxiu / etc / resolv.conf enllaç simbòlic" mantenidor = "personal@andreaolivato.net" SVN_DATE = '$ Data: 09/20/2009 22:26:07 0200 (Sun, 20 Sep 2009) $' VERSION = $ (svn_date_to_version "$ () SVN_DATE") find_targets ( ) (p locals per p a $ (ls / etc / resoldrà .* | grep-v conf) do echo $ p fet;) remove_symlink () (rm "/ / resolv.conf") set_symlink () (local de destinació, etc = $ (1) si is_number "$ (target)", a continuació, els objectius locals = ($ (find_targets)) ($ target = metes objectiu [- 1]) fil if [[-z "$ destí"]], i després moren - q "Target \" $ (1) \ "no sembla ser vàlida!" else ln-s "$ (target)" "/ etc / resolv.conf" fil) describe_show () (echo "Mostra l'actual resoldran . conf enllaç simbòlic ") do_show () (write_list_start" resolv.conf enllaç simbòlic actual: "si [[-L / etc / resolv.conf]], després resoldran local = $ (canonicalise" / etc / resolv.conf ") write_kv_list_entry" $ (% resoldrà /) "" "write_kv_list_entry altres" (desconnectat) "" "fil) describe_list () (echo" Llista d'objectius disponibles enllaç simbòlic resolv.conf ") do_list () (local objectius i = ($ (find_targets)) write_list_start "enllaç simbòlic resolv.conf disponible objectius:" per ((i = 0; i <$ (# [@]}; objectius i + +)); fer [[$ (objectius [i]) = \ $ (basename "$ (canonicalise "/ etc / resolv.conf") ")]] \ & & objectius [i] = $ (highlight_marker" $ (objectius [i]) ") write_numbered_list fet-m" (no trobat) "" $ ([objectius @] ) ") describe_set () (echo" Establir un objectiu nou enllaç simbòlic resolv.conf ") describe_set_parameters () (echo" ") describe_set_options () (echo" destí: nom de destinació o el nombre (de 'llista' d'acció) ") do_set ( ) (if [[-z $ (1)]], i després morir-q "No em va dir el que per establir l'enllaç a" elif [[-L / etc / resolv.conf]], i després si! remove_symlink, després morir-q "No és possible eliminar l'enllaç simbòlic existent" elif! set_symlink "$ (1)", i després morir-q "No s'ha pogut establir un enllaç simbòlic nova" fil elif [[-e / etc / resolv.conf]], i després morir-q "/ / resolv.conf etc existeix, però és no és un enllaç simbòlic "else set_symlink" $ (1) "| | die-q" No s'ha pogut establir un enllaç simbòlic nova "fil)
Ús
Després de desar l'arxiu, vostè pot començar a utilitzar el nou mòdul.
Per a una llista de fitxers disponibles no
eselect llista resoldran Per establir l'original
resoldran eselect sèrie 1 Per establir el OpenDNS
resoldran eselect sèrie 2 Per mostrar l'opció actual
eselect mostren resoldran

















































