GNU/Linux >> Linux の 問題 >  >> Linux

CentOS のキックスタート ファイルの %pre セクションで使用できるコマンドは何ですか?

%pre キックスタートのセクション インストーラー環境内 .

RHEL6.5 のインストーラー環境で使用できる便利なコマンドのリストは次のとおりです:

  • シェル ユーティリティ: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
  • 編集者とページャー:less more vi
  • ハッシュ ユーティリティ:md5sum sha1sum sha256sum
  • 圧縮とアーカイブ:gzip bzip2 cpio dd tar rpm
  • fsck /mkfs /等。 ext2 ext3 ext4 xfs btrfs msdos vfat の場合
  • その他のファイルシステム:mkswap swapon swapoff dmraid dmsetup mdadm mdmon dump restore mt lvm lvs vgs pvs ...
  • ネットワーク ユーティリティ: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
  • ハードウェア情報:biosdevname blkdeactivate blkid blockdev dmidecode lshal lspci lsscsi sginfo smartctl
  • ディスクユーティリティ:eject dump restore hdparm smartctl losetup kpartx parted fdisk sfdisk
  • コンソール処理/ダイアログ:chvt consolehelper openvt whiptail zenity
  • ロギング:logger rsyslogd syslogd
  • python
  • 他にもたくさんあります!

手動インストールを実行する場合は、VT2 のターミナルに切り替えることができます (Ctrl Alt F2 ) を探し回って、インストーラー環境内で利用可能なすべてのものを見つけてください。 compgen -c | sort -u /sys には、利用可能なすべてのコマンドを一覧表示する簡単な方法があり、多くのシステム情報が見つかります。 と /proc .

(そして、はい、キックスタートは %pre の後に再解析されます スクリプトが実行されるので、 %pre キックスタートを編集したり、%include で使用する新しいキックスタート スニペットを生成したりできます。 .)


これらのようなコマンドは、通常、%pre では使用できません。 キックスタートのセクション

抜粋 - http://narrabilis.com/book/export/s5/6

<ブロック引用>

%pre

%pre セクションでは、システムをインストールする前に実行するコマンドを指定できます。ここに配置されたコマンドは、chroot インストール環境では実行されません。 %pre キックスタート ファイルの最後にある必要があります。 --interpter を %pre に追加できます pre スクリプトが /bin/sh とは異なるインタープリターを実行するようにする行

Fedora のドキュメントでは、%pre で何が利用できるかについても説明しています。 セクション第 4 章。Anaconda/Kickstart ドキュメントのプレインストール スクリプト。

抜粋

<ブロック引用>

ks.cfg が解析され、lang、keyboard、および url オプションが処理された直後に、システムで実行するコマンドを追加できます。このセクションは、キックスタート ファイルの末尾 (コマンドの後) にある必要があり、%pre コマンドで開始する必要があります。 %pre セクションでネットワークにアクセスできます。ただし、この時点ではネーム サービスは構成されていないため、IP アドレスのみが機能します。

最後に、Red Hat の公式ドキュメントには次のように書かれています:32.6.インストール前のスクリプト:

<ブロック引用>

キックスタートのプレインストール スクリプト セクションでは、複数のインストール ツリーまたはソース メディアを管理できません。この情報は、インストール前のスクリプトがインストール プロセスの第 2 段階で発生するため、作成された ks.cfg ファイルごとに含める必要があります。

そのため、インタープリターに含まれているコマンド (Bash、Python など) にはアクセスできますが、それ以外にはほとんどアクセスできません。


もう少し掘り下げた後、 /proc で大量のシステム情報を見つけました %pre ks.cfg のセクション 実行します。 /proc の dmidecode とファイルをチェックアウトして、必要なすべての情報を取得します。これが私のために働いたものです:

%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

インストールの基本システムがどのように見えるべきかを決定するための基準を追加する必要があるだけで、完了です.....

詳細情報を追加して更新しました... %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. CentOS / RHEL のネットワーク ボンディング モードとは

  2. Linux で ext4 ファイルシステムのパフォーマンスを向上させるためのマウント オプションは何ですか

  3. libtool の .la ファイルは何のためのものですか?

  1. grep、awk、sed の違いは何ですか?

  2. ELFファイル形式のセクションとセグメントの違いは何ですか

  3. キックスタート ファイルで指定された yum リポジトリのインストール

  1. bashrcファイルに欠落しているコマンドは何ですか?

  2. すべての Linux ベースのディストリビューションで使用できる標準コマンドはどれですか?

  3. gnu/linuxでファイルパーミッションなどを設定するさまざまな方法は何ですか?