GNU/Linux >> Belajar Linux >  >> Linux

Perintah apa yang tersedia di bagian %pre file Kickstart di CentOS?

%pre bagian awal Anda berjalan di dalam lingkungan penginstal .

Berikut daftar perintah bermanfaat yang tersedia di lingkungan penginstal di RHEL6.5:

  • Utilitas 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
  • Editor dan pager:less more vi
  • Utilitas hash:md5sum sha1sum sha256sum
  • Kompresi dan arsip:gzip bzip2 cpio dd tar rpm
  • fsck /mkfs /dll. untuk ext2 ext3 ext4 xfs btrfs msdos vfat
  • Hal sistem file lainnya:mkswap swapon swapoff dmraid dmsetup mdadm mdmon dump restore mt lvm lvs vgs pvs ...
  • Utilitas jaringan: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
  • Info perangkat keras:biosdevname blkdeactivate blkid blockdev dmidecode lshal lspci lsscsi sginfo smartctl
  • Utilitas disk:eject dump restore hdparm smartctl losetup kpartx parted fdisk sfdisk
  • Penanganan / dialog konsol:chvt consolehelper openvt whiptail zenity
  • Mencatat:logger rsyslogd syslogd
  • python
  • Dan banyak lagi!

Jika Anda menjalankan penginstalan manual, Anda dapat beralih ke terminal di VT2 (Ctrl Alt F2 ) dan melihat-lihat untuk mencari tahu semua yang tersedia di dalam lingkungan penginstal. compgen -c | sort -u adalah cara mudah untuk membuat daftar setiap perintah yang tersedia, dan ada banyak informasi sistem yang dapat ditemukan di /sys dan /proc .

(Dan ya, kickstart diurai ulang setelah %pre skrip berjalan, jadi %pre Anda dapat mengedit kickstart dan/atau membuat cuplikan kickstart baru untuk digunakan dengan %include .)


Perintah seperti ini biasanya tidak tersedia di %pre bagian awal.

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

%pra

Bagian %pre adalah tempat Anda dapat menentukan perintah untuk dijalankan sebelum sistem diinstal. Perintah yang ditempatkan di sini tidak dijalankan di lingkungan instalasi chroot. %pre harus ada di akhir file kickstart. Anda dapat menambahkan --interpreter ke %pre baris agar pra skrip menjalankan juru bahasa yang berbeda dari /bin/sh

Dokumentasi Fedora juga membahas apa yang tersedia di %pre , di bagian Bab 4. Pra-instalasi Skrip dokumen Anaconda/Kickstart.

kutipan

Anda dapat menambahkan perintah untuk dijalankan pada sistem segera setelah ks.cfg diuraikan dan opsi lang, keyboard, dan url telah diproses. Bagian ini harus berada di akhir file kickstart (setelah perintah) dan harus dimulai dengan perintah %pre. Anda dapat mengakses jaringan di bagian %pre; namun, layanan nama belum dikonfigurasi pada saat ini, jadi hanya alamat IP yang akan berfungsi.

Akhirnya dokumen resmi Red Hat mengatakan ini, berjudul:32.6. Skrip Pra-pemasangan:

Bagian skrip pra-pemasangan kickstart tidak dapat mengelola beberapa pohon pemasangan atau media sumber. Informasi ini harus disertakan untuk setiap file ks.cfg yang dibuat, karena skrip pra-pemasangan terjadi selama tahap kedua proses pemasangan.

Jadi, Anda akan memiliki akses ke perintah yang disertakan dalam juru bahasa Anda (Bash, Python, dll) tetapi sedikit lagi.


Setelah menggali lebih dalam, saya menemukan banyak info sistem di /proc yang tersedia untuk dilihat saat %pre bagian dalam ks.cfg mengeksekusi. Lihat dmidecode dan file di /proc untuk mendapatkan semua informasi yang Anda butuhkan. Inilah yang berhasil untuk saya:

%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

Saya hanya perlu menambahkan kriteria untuk menentukan seperti apa sistem dasar untuk instalasi kita dan saya selesai.....

Memperbarui ini dengan lebih banyak informasi...Anda juga dapat melakukan hal berikut untuk info disk di bagian %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. Perintah apa yang hilang dari file bashrc Anda?

  2. Apa itu Pemisah Kata Readline?

  3. Apa Izin File Konvensional Per Jenis File Sebelum Umask Diterapkan?

  1. Fedora vs Ubuntu:Apa perbedaan utama?

  2. Apa manfaat CloudLinux?

  3. Untuk apa file .la libtool?

  1. Apa perbedaan antara grep, awk &sed?

  2. Apa saja metode yang tersedia untuk mendapatkan penggunaan CPU di Linux Command line?

  3. Apa saja perintah standar yang tersedia di setiap distribusi berbasis Linux?