GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué comandos están disponibles en la sección %pre de un archivo Kickstart en CentOS?

El %pre sección(es) de su ejecución kickstart dentro del entorno del instalador .

Aquí hay una lista de comandos útiles que están disponibles en el entorno del instalador en RHEL6.5:

  • Utilidades de Shell:arch awk basename bash cat chattr chgrp chmod chown chroot clear clock consoletype cp cut date df dmesg du echo egrep env expr false fgrep find getopt grep head hwclock id kill killall killall5 less ln ls lsattr mkdir mknod mktemp mv pidof ps pwd readlink rm rmdir sed sh shred sleep sort split sync tac tail tee top touch true tty uname uniq wc which xargs
  • Editores y localizadores:less more vi
  • Utilidades hash:md5sum sha1sum sha256sum
  • Compresión y archivos:gzip bzip2 cpio dd tar rpm
  • fsck /mkfs /etc. para ext2 ext3 ext4 xfs btrfs msdos vfat
  • Otras cosas del sistema de archivos:mkswap swapon swapoff dmraid dmsetup mdadm mdmon dump restore mt lvm lvs vgs pvs ...
  • Utilidades de red:arp arping curl dhclient dhclient-script ftp ifconfig hostname ip ipcalc mtr nc ping rcp rdate rlogin telnet nslookup ntpdate route rsh rsync ssh ssh-keygen sshd scp sftp wget
  • Información de hardware:biosdevname blkdeactivate blkid blockdev dmidecode lshal lspci lsscsi sginfo smartctl
  • Utilidades de disco:eject dump restore hdparm smartctl losetup kpartx parted fdisk sfdisk
  • Manejo de consola/diálogos:chvt consolehelper openvt whiptail zenity
  • Registro:logger rsyslogd syslogd
  • python
  • ¡Y mucho más!

Si ejecuta una instalación manual, puede cambiar a la terminal en VT2 (Ctrl Alt F2 ) y busque para averiguar todo lo que está disponible dentro del entorno del instalador. compgen -c | sort -u es una manera fácil de enumerar todos los comandos disponibles, y hay mucha información del sistema que se puede encontrar en /sys y /proc .

(Y sí, el kickstart se vuelve a analizar después del %pre se ejecutan los scripts, por lo que su %pre puede editar el kickstart y/o generar nuevos fragmentos de kickstart para usar con %include .)


Comandos como estos normalmente no están disponibles en el %pre sección de kickstart.

extracto:http://narrabilis.com/book/export/s5/6

% anterior

La sección %pre es donde puede especificar comandos para ejecutar antes de instalar el sistema. Los comandos colocados aquí no se ejecutan en el entorno de instalación chroot. %pre debe ir al final del archivo kickstart. Puede agregar --interpreter al %pre línea para que el script previo ejecute un intérprete diferente de /bin/sh

La documentación de Fedora también analiza lo que está disponible en %pre , en la sección Capítulo 4. Script de preinstalación de los documentos de Anaconda/Kickstart.

extracto

Puede agregar comandos para que se ejecuten en el sistema inmediatamente después de que se haya analizado ks.cfg y se hayan procesado las opciones de idioma, teclado y URL. Esta sección debe estar al final del archivo kickstart (después de los comandos) y debe comenzar con el comando %pre. Puede acceder a la red en la sección %pre; sin embargo, el servicio de nombres no se ha configurado en este momento, por lo que solo funcionarán las direcciones IP.

Finalmente, los documentos oficiales de Red Hat tienen esto que decir, titulado:32.6. Script de preinstalación:

La sección del script de preinstalación de kickstart no puede administrar varios árboles de instalación o medios de origen. Esta información debe incluirse para cada archivo ks.cfg creado, ya que el script de preinstalación se produce durante la segunda etapa del proceso de instalación.

Así tendrás acceso a los comandos que están incluidos en tu intérprete (Bash, Python, etc) pero poco más.


Después de investigar un poco más, encontré un montón de información del sistema en /proc que está disponible para ver cuando el %pre sección en ks.cfg ejecuta Consulte dmidecode y archivos en /proc para obtener toda la información que necesita. Esto es lo que funcionó para mí:

%pre --log=/tmp/ks_pre.log
  #!/bin/sh
  #----------------------------------------------
  # echos message to console screen and a log file
  #----------------------------------------------
  echo_screen_n_log() {
    msg=$1
    # Send to console screen
    (echo "$msg") >/dev/tty1
    # Send to log
    echo "$msg"
  }

  echo_screen_n_log ""
  echo_screen_n_log "Analyzing Hardware..."
  echo_screen_n_log ""

  #----------------------------------------------
  # System Memory
  #----------------------------------------------
  IFS=$'\n'
  mem_info=(`dmidecode --type memory`)
  unset IFS

  sys_mem_sizes=""
  sys_mem_banks=""
  sys_tot_mem=0
  cntr=0
  bank_cntr=0
  for i in "${mem_info[@]}"
  do
    # echo_screen_n_log "i: $i"
    # Maximum system memory that can be placed on the motherboard
    REG_EX="Maximum Capacity: (.*)$"
    if [[ $i =~ $REG_EX ]]
    then
      sys_mem_max=${BASH_REMATCH[1]} 
    fi
    # How many memory slots are on the motherboard
    REG_EX="Number Of Devices: (.*)$"
    if [[ $i =~ $REG_EX ]]
    then
      sys_mem_slots=${BASH_REMATCH[1]} 
    fi
    REG_EX="^[[:space:]]+Size: (.*)$"
    if [[ $i =~ $REG_EX ]]
    then
      sys_mem_sizes[cntr]=${BASH_REMATCH[1]}
      cntr=$(( $cntr + 1 ))
    fi
    REG_EX="^[[:space:]]+Bank Locator: (.*)$"
    if [[ $i =~ $REG_EX ]]
    then
      sys_mem_banks[bank_cntr]=${BASH_REMATCH[1]}
      bank_cntr=$(( $bank_cntr + 1 ))
    fi   
  done
  cntr=$(( $cntr - 1 ))
  echo_screen_n_log "Max system memory: $sys_mem_max"
  echo_screen_n_log "Total system slots: $sys_mem_slots"
  i=0
  while [ $i -le $cntr ]
  do
    echo_screen_n_log "Memory Bank Location ${sys_mem_banks[$i]} : ${sys_mem_sizes[$i]}"
    REG_EX="No Module Installed$"
    if [[ ! ${sys_mem_sizes[$i]} =~ $REG_EX ]]
    then
      REG_EX="^([0-9]+) [A-Z][A-Z]$"
      if [[ ${sys_mem_sizes[$i]} =~ $REG_EX ]]
      then
    sys_tot_mem=$(( $sys_tot_mem + ${BASH_REMATCH[1]} ))
      fi
    fi
    i=$(( $i + 1 ))
  done
  echo_screen_n_log "System Total Memory: $sys_tot_mem MB"

  #--------------------------------------------
  # Get Disk size information
  #--------------------------------------------
  IFS=$'\n'
  disk_info=(`cat /proc/partitions`)
  unset IFS

  total_disk_space=0
  type=""
  # Grab from minor column starting with 0 ending in 3 letters (drive node) 
  REG_EX="0\s+([0-9]+) [a-z][a-z][a-z]$"
  for i in "${disk_info[@]}"
  do
    # echo_screen_n_log "i: $i"
    if [[ $i =~ $REG_EX ]]
    then
      total_disk_space=${BASH_REMATCH[1]}
      total_disk_space=$(( $total_disk_space * 1024 ))
      type="GB"
      div_num=1000000000
      if [ "$total_disk_space" -lt $div_num ]
      then
        type="MB"
        div_num=1000000
      fi
      total_disk_space=$(( $total_disk_space / $div_num ))
    fi
  done
  echo_screen_n_log "Disk Space: $total_disk_space $type"

  #-----------------------------------------------------
  # Get CPU model name
  #-----------------------------------------------------
  cpu_grep=`grep 'model name' /proc/cpuinfo`
  cpu_model_nm="Not Found!"
  REG_EX="^.*: (.*)$"
  if [[ $cpu_grep =~ $REG_EX ]]
  then
    cpu_model_nm=${BASH_REMATCH[1]}
  fi
  echo_screen_n_log "CPU Model: $cpu_model_nm"

  #-------------------------------------------------------
  # Get number of physical CPUs
  #-------------------------------------------------------
  IFS=$'\n'
  cpu_count=(`grep "physical id" /proc/cpuinfo`)
  unset IFS

  last_cpu_id=""
  total_cpu_cnt=0
  # Add up all cores of the CPU to get total MIPS
  total_cpus=0
  REG_EX="^physical id\s+: ([0-9]+)$"
  for i in "${cpu_count[@]}"
  do
    # echo_screen_n_log "i: $i"
    if [[ $i =~ $REG_EX ]]
    then
  cpu_id=${BASH_REMATCH[1]}
      if [ ! "$last_cpu_id" = "$cpu_id" ]
      then
    total_cpu_cnt=$(( $total_cpu_cnt + 1 ))
    last_cpu_id=$cpu_id
  fi
    fi
  done
  echo_screen_n_log "System physical CPUs: $total_cpu_cnt"

  #-------------------------------------------------------
  # Get number of CPU cores
  #-------------------------------------------------------
  IFS=$'\n'
  cpu_cores=(`grep -m 1 "cpu cores" /proc/cpuinfo`)
  unset IFS

  total_cpu_cores=0
  REG_EX="^cpu cores\s+: ([0-9]+)$"
  for i in "${cpu_cores[@]}"
  do
    # echo_screen_n_log "i: $i"
    if [[ $i =~ $REG_EX ]]
    then
  total_cpu_cores=${BASH_REMATCH[1]}
    fi
  done
  echo_screen_n_log "CPU cores: $total_cpu_cores"

  #-------------------------------------------------------
  # CPU MHz
  #-------------------------------------------------------
  IFS=$'\n'
  dmi_cpu_MHz=(`dmidecode --string processor-frequency`)
  unset IFS

  cpu_MHz=0
  REG_EX="^[0-9]+ "
  for i in "${dmi_cpu_MHz[@]}"
  do
    # echo_screen_n_log "i: $i"
    if [[ $i =~ $REG_EX ]]
    then
  cpu_MHz=${BASH_REMATCH[1]}
    fi
  done
  echo_screen_n_log "CPU MHz: ${dmi_cpu_MHz:0:1}.${dmi_cpu_MHz:1:$(( ${#dmi_cpu_MHz} - 1 ))}"

  #-------------------------------------------------------
  # Get CPU bogomips (Millions of instructions per second)
  #-------------------------------------------------------
  IFS=$'\n'
  cpu_mips=(`grep "bogomips" /proc/cpuinfo`)
  unset IFS

  # Add up all cores of the CPU to get total MIPS
  total_mips=0
  REG_EX="\s([0-9]+)\..*$"
  for i in "${cpu_mips[@]}"
  do
    # echo_screen_n_log "i: $i"
    if [[ $i =~ $REG_EX ]]
    then
  cpu_bogomips=${BASH_REMATCH[1]}
      total_mips=$(( $total_mips + $cpu_bogomips ))
    fi
  done
  echo_screen_n_log "Total CPU MIPS (Millions of instructions per second) : $total_mips"

  echo_screen_n_log ""
  (echo -n "Press <enter> to continue..") >/dev/tty1
  read text
%end

Solo necesito agregar los criterios para determinar cómo debe ser un sistema base para nuestras instalaciones y listo...

Actualizado esto con más información... También puede hacer lo siguiente para la información del disco en la sección %pre:

IFS=$'\n'
parted_txt=(`parted -l`)
unset IFS

for i in "${parted_txt[@]}"
do
#    (echo "i: \"$i\"") >/dev/tty1
  REG_EX="^Model: (.*)$"
  if [[ $i =~ $REG_EX ]]
  then
    disk_model=${BASH_REMATCH[1]}
#      (echo "Disk Model: \"$disk_model\"") >/dev/tty1
  fi

  REG_EX="^Disk (.*): ([0-9]+).[0-9]([A-Z][A-Z])$"
  if [[ $i =~ $REG_EX ]]
  then
    disk_device=${BASH_REMATCH[1]}
    disk_capacity=${BASH_REMATCH[2]}
    disk_capacity_type=${BASH_REMATCH[3]}
    (echo "Device: \"$disk_device\"  \"$disk_capacity\"  $disk_capacity_type") >/dev/tty1
    IFS=$'\n'
    disk_txt=(`udevadm info --query=all --name=$disk_device`)
    unset IFS
     is_USB_drive=0
    for j in "${disk_txt[@]}"
    do
      #(echo "j: \"$j\"") >/dev/tty1
   REG_EX="^ID_BUS=usb$"
   if [[ $j =~ $REG_EX ]]
       then
     # USB keys are not to be included in total disk space
       #       (echo "$disk_device is a USB drive!") >/dev/tty1
        is_USB_drive=1
   fi
    done
    if [ "$is_USB_drive" = "0" ]
    then
   total_capacity=$(( $total_capacity + $disk_capacity ))
    fi
  fi
done

(echo "Disk Model: $disk_model") >/dev/tty1
(echo "Disk $disk_device Capacity: $total_capacity $disk_capacity_type") >/dev/tty1

Linux
  1. ¿Qué comandos faltan en su archivo bashrc?

  2. ¿Qué son los separadores de palabras de Readline?

  3. ¿Cuáles son los usos legítimos del comando "tocar"?

  4. ¿Cuáles son los permisos de archivo convencionales por tipo de archivo antes de aplicar Umask?

  5. Fedora vs Ubuntu:¿Cuáles son las diferencias clave?

¿Qué son los inodos en Linux?

¿Cuáles son las opciones de montaje para mejorar el rendimiento del sistema de archivos ext4 en Linux?

¿Cuáles son las diferencias entre grep, awk y sed?

¿Cuál es la diferencia de sección y segmento en formato de archivo ELF?

¿Cuáles son los comandos estándar disponibles en todas las distribuciones basadas en Linux?

¿Cuáles son las diferentes formas de establecer permisos de archivo, etc. en gnu/linux?