Skip to content

Instantly share code, notes, and snippets.

@debxp
Last active September 21, 2019 01:05
Show Gist options
  • Save debxp/b5cf7b0808f8c309ebded6b77e1ed66c to your computer and use it in GitHub Desktop.
Save debxp/b5cf7b0808f8c309ebded6b77e1ed66c to your computer and use it in GitHub Desktop.
Downloader for Debian testing/sid daily or weekly cd images builds with firmware non-free (unofficial)
#!/usr/bin/env bash
# ----------------------------------------------------------
# Script : debian-iso-download.sh
# Author : Blau Araujo <[email protected]>
# Version: 1.0
# License: GNU/GPL-3.0
#
# Description:
#
# Downloader for Debian testing/sid daily or weekly cd images
# builds with firmware non-free (unofficial)
#
# Usage:
#
# ./debian-iso-download.sh
#
# Copyright Note:
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation, either version 3
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# See the GNU General Public License for more details:
#
# https://www.gnu.org/licenses/gpl-3.0.txt
#
# ----------------------------------------------------------
# Os caminhos das URLs são longos demais, então eu quebrei
# em duas partes: a URL base e a URL da build.
url_base="https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware"
url_testing_daily="daily-builds/sid_d-i/current/amd64/iso-cd/firmware-testing-amd64-netinst.iso"
url_testing_weekly="weekly-builds/amd64/iso-cd/firmware-testing-amd64-netinst.iso"
url_stable_current="current/amd64/iso-cd/firmware-10.1.0-amd64-netinst.iso"
# E aqui eu junto das duas partes em uma array...
iso_url=("$url_base/$url_testing_daily" \
"$url_base/$url_testing_weekly" \
"$url_base/$url_stable_current")
# Pasta de destino das ISOs.
# Ela será criada no local de execução do script se não existir!
iso_path="original-isos"
# Array com o nome de destino das ISOs baixadas.
iso_name=("debfw-testing-daily-amd64-" \
"debfw-testing-weekly-amd64-" \
"debfw-stable-current-amd64-")
# A data e a hora do download irá compor o novo nome da ISO.
release=$(date +"%Y_%m_%d-%H_%M")
# Cores ----------------------------------------------------
preto=0
vermelho=1
verde=2
amarelo=3
azul=4
violeta=5
ciano=6
gelo=7
cinza=8
rosa=9
verde_claro=10
amarelo_claro=11
azul_claro=12
violeta_claro=13
ciano_claro=14
branco=15
# Funções --------------------------------------------------
# Imprime na saída o texto em negrito e na cor escolhida.
# Uso: bold_color "texto" $cor_desejada
bold_color() {
tput bold
tput setaf $2
echo -e "$1"
tput sgr0
}
# Função que realiza todo o processo do download
# a partir da escolha feita pelo usuário
download_iso() {
# Pega o número retornado do menu e subtrai 1
# para que seja usado como índice das arrays
# com os URLs e os nomes de destino.
build="(($REPLY - 1))"
# Monta o nome de destino da ISO.
iso_new_name="${iso_name[$build]}$release.iso"
# Monta a URL da ISO original.
url="${iso_url[$build]}"
# Pega o nome da ISO que será baixada.
original_name="$(awk -F'/' '{print $NF}' <<< $url)"
# Exibe mensagem informando os nomes de origem e destino.
echo -e "\n* Origem : $original_name\n* Destino: $iso_path/$iso_new_name\n"
# Faz o download de forma silenciosa, exibindo apenas
# uma barra com o progresso da operação.
wget -q -c --show-progress "$url" -O "$iso_path/$iso_new_name"
# Ao fim do download, exibe uma lista de todas as ISOs
# disponíveis na pasta de destino.
bold_color "\nImagens disponíveis:\n" $azul_claro
ls -1 $iso_path
bold_color "\nFeito!\n" $azul_claro
exit 0
}
quit_option() {
bold_color "\nSaindo...\n" $azul_claro
exit 0
}
# Main -----------------------------------------------------
clear
# Cria a pasta de destino se ela não existir.
mkdir -p $iso_path
# Menu principal.
bold_color "\nSelecione a build desejada...\n" 12
PS3=": "
options=("Testing Daily" "Testing Weekly" "Stable Current" "Sair")
select opt in "${options[@]}"; do
[[ $REPLY -eq ${#options[@]} ]] && quit_option
download_iso
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment