Muito bem, agora que já podemos preencher a variável com um comando que sempre vai mudar quando o servidor tiver uma nova versão, vamos procurar informar o nosso script qual é a versão atual que temos instalada no nosso sistema.
- "Pô Maurício, é fácil né?... a versão é a 4.4.2.0, é só escrever isso na variável..."
- Não pequeno Jedi, uma variável muda, isso quer dizer que a melhor forma de escrever ela não é à mão e sim com um comando que busca este valor.
Sabemos que o servidor já esta instalado, agora temos que perguntar onde ele está instalado? Quais são as pastas que contém os arquivos de configuração e outros que o sistema pode consultar para saber qual é a versão dele mesmo?
Para descobrir onde os programas estão instalados no
Linux, um comando excelente é o whereis:
whereis emby-server
emby-server: /etc/emby-server.conf /opt/emby-server/bin/emby-server
Caso você não tenha ele instalado, o resultado deste comando será:
emby-server:
O binário do servidor está em /opt e a configuração em /etc, podemos abrir a configuração para dar uma olhada.
O diretório padrão para os arquivos é /var/lib/emby.
Procurar um arquivo dentro desta pasta manualmente é loucura, eu tenho na minha instalação mais de 40 mil arquivos dentro desta pasta. Por tanto, vamos procurar onde a versão do sistema pode aparecer, arquivos de log.
find /var/lib/emby -iname "*.log"
Não retorna nada... hum... outra opção seria procurar em arquivos de texto. Porque como o log é um arquivo de texto, é muito comum encontrar programadores que invés de salvar como .log, salvam como .txt:
find /var/lib/emby -iname "*.txt"
/var/lib/emby/cache/thumbnail-failures.txt
/var/lib/emby/cache/tvdb/time.txt
/var/lib/emby/cache/ffmpeg/version_4.4.2.0.txt
/var/lib/emby/cache/ffmpeg/filters_4.4.2.0.txt
/var/lib/emby/cache/ffmpeg/protocols_4.4.2.0.txt
/var/lib/emby/cache/ffmpeg/decoders_4.4.2.0.txt
/var/lib/emby/cache/ffmpeg/encoders_4.4.2.0.txt
/var/lib/emby/cache/ffmpeg/hwaccels_4.4.2.0.txt
/var/lib/emby/logs/embyserver.txt
/var/lib/emby/logs/hardware_detection-63724827071.txt
/var/lib/emby/logs/embyserver-63724827062.txt
/var/lib/emby/logs/embyserver-63724824148.txt
/var/lib/emby/logs/embyserver-63724924800.txt
/var/lib/emby/logs/hardware_detection-63724824158.txt
/var/lib/emby/logs/ffmpeg-transcode-3384ea64-b008-406e-99e8-abad83f67062_1.txt
/var/lib/emby/data/channels.txt
/var/lib/emby/data/lastversion.txt
/var/lib/emby/data/connect.txt
/var/lib/emby/data/device.txt
- Hum, agora vemos uns arquivos interessantes... ei, olha /var/lib/emby/logs/embyserver.txt ali, deve ter com certeza a versão instalada... EPA!!! olha mais abaixo, /var/lib/emby/data/lastversion.txt, será que a informação da última versão está lá também?
- Sim pequeno Jedi... eu já consigo ver o sorriso no rosto dos minimalistas que gritavam na página anterior. Isso quer dizer que o resultado de todo o nosso exercício na página anterior está escrito ali no nosso próprio servidor, mas mesmo assim eu escrevi aqui porque essa é a jornada.
Amigo leitor, eu sei que você deve estar bravo também ou frustado por ter que ler todo o processo na página anterior e descobrir que a solução é mais simples, mas vamos olhar o lado positivo. Se você não passar por isso, não adquire conhecimento que te será útil no futuro.
Durante a criação do seu script vai aprender a repetir uma tarefa de forma mais eficaz. Portanto não se apegue ao método que você usa, não fique repetindo o mesmo método sempre.
Por isso que existem APIs, módulos, bibliotecas, tudo para evitar a repetição. Mas isso é conversa para o futuro... um dia quando você for um cara experiente, volte a esta página e você vai entender isso.
Já que lendo o arquivo /var/lib/emby/data/lastversion.txt você tem o mesmo resultado alcançado na página anterior, não vamos trocar o curl + cut para usar somente o cat:
cat /var/lib/emby/data/lastversion.txt
Agora vamos voltar o nosso foco para a versão do servidor. Se você usar cat para ler /var/lib/emby/logs/embyserver.txt, vai cair para trás de tantas linhas neste log, no meu são mais de 500 mil linhas, portanto vamos procurar palavras chaves acrescentando ao cat o grep + a palavra que queremos procurar.
cat /var/lib/emby/logs/embyserver.txt | grep version
Retorna bem menos itens, no meu caso são mais de 12 mil linhas... eu sei são muitas, mas de 500 mil para 12 mil já melhorou... ;) mas ainda assim, tem muita informação. Vamos buscar por 4.4.2.0 no final para achar o número da versão que queremos.
Fazendo isso encontramos 11 mil linhas com "version: 4.4.2.0". Melhorou... mas ainda é muito... onde você colocaria a informação da versão do seu aplicativo em um log? No cabeçalho, mas se continuar usando o cat vamos ter mais de 500 mil linhas para chegar ao cabeçalho... a não ser que tenha uma ferramenta que lê só as primeiras linhas do arquivo.
- Elementar meu caro Jedi, tem o head e lá está a informação que precisamos, na primeira linha.
2020-05-13 00:00:00.013 Info App: Application version: 4.4.2.0
- Legal, vamos filtrar essa linha com head, sed, cut... - Você pergunta.
- Pequeno Jedi, porque não usar só uma ferramenta? Com o
awk podemos dizer que queremos só a linha com o "Application version:" e imprimir somente o valor que queremos, contando os espaços a versão vai ficar na sétima posição, assim sendo vamos usar este comando:
awk '/Application version:/ {print $7}' /var/lib/emby/logs/embyserver.txt
Agora que temos as duas variáveis, podemos melhorar o nosso script com um "if" para somente executar se a versão instalada e a última lançada são diferentes.
#!/bin/bash
release=$(cat /var/lib/emby/data/lastversion.txt)
myversion=$(awk '/Application/ {print $7}' /var/lib/emby/logs/embyserver.txt)
if [ "$myversion" != "${release}" ]
then wget https://github.com/MediaBrowser/Emby.Releases/releases/download/${release}/emby-server-deb_${release}_amd64.deb
systemctl stop emby-server
dpkg -i emby-server-deb_${release}_amd64.deb
systemctl start emby-server
fi
Você acha que acabou? Tem mais na próxima página.