b4rt
Instalando paquetes en Centos, sin internet (Repotrack,Createrepo)
- abril 14, 2019
- , 9:44 pm
- , Linux, Programacion, Python, Servidores
Hace poco tuve un problema al cual nunca me había enfrentado. Tenía que instalar algunos paquetes en un centos, el cual no tenía salida a internet, y para no perdernos en detalles, debo aclarar que sería imposible tener salida a internet, por políticas de seguridad.
Sólo tenía acceso a través de SSH, y ese era el reto, instalar estos paquetes en el equipo, sin internet.
Al principio me pareció una tarea sencilla, como hacía cuando quería buscar algún rpm, me dirigí a https://pkgs.org/, y descargué el RPM. Luego subí el .rpm por SCP, y voilá.
Ahí fue cuando me di cuenta del error en el cual me encontraba, al tratar de instalar el .rpm.
Para este caso, trataremos de instalar kwrite.
root@b4rt$ rpm -ivh kwrite-4.10.5-6.el7.x86_64.rpm
error: Failed dependencies:
kate-part(x86-64) = 4.10.5-6.el7 is needed by kwrite-4.10.5-6.el7.x86_64
kde-runtime >= 4.10.5 is needed by kwrite-4.10.5-6.el7.x86_64
Resolver esto es sencillo, regresar a pkgs.org y descargar las dependencias, pero, en estos casos, lo más facil sería utilizar YUM
root@b4rt$ yum install kwrite-4.10.5-6.el7.x86_64.rpm
Yum, automáticamente buscará los las dependencias y las instalará…
$ yumdownloader
$ repotrack
Así que aquí vamos con el segundo paso:
Primero, utilizamos yum para determinar el paquete que vamos a instalar.
root@b4rt$ yum search kwrite
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.cedia.org.ec
* epel: mirror.upb.edu.co
* extras: mirror.cedia.org.ec
* remi-php70: fr2.rpmfind.net
* remi-safe: ap.stykers.moe
* updates: mirror.cedia.org.ec
============================= N/S matched: kwrite ==============================
kwrite.x86_64 : Text Editor
Name and summary matches only, use "search all" for everything.
Ya que tengamos el nombre del paquete:
$ kwrite.X86_64
Viene el tercer paso:
-Utilizamos repotrack (Uso básico) $ repotrack -p [directorio] [paquete]
root@b4rt$ repotrack -p /home/b4rt/kwrite kwrite.x86_64
Downloading GConf2-3.2.6-8.el7.i686.rpm
Downloading GConf2-3.2.6-8.el7.x86_64.rpm
Downloading OpenEXR-libs-1.7.1-7.el7.x86_64.rpm
Downloading OpenEXR-libs-1.7.1-7.el7.i686.rpm
...
-p: directorio en el cual se descargarán los rpms a instalar
kwrite.x86_64 : Es el nombre del paquete
Ten en cuenta que los paquetes podrían tardar un buen tiempo el descargarse, así que ve por un café.
Una vez que se hayan descargado todos los paquetes, vamos a crear nuestro propio repositorio.
Cómo puedes ver, en este caso se descargaron 707 dependencias (377MB)
root@b4rt$ find /home/b4rt/kwrite/ -type f -print | wc -l
707
root@b4rt$ du -mh /home/b4rt/kwrite/
377M /home/b4rt/kwrite/
Bueno, ahora continuamos con el cuarto paso.
Vamos a crear un un repositorio, utilizando todos los RPMs descargados, para esto usaremos el comando $ createrepo [directory]
root@b4rt$ createrepo /home/b4rt/kwrite/
Spawning worker 0 with 118 pkgs
Spawning worker 1 with 118 pkgs
Spawning worker 2 with 118 pkgs
Spawning worker 3 with 118 pkgs
Spawning worker 4 with 118 pkgs
Spawning worker 5 with 117 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
Este comando nos generará un directorio llamado “repodata” dentro del directorio en el cual tenemos los RPM’s, Este directorio tiene la estructura necesaria (XML, Sqlite) para poder utilizarlo como un repositorio de centos.
Ahora sólo comprimimos el directorio y tendríamos lo necesario para moverlo al servidor principal.$ tar -zcvf kwrite.tar.gz [directory]
Despues de cargar el archivo al servidor principal, ya sea por SCP o de la forma que más te guste, procederemos a configurar nuestro repositorio local.
//Servidor_Principal
Seguimos con el quinto paso
Primero descomprimimos el repositorio, por comodidad lo haré dentro de /home/
$ tar -zxvf kwrite.tar.gz
Ahora, tenemos que crear un fichero de extensión [.repo], el cual tiene la información del directorio al cual apuntará, nombre del repositorio y otros datos:
Este fichero deberá estar ubicado en
# /etc/yum.repos.d/[name].repo
root@b4rt$ vim /etc/yum.repos.d/repo_b4rt.repo
[local]
name=repo_b4rt
baseurl=file:///home/kwrite
enabled=1
gpgcheck=0
name: Nombre del repositorio
baseurl: Ruta de nuestro repositorio
enabled : (1) activo, (0) inactivo
gpgcheck : Si está seleccionado el 1, validará las firmas GPG, para verificar la autenticidad de los paquetes,
debemos dejarlo en (0)
Ahora, usaremos YUM para instalar el paquete localmente.
Lo primero es saber algo básico de YUM, los argumeto que usaremos son:
$ --disablerepo
y
--enablerepo
En disablerepo
, usamos el nombre de los repositorios que vamos a desactivar, en nuestro caso, los que tienen salida a internet, y en enablerepo,
usaremos nuestro el nombre de nuestro repositorio local (el que acabamos de crear) podemos hallarlos en /etc/yum.repos.d/
Revisamos los repositorios disponibles, verificamos el campo nombre, todos tienen una esctructura parecida a la del ejemplo.
Entonces, el comando final deberia ser similar al que muestro lineas abajo.
Inhabilito todos, y sólo habilito el repositorio local
root@b4rt$ yum search --disablerepo=base --disablerepo=extras --disablerepo=updates --disablerepo=remi-safe --disablerepo=epel --disablerepo=centos-sclo-rh --disablerepo=centos-sclo-sclo --enablerepo=local kwrite
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
local | 2.9 kB 00:00:00
local/primary_db | 513 kB 00:00:00
=============================================================================================== N/S matched: kwrite ===============================================================================================
kwrite.x86_64 : Text Editor
Name and summary matches only, use "search all" for everything.
Cómo puedes notar, ahora el comando YUM funciona, con todo lo que quieras usar, en nuestro repositorio local:
Ahora vamos a instalar el paquete..
root@b4rt$ yum install --disablerepo=base --disablerepo=extras --disablerepo=updates --disablerepo=remi-safe --disablerepo=epel --disablerepo=centos-sclo-rh --disablerepo=centos-sclo-sclo --enablerepo=local kwrite
Ya no pongo el output del comando pues es demasiado largo, y básicamente es trabajar sólo con yum.
Puedes clonarlo desde aquí.