Tutorial: Como instalar pacotes conflitantes no Debian
Tutorial: Como instalar pacotes conflitantes no Debian
Essa dificuldade geralmente acontece ao tentar instalar pacotes de versões antigas (ou experimentais/instáveis/em teste) e usualmente com as dependências que são necessárias para o pacote antigo desejado. Essas dependências acabam conflitando com alguma outra mais nova necessária para outro serviço ou pacote na máquina.
Ao constatar que precisa de ambos programas, você tenta diversos métodos, envolvendo apt pinning , misturando repositórios, ou até backport feito em casa e descobre ficar num pesadelo de dependências.
Uma saída mais organizada e de melhor manutenção, envolvendo apenas pacotes oficiais do Debian sem modificações de código ou empacotamento a manter, é criar um container "híbrido" na máquina, para instalar esse pacote antigo num ambiente "quase" separado, "quase" uma máquina virtual, "quase" um container.
A manutenção pelo sysadmin será apenas de configurações e atualizando pacotes oficiais Debian.
Abordagem
Vamos criar um container "híbrido", com namespace e filesystem razoavelmente isolados mas com acesso a processos e à rede no host. Por isso não há runlevels nem systemd próprios nesse tipo de container e teremos de gerenciar isso pelo host.
Esse modelo tem vantagens e desvantagens e você deve analisar para seu cenário.
No exemplo desse tutorial, vamos instalar dentro do container "híbrido" uma versão Stretch antiga de zabbix-agent, tudo num servidor Debian Buster Estável com Apache, se comunicando com um proxy zabbix e seu servidor de versão antiga. As configurações mantidas em puppet não são objeto desse tutorial.
Para monitorar apache no host
Habilitar módulo status
a2enmod status
nano /etc/apache2/mods-enabled/status.conf
service apache2 restart
service apache2 status
Acessar a página de status do servidor
Podes também usar lynx, links2, w3m ou outro browser texto.
curl http://localhost/server-status
Incluir no /etc/apt/sources.list
Você pode escolher NÃO usar a opção "trusted". Aliás, é recomendável. Foi comodidade para facilitar a gestão de chaves expiradas.
###########
# stretch
deb [trusted=yes] http://archive.debian.org/debian/ stretch main contrib non-free
# stretch-backports
deb [trusted=yes] http://archive.debian.org/debian/ stretch-backports main contrib non-free
# stretch-backports-sloppy
deb [trusted=yes] http://archive.debian.org/debian/ stretch-backports-sloppy main contrib non-free
# stretch-updates
deb [trusted=yes] http://archive.debian.org/debian/ stretch-updates main contrib non-free
# stretch-security
deb [trusted=yes] http://security.debian.org/debian-security stretch/updates main contrib non-free
###########
Debootstrap e chroot
O debootstrap cria containers chroot com versões e até arquiteturas diferentes de Debian. O chroot puro não altera prompt nem tem pontos de montagem como /proc . Seja cuidadoso e sempre verifique se está no container ou no host antes de executar comandos. O gerenciador schroot altera o prompt.
Com o chroot, você executa o comando e encerra sessão do container ao terminar o comando. É do tipo one-shot. Após entrar numa sessão bash, você encerra a sessão do container ao sair da sessão bash.
apt-get install debootstrap
mkdir /opt/chrootstretch
#debootstrap --variant=minbase stretch /opt/chrootstretch
debootstrap stretch /opt/chrootstretch
chroot /opt/chrootstretch
cat /etc/debian_version
apt-get install locales/stretch
dpkg-reconfigure locales
apt-get install libreadline7/stretch procps/stretch curl/stretch net-tools/stretch less/stretch nano/stretch debconf/stretch sudo/stretch
apt-get install zabbix-agent/stretch
less /etc/zabbix/zabbix_agentd.conf
ls -lah /etc/zabbix/zabbix_agentd.conf.d/
service zabbix-agent restart
service zabbix-agent status
#https://manpages.debian.org/testing/zabbix-agent/zabbix_agentd.8.en.html
zabbix_agentd -V
exit
#voltou ao host
Schroot para gerenciar chroot
Schroot é uma maneira bem mais fácil de configurar, gerenciar e utilizar containers chroot.
apt-get install schroot aufs-tools
#aufs-tools | unionfs-fuse qemu-user-static
ls /opt/chrootstretch/
Examinar os diretórios que zabbix deveria ter acesso no host para personalizar depois
cat /etc/schroot/default/fstab
Configurar o container gerenciado
nano /etc/schroot/chroot.d/chrootstretch
#####################
# schroot chroot definitions.
# See schroot.conf(5) for complete documentation of the file format.
#
# Please take note that you should not add untrusted users to
# root-groups, because they will essentially have full root access
# to your system. They will only have root access inside the chroot,
# but that's enough to cause malicious damage.
#
# The following lines are examples only. Uncomment and alter them to
# customise schroot for your needs, or create a new entry from scratch.
#
#AFM 20210407
[chrootstretch]
description=Contains the zabbix stretch version
aliases=zabbixstretch
type=directory
directory=/opt/chrootstretch
users=root
root-groups=root
profile=desktop
personality=linux
preserve-environment=true
message-verbosity=normal
setup.fstab=chrootstretch/fstab
#######################
Editar fstab personalizado conforme exame anterior e deixar o resto default
mkdir /etc/schroot/chrootstretch
cp /etc/schroot/default/fstab /etc/schroot/chrootstretch/
nano /etc/schroot/chrootstretch/fstab
#incluir no fstab
#######################
#AFM 20210408
/var/log/apache2 /var/log/apache2 none rw,bind 0 0
#######################
Entrar no chroot, verificar montagens e suas permissões, reiniciar serviço e verificar
schroot -c chrootstretch
cat /proc/mounts
chown -R zabbix.zabbix /var/log/zabbix-agent
ls -lah /var/log/zabbix-agent
service zabbix-agent restart
service zabbix-agent status
zabbix_agentd -V
curl http://localhost/server-status
exit
Testar container gerenciado por schroot
A partir daqui começaremos a executar comandos "remotamente" a partir do host para o container executando em background, que formou uma sessão que ficou aguardando comandos e persiste até que seja explicitamente encerrada. Nem o reboot a aborta efetivamente. Por isso em nosso cenário é importante limpar todas sessões no shutdown e garantir isso também no boot. Não vamos tentar recuperar sessões abortadas.
##############
#criar uma sessão chroot no background e obter sessionid
SESSION=$(schroot --begin-session --chroot=chrootstretch)
echo $SESSION
schroot --info --all-sessions
schroot --run-session --chroot=$SESSION -- /bin/ls -lah
schroot --run-session --chroot=$SESSION -- adduser --quiet --system --group --disabled-login --no-create-home --home /nonexistent zabbix
schroot --run-session --chroot=$SESSION -- service zabbix-agent restart
schroot --run-session --chroot=$SESSION -- service zabbix-agent status
schroot --run-session --chroot=$SESSION -- zabbix_agentd -V
schroot --run-session --chroot=$SESSION -- curl http://localhost/server-status
ps -aux |grep zabbix
#no shutdown e no reboot, para garantir limpeza de sessões abandonadas
schroot --end-session --all-sessions
schroot --info --all-sessions
schroot --info --all
#########
Scripts para automatizar no systemd
mkdir /opt/scripts
Script para iniciar container
nano /opt/scripts/iniciar_zabbix_container.sh
############
#!/bin/sh
#AFM 20210412 para iniciar zabbix no container durante boot
#limpar eventuais sessões abortadas
/usr/bin/schroott --end-session --all-sessions
/usr/bin/schroot --begin-session --chroot=chrootstretch --session-name=meucontainerzabbix
/usr/bin/schroot --run-session --chroot=meucontainerzabbix -- adduser --quiet --system --group --disabled-login --no-create-home --home /nonexistent zabbix
/usr/bin/schroot --run-session --chroot=meucontainerzabbix -- service zabbix-agent restart
#########
chmod +x /opt/scripts/iniciar_zabbix_container.sh
/opt/scripts/iniciar_zabbix_container.sh
Script para parar container
nano /opt/scripts/parar_zabbix_container.sh
###############
#!/bin/sh
#AFM 20210412 para iniciar zabbix no container durante boot
#limpar eventuais sessões
/usr/bin/schroot --end-session --all-sessions
###############
chmod +x /opt/scripts/parar_zabbix_container.sh
/opt/scripts/parar_zabbix_container.sh
Configurar ambos os serviços one-shot no systemd
nano /etc/systemd/system/iniciar_zabbix_container.service
###############
[Unit]
Description=Iniciar zabbix container
After=schroot.service
#Before=shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be
# executed before the target state is entered
# Also consider kexec.target
[Service]
Type=oneshot
RemainAfterExit=false
ExecStart=/opt/scripts/iniciar_zabbix_container.sh #your paths and filenames
#ExecStop=/opt/scripts/parar_zabbix_container.sh
ExecStop=/usr/bin/true #para nao dar warning
[Install]
WantedBy=default.target
###############
nano /etc/systemd/system/parar_zabbix_container.service
###############
[Unit]
Description=Parar zabbix container
After=schroot.service
Before=shutdown.target halt.target
# This works because it is installed in the target and will be
# executed before the target state is entered
# Also consider kexec.target
[Service]
Type=oneshot
RemainAfterExit=false
ExecStart=/usr/bin/true #para nao dar warning
ExecStop=/opt/scripts/parar_zabbix_container.sh
[Install]
WantedBy=halt.target shutdown.target
###############
systemctl enable iniciar_zabbix_container
systemctl is-enabled iniciar_zabbix_container
systemctl is-active iniciar_zabbix_container
systemctl enable parar_zabbix_container
systemctl is-enabled parar_zabbix_container
Reboot e testar se parou e reiniciou corretamente
reboot
schroot --info --all-sessions
schroot --run-session --chroot=meucontainerzabbix -- service zabbix-agent status
schroot --run-session --chroot=meucontainerzabbix -- curl http://localhost/server-statu
Agora precisa configurar o zabbix DENTRO do container
cp /opt/chrootstretch/etc/zabbix/zabbix_agentd.conf /opt/chrootstretch/etc/zabbix/zabbix_agentd.conf.20210413
nano /opt/chrootstretch/etc/zabbix/zabbix_agentd.conf
########
#Server = 0.0.0.0/0
Server = 192.168.0.103,192.168.0.100
ServerActive = 192.168.0.103,192.168.0.100
########
ls /opt/chrootstretch/etc/zabbix/zabbix_agentd.conf.d
ls /opt/chrootstretch/etc/zabbix/
less /opt/chrootstretch/etc/zabbix/zabbix_agent.conf
scp root@192.168.0.101:/etc/zabbix/zabbix_agentd.conf.d/* /opt/chrootstretch/etc/zabbix/zabbix_agentd.conf.d/
less /opt/chrootstretch/etc/zabbix/zabbix_agentd.conf.d/apache.conf
schroot --run-session --chroot=meucontainerzabbix -- mkdir /var/log/zabbix
schroot --run-session --chroot=meucontainerzabbix -- chown -R zabbix.zabbix /var/log/zabbix
schroot --run-session --chroot=meucontainerzabbix -- ls -lah /var/log/zabbix
schroot --run-session --chroot=meucontainerzabbix -- service zabbix-agent restart
schroot --run-session --chroot=meucontainerzabbix -- service zabbix-agent status
schroot --run-session --chroot=meucontainerzabbix -- zabbix_agentd -p
mkdir -p /opt/chrootstretch/etc/apache2/sites-enabled
mkdir /etc/bash_completion.d
mkdir /var/log/rotinas
nano /etc/schroot/chrootstretch/fstab
#incluir no fstab
#######################
#AFM 20210408
/var/log/apache2 /var/log/apache2 none rw,bind 0 0
/etc/zabbix/scripts /etc/zabbix/scripts none rw,bind 0 0
/var/log/rotinas /var/log/rotinas none rw,bind 0 0
/etc/bash_completion.d /etc/bash_completion.d none rw,bind 0 0
/etc/apache2/sites-enabled /etc/apache2/sites-enabled none rw,bind 0 0
#######################
Para aumentar o nível de log durante execução, válido até o próximo restart do serviço
schroot --run-session --chroot=meucontainerzabbix -- zabbix_agentd --runtime-control log_level_increase
No puppet server
nano /etc/puppetlabs/code/environments/production/modules/base/files/etc/hosts
#############
#AFM 20210414 incluir no hosts
192.168.0.105 proxy01
#############
Verificar que rodou puppet nos servidores DNS.
De volta ao servidor monitorado
/opt/scripts/parar_zabbix_container.sh
/opt/scripts/iniciar_zabbix_container.sh
schroot --run-session --chroot=meucontainerzabbix -- tail -f /var/log/zabbix/zabbix_agentd.log
Examine com atenção a saída do comando e verifique se coleta os dados desejados
schroot --run-session --chroot=meucontainerzabbix -- zabbix_agentd -p
Nos proxies zabbix
root@zabbix-proxy:~# zabbix_get -s 192.168.0.105 -k "system.swap.size[,pfree]"
100.000000
root@zabbix5-server:~# zabbix_get -s 192.168.0.105 -k "system.swap.size[,pfree]"
100.000000
Se o zabbix_agentd.conf do servidor monitorado estiver com diretiva Server e/ou ServerActive mal configurada vai retornar:
#zabbix_get [2076]: Check access restrictions in Zabbix agent configuration
Bibliografia
Misturar pacotes
https://snapshot.debian.org/binary/zabbix-agent/
https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html
https://www.debian.org/doc/manuals/debian-reference/ch02.en.html
https://cloudwafer.com/blog/installing-multiple-versions-of-php-on-debian/
Monitorar Apache
https://techexpert.tips/pt-br/zabbix-pt-br/zabbix-monitorando-apache/
https://www.zabbix.com/br/integrations/apache
Proxy válido para chroot também, que não herda variáveis de ambiente
https://serverfault.com/questions/36832/debian-route-all-http-traffic-through-squid
Debootstrap
https://wiki.debian.org/Debootstrap
https://linux.die.net/man/8/debootstrap
https://www.debian.org/doc/manuals/securing-debian-manual/chroot-ssh-env.pt-br.html
https://wiki.debian.org/chroot
https://askubuntu.com/questions/958795/how-to-use-the-mirror-option-of-apt-cacher-ng-for-debootstrap
Schroot
https://linux.die.net/man/5/schroot.conf
https://linux.die.net/man/1/schroot
https://linux.die.net/man/5/schroot-setup
https://manpages.debian.org/testing/schroot/schroot-faq.7.en.html
https://packages.debian.org/buster/schroot
https://wiki.debian.org/Schroot
http://logan.tw/posts/2018/02/24/manage-chroot-environments-with-schroot/
https://josiahulfers.com/2018/03/31/schroot-cheatsheet/
https://wiki.debian.org/RichardDarst/Schroot
https://serverfault.com/questions/613179/how-do-i-do-mount-bind-in-etc-fstab
https://www.debian.org/doc/manuals/securing-debian-manual/ch03s05.pt-br.html
https://askubuntu.com/questions/835285/why-does-update-rc-d-not-accept-my-init-script
https://gitlab.com/codelibre/schroot
Systemd
https://www.freedesktop.org/software/systemd/man/systemd.target.html
https://qastack.com.br/superuser/688733/start-a-systemd-service-inside-chroot
https://unix.stackexchange.com/questions/48973/execute-a-command-before-shutdown
http://userscripts4systemd.blogspot.com/
https://linuxconfig.org/how-to-automatically-execute-shell-script-at-startup-boot-on-systemd-linux
https://www.cyberciti.biz/faq/linux-execute-cron-job-after-system-reboot/
https://opensource.com/life/16/11/running-commands-shutdown-linux
Comentários
Postar um comentário