Created
April 3, 2017 13:36
-
-
Save HacKanCuBa/bfaa857f4839f99715a99dc8f788de70 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
############################################################ | |
# Script que elimina todos los kernels salvo el que se | |
# encuentra en uso (MODO=1), o salvo el que se encuentra | |
# en uso y el anterior (MODO=2). | |
# | |
# ************************************************************** | |
# ** NO ME RESPONSABILIZO POR DAÑOS QUE PUDIERAN SER CAUSADOS ** | |
# ** SEA POR BUEN O MAL USO DE ESTE SCRIPT ** | |
# ************************************************************** | |
# | |
# by HacKan @ HacKan & CuBa co. 2012, 2013, 2015 | |
# http://blog.linuxnoblog.com.ar/2015/04/eliminar-kernels-antiguos/ | |
# http://www.hackan.com.ar/2012/02/bash-script-eliminar-kernels-antiguos/ | |
# basado en http://www.ubuntubuzz.com/2012/02/script-remove-unused-old-kernel.html | |
# visto en http://www.taringa.net/posts/linux/14108602/Script-para-eliminar-kernels-anticuados-de-nuestro-sistema_.html | |
# | |
# Notas | |
# ** Debe ejecutarse como root ** | |
# La salida de informacion del programa se modifica con | |
# los parametros CONSOLA, LOG (syslog) y POPUP (notify-osd). | |
# Si los tres son 0, el programa funciona en modo silecioso. | |
# Mas informacion en la web. | |
# | |
# Changelog | |
# | |
# v4.2 | |
# - Codigo mejorado ligeramente | |
# | |
# v4.1 | |
# - Corregido un bug en la llamada a requisitos() | |
# | |
# v4.0 | |
# - Un poco de rediseño | |
# | |
# v3.2 | |
# - Agregado modo de prueba (NORUN) | |
# | |
# v3.1 | |
# - Corregidos bugs menores | |
# | |
# v3.0 | |
# - KernelCleaner1, KernelCleaner2, KernelCleanerC | |
# y KernelCleanerG unificados | |
# - Opciones seleccionables en script | |
# | |
# v2.0 | |
# - Codigo mas prolijo | |
# - Gracias Manolo (Envido32) por las sugerencias | |
# | |
# v1.0 | |
# - Primera version funcional | |
############################################################ | |
# Config | |
############################################################ | |
declare -r VERSION="4.0" | |
declare -r TITULO="KernelCleaner" | |
# MODO=1 : KernelCleaner1 | |
# MODO=2 : KernelCleaner2 | |
declare -ir MODO=2 | |
# CONSOLA=0 : No muestra mensajes en consola | |
# CONSOLA=1 : Muestra mensajes en consola | |
declare -ir CONSOLA=1 | |
# LOG=0 : No guarda mensajes | |
# LOG=1 : Guarda mensajes en /var/log/syslog | |
# (requiere comando logger) | |
declare -i LOG=0 | |
# POPUP=0 : No muestra mensajes gráficos | |
# POPUP=1 : Muestra mensajes gráficos (requiere notify-send) | |
declare -i POPUP=0 | |
# ENCABEZADO=0 : No muestra encabezado | |
# ENCABEZADO=1 : Muestra encabezado (solo por consola) | |
declare -ir ENCABEZADO=1 | |
# Config avanzada | |
############################################################ | |
# NORUN=1 : Modo de prueba o debug, no elimina kernels ni | |
# modifica grub/burg | |
# NORUN=0 : Modo normal | |
declare -ir NORUN=0 | |
############################################################ | |
# Variables internas, no editar | |
############################################################ | |
declare -ir EXIT_FAILURE=1 | |
declare -ir EXIT_SUCCESS=0 | |
declare -i ECODE=0 | |
declare -r TMPFILE="$(tempfile -p "kc${MODO}-")" | |
declare -a KERNELS=( ) | |
############################################################ | |
# Funciones | |
############################################################ | |
function requisitos { | |
# Verifica requisitos, invalida config de usuario | |
local -i ERR=0; | |
# logger | |
logger -V > /dev/null 2>&1 | |
if [ $? -ne 0 ]; then | |
LOG=0 | |
ERR=1 | |
fi | |
# notify-send | |
notify-send -v > /dev/null 2>&1 | |
if [ $? -ne 0 ]; then | |
POPUP=0 | |
ERR=1 | |
fi | |
return $ERR | |
} | |
function _econ { | |
if [ ${CONSOLA} -eq 1 ]; then | |
echo "$@" | |
fi | |
} | |
function _elog { | |
if [ ${LOG} -eq 1 ]; then | |
logger -t "${TITULO} v${VERSION}" "$@" | |
fi | |
} | |
function _epop { | |
if [ ${POPUP} -eq 1 ]; then | |
notify-send "${TITULO} v${VERSION}" "$@" | |
fi | |
} | |
function _e { | |
_econ "** $*" | |
_elog "$@" | |
_epop "$@" | |
} | |
function _ee { | |
if [ ${CONSOLA} -eq 1 ]; then | |
cat "${TMPFILE}" | |
fi | |
if [ ${LOG} -eq 1 ]; then | |
logger -t "${TITULO} v${VERSION}" < "${TMPFILE}" | |
fi | |
if [ ${POPUP} -eq 1 ]; then | |
xargs -0 notify-send "${TITULO} v${VERSION}" < "${TMPFILE}" | |
fi | |
} | |
function print_header { | |
if [ ${ENCABEZADO} -eq 1 ]; then | |
# No loggeo encabezado | |
_econ | |
_econ "KernelCleaner modo ${MODO} v${VERSION} by HacKan & CuBa co." | |
_econ "http://www.hackan.com.ar/2012/02/bash-script-eliminar-kernels-antiguos" | |
_econ | |
_epop "by HacKan & CuBa co.\nhttp://www.hackan.com.ar/2012/02/bash-script-eliminar-kernels-antiguos" | |
fi | |
} | |
function print_mode { | |
if [ ${NORUN} -ne 0 ]; then | |
_e "ATENCION: Modo de prueba. No se realizan cambios en el sistema" | |
fi | |
} | |
function desinstalar { | |
_e "Desinstalando $*..." | |
if [ ${NORUN} -eq 0 ]; then | |
apt-get -qy remove "$@" >> "${TMPFILE}" 2>&1 | |
else | |
apt-get -qys remove "$@" >> "${TMPFILE}" 2>&1 | |
fi | |
_ee | |
_e "Hecho" | |
} | |
function get_kernel_list { | |
if [ ${MODO} -eq 1 ]; then | |
# kc1 | |
ls /boot/ | grep vmlinuz | sed 's@vmlinuz-@linux-image-@g' | grep -v "$(uname -r)" | |
else | |
#kc2 | |
ls /boot/ | grep vmlinuz | sed 's@vmlinuz-@linux-image-@g' | sed '$d' | sed '$d' | |
fi | |
} | |
function actualizar_grub { | |
_e "Actualizando GRUB..." | |
if [ ${NORUN} -eq 0 ]; then | |
update-grub >> "${TMPFILE}" 2>&1 | |
if [ $? -eq 0 ]; then | |
_e "GRUB actualizado satifactoriamente" | |
else | |
_e "Fallo la actualización de GRUB" | |
_e "Mas informacion en ${TMPFILE}" | |
fi | |
fi | |
} | |
function actualizar_burg { | |
burg-probe -V > /dev/null 2>&1 | |
if [ $? -eq 0 ]; then | |
_e "Actualizando BURG..." | |
if [ ${NORUN} -eq 0 ]; then | |
update-burg >> "${TMPFILE}" 2>&1 | |
if [ $? -eq 0 ]; then | |
_e "BURG actualizado satifactoriamente" | |
else | |
_e "Fallo la actualización de BURG" | |
_e "Mas informacion en ${TMPFILE}" | |
fi | |
fi | |
fi | |
} | |
############################################################ | |
# Programa | |
############################################################ | |
requisitos | |
if [ $? -ne 0 ]; then | |
_e "Atencion: Requisitos incumplidos. Algunas caracteristicas podrian no funcionar" | |
fi | |
print_header | |
print_mode | |
if [ "$(whoami)" = "root" ]; then | |
KERNELS=$(get_kernel_list) | |
if [ -n "${KERNELS}" ]; then | |
for KERNEL in "${KERNELS[@]}"; do | |
desinstalar "$KERNEL" "${KERNEL//image/headers}" | |
done | |
actualizar_grub | |
actualizar_burg | |
else | |
_e "No hay kernels antiguos que eliminar" | |
fi | |
ECODE=${EXIT_SUCCESS} | |
else | |
_e "Usted no es root" | |
_e "Ejecute $0 como root" | |
ECODE=${EXIT_FAILURE} | |
fi | |
_e "Terminado" | |
exit ${ECODE} | |
############################################################ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment