GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Welche Befehle sind im %pre-Abschnitt einer Kickstart-Datei unter CentOS verfügbar?

Der %pre Abschnitt(e) Ihres Kickstarts werden innerhalb der Installationsumgebung ausgeführt .

Hier ist eine Liste hilfreicher Befehle, die in der Installationsumgebung in RHEL6.5 verfügbar sind:

  • Shell-Dienstprogramme: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
  • Editoren und Pager:less more vi
  • Hash-Dienstprogramme:md5sum sha1sum sha256sum
  • Komprimierung und Archivierung:gzip bzip2 cpio dd tar rpm
  • fsck /mkfs /etc. für ext2 ext3 ext4 xfs btrfs msdos vfat
  • Anderes Dateisystem-Zeug:mkswap swapon swapoff dmraid dmsetup mdadm mdmon dump restore mt lvm lvs vgs pvs ...
  • Netzwerkdienstprogramme: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
  • Hardwareinfo:biosdevname blkdeactivate blkid blockdev dmidecode lshal lspci lsscsi sginfo smartctl
  • Festplatten-Dienstprogramme:eject dump restore hdparm smartctl losetup kpartx parted fdisk sfdisk
  • Konsolenhandling / Dialoge:chvt consolehelper openvt whiptail zenity
  • Protokollierung:logger rsyslogd syslogd
  • python
  • Und vieles mehr!

Wenn Sie eine manuelle Installation ausführen, können Sie auf VT2 zum Terminal wechseln (Strg Alt F2 ) und stöbern Sie herum, um herauszufinden, was in der Installationsumgebung verfügbar ist. compgen -c | sort -u ist eine einfache Möglichkeit, jeden verfügbaren Befehl aufzulisten, und in /sys sind viele Systeminformationen zu finden und /proc .

(Und ja, der Kickstart wird nach %pre neu geparst Skripte laufen, also Ihr %pre können den Kickstart bearbeiten und/oder neue Kickstart-Snippets zur Verwendung mit %include generieren .)


Befehle wie diese sind normalerweise nicht im %pre verfügbar Abschnitt von Kickstart.

Auszug - http://narrabilis.com/book/export/s5/6

%pre

Im Abschnitt %pre können Sie Befehle angeben, die ausgeführt werden sollen, bevor das System installiert wird. Hier platzierte Befehle werden nicht in der Chroot-Installationsumgebung ausgeführt. %pre muss am Ende der Kickstart-Datei stehen. Sie können --interpreter an %pre anhängen Zeile, damit das Pre-Skript einen anderen Interpreter als /bin/sh ausführt

Die Fedora-Dokumentation erläutert auch, was in %pre verfügbar ist , im Abschnitt Kapitel 4. Vorinstallationsskript der Anaconda/Kickstart-Dokumentation.

Auszug

Sie können Befehle hinzufügen, die sofort auf dem System ausgeführt werden, nachdem die Datei ks.cfg analysiert und die Optionen lang, keyboard und url verarbeitet wurden. Dieser Abschnitt muss am Ende der Kickstart-Datei stehen (nach den Befehlen) und mit dem %pre-Befehl beginnen. Sie können auf das Netzwerk im Abschnitt %pre zugreifen; jedoch wurde der Namensdienst zu diesem Zeitpunkt noch nicht konfiguriert, sodass nur IP-Adressen funktionieren.

Schließlich haben die offiziellen Dokumente von Red Hat folgendes zu sagen:32.6. Vorinstallationsskript:

Der Vorinstallations-Skriptabschnitt von Kickstart kann nicht mehrere Installationsbäume oder Quellmedien verwalten. Diese Informationen müssen für jede erstellte ks.cfg-Datei enthalten sein, da das Vorinstallationsskript während der zweiten Phase des Installationsprozesses ausgeführt wird.

Sie haben also Zugriff auf Befehle, die in Ihrem Interpreter (Bash, Python usw.) enthalten sind, aber sonst wenig.


Nachdem ich ein bisschen mehr gegraben hatte, fand ich eine Menge Systeminformationen in /proc die zur Ansicht verfügbar ist, wenn %pre Abschnitt in ks.cfg führt aus. Überprüfen Sie dmidecode und Dateien in /proc, um alle Informationen zu erhalten, die Sie benötigen. Folgendes hat bei mir funktioniert:

%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

Ich muss nur die Kriterien hinzufügen, um zu bestimmen, wie ein Basissystem für unsere Installationen aussehen sollte, und ich bin fertig.....

Dies wurde mit weiteren Informationen aktualisiert ... Sie können auch Folgendes für Festplatteninformationen im %pre-Abschnitt tun:

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. Welche Mount-Optionen gibt es, um die Leistung des ext4-Dateisystems unter Linux zu verbessern?

  2. Wozu dient die .la-Datei von libtool?

  3. Was sind die Unterschiede zwischen grep, awk und sed?

  4. Was ist der Unterschied zwischen Abschnitt und Segment im ELF-Dateiformat

  5. Welche Methoden stehen zur Verfügung, um die CPU-Auslastung in der Linux-Befehlszeile abzurufen?

Was sind die Worttrennzeichen von Readline?

Was sind die legitimen Verwendungen des Befehls „Berühren“?

Was sind die herkömmlichen Dateiberechtigungen pro Dateityp, bevor Umask angewendet wird?

Fedora vs. Ubuntu:Was sind die Hauptunterschiede?

Was sind Inodes unter Linux?

Was ist der Zweck der .bashrc-Datei in Linux