OnWorks Linux ແລະ Windows Online WorkStations

Logo

ໂຮດຕິ້ງອອນໄລນ໌ຟຣີສໍາລັບ WorkStations

<Previous | ເນື້ອໃນ | ຕໍ່ໄປ>

D.1. /etc/rc.d/init.d/rc

ໄດ້ rc script ແມ່ນ script ທໍາອິດທີ່ເອີ້ນໂດຍ init ແລະເລີ່ມຕົ້ນຂະບວນການ boot.

ຮູບພາບເລັກນ້ອຍ

#! / bin / bash

################################################ ######################

# ເລີ່ມຕົ້ນ rc

#

# ລາຍລະອຽດ : Main Run Level Control Script

#

# ຜູ້ຂຽນ : Gerard Beekmans - [email protected]

#: DJ Lucas - [email protected]

# ອັບເດດ: Bruce Dubbs - [email protected]

#

# ລຸ້ນ : LFS 7.0

#

################################################ ######################

. /lib/lsb/init-functions print_error_msg()

{

log_failure_msg

# $i ຖືກຕັ້ງເມື່ອໂທຫາ

MSG="FAILURE:\n\nທ່ານບໍ່ຄວນອ່ານຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດນີ້.\n\n" MSG="${MSG}ມັນໝາຍຄວາມວ່າມີຄວາມຜິດພາດທີ່ຄາດບໍ່ເຖິງໄດ້ເກີດຂຶ້ນໃນ\n" MSG="${MSG}${ i},\n"

MSG="${MSG}ທີ່ອອກດ້ວຍຄ່າຕອບແທນ ${error_value}.\n"


MSG="${MSG}ຖ້າເຈົ້າສາມາດຕິດຕາມຄວາມຜິດພາດນີ້ໄປເຖິງບັນຫາໜຶ່ງໃນ\n" MSG="${MSG}ໄຟລ໌ທີ່ສະໜອງໃຫ້ໂດຍປຶ້ມ ${DISTRO_MINI},\n" MSG=" ${MSG}ກະລຸນາແຈ້ງພວກເຮົາທີ່ ${DISTRO_CONTACT}.\n" log_failure_msg "${MSG}"


log_info_msg "ກົດ Enter ເພື່ອສືບຕໍ່..." wait_for_user

}


check_script_status()

{

# $i ຖືກຕັ້ງເມື່ອເອີ້ນຖ້າ [ ! -f ${i} ]; ແລ້ວ

log_warning_msg "${i} ບໍ່ແມ່ນ symlink ທີ່ຖືກຕ້ອງ." SCRIPT_STAT="1"

fi


ຖ້າ [ ! -x ${i} ]; ແລ້ວ

ຮູບພາບເລັກນ້ອຍ


log_warning_msg "${i} ບໍ່ສາມາດປະຕິບັດໄດ້, ຂ້າມໄປ." SCRIPT_STAT="1"

fi

}


ແລ່ນ ()

{

ຖ້າ [ -z $interactive ]; ແລ້ວ

${1} ${2}

ກັບຄືນ $?

fi


ໃນຂະນະທີ່ຄວາມຈິງ; ເຮັດ

ອ່ານ -p "ແລ່ນ ${1} ${2} (ແມ່ນ/ບໍ່/ສືບຕໍ່)?" -n 1 runit echo


case ${runit} ໃນ c | ຄ)

ໂຕ້ຕອບ = ""

${i} ${2}

ret=${?} break;

;;


n | N)

ກັບຄືນ 0

;;


y | ຍ)

${i} ${2}

ret=${?} ຢຸດ

;;

esac ເຮັດແລ້ວ


ກັບຄືນ $ret

}


# ອ່ານການຕັ້ງຄ່າ / ການຍົກເລີກໃດໆໃນທ້ອງຖິ່ນ

[ -r /etc/sysconfig/rc.site ] && source /etc/sysconfig/rc.site


DISTRO=${DISTRO:-"Linux ຈາກ Scratch"}

DISTRO_CONTACT=${DISTRO_CONTACT:-"[email protected] (ຕ້ອງລົງທະບຽນ)"} DISTRO_MINI=${DISTRO_MINI:-"LFS"}

IPROMPT=${IPROMPT:-"ບໍ່"}


# 3 ສັນຍານນີ້ຈະບໍ່ເຮັດໃຫ້ script ຂອງພວກເຮົາອອກຈາກດັກ " "INT QUIT TSTP


[ "${1}" != "" ] && runlevel=${1}


ຖ້າ [ "${runlevel}" == "" ]; ຫຼັງຈາກນັ້ນ, ສະທ້ອນ "ການນໍາໃຊ້: ${0} ">&2 ອອກ 1

fi

ຮູບພາບເລັກນ້ອຍ


ທີ່ຜ່ານມາ=${PREVLEVEL}

[ "${previous}" == "" ] && Previous=N


ຖ້າ [ ! -d /etc/rc.d/rc${runlevel}.d ]; ແລ້ວ

log_info_msg "/etc/rc.d/rc${runlevel}.d ບໍ່ມີຢູ່.\n" ທາງອອກ 1

fi


ຖ້າ [ "$runlevel" == "6" -o "$runlevel" == "0" ]; ຈາກນັ້ນ IPROMPT="ບໍ່"; ຟີ


# ໝາຍເຫດ: ໃນ ${LOGLEVEL:-7} ແມ່ນ ':' 'dash' '7', ບໍ່ແມ່ນລົບ 7 ຖ້າ [ "$runlevel" == "S" ]; ແລ້ວ

[ -r /etc/sysconfig/console ] && source /etc/sysconfig/console dmesg -n "${LOGLEVEL:-7}"

fi


ຖ້າ [ "${IPROMPT}" == "ແມ່ນ" -a "${runlevel}" == "S" ]; ແລ້ວ

# ຄວາມຍາວທັງໝົດຂອງສະຕຣິງຕ້ອນຮັບ distro, ໂດຍບໍ່ມີລະຫັດ escape wlen=${wlen:-$(echo "Welcome to ${DISTRO}" | wc -c )} welcome_message=${welcome_message:-"ຍິນດີຕ້ອນຮັບສູ່ ${INFO }${DISTRO}${normAL}"}


# ຄວາມຍາວທັງໝົດຂອງສະຕຣິງແບບໂຕ້ຕອບ, ໂດຍບໍ່ມີລະຫັດ escape ilen=${ilen:-$(echo "ກົດ 'I' ເພື່ອເຂົ້າສູ່ການເລີ່ມຕົ້ນແບບໂຕ້ຕອບ" | wc -c )}

i_message=${i_message:-"ກົດ '${FAILURE}I${NORMAL}' ເພື່ອເຂົ້າສູ່ການເລີ່ມຕົ້ນແບບໂຕ້ຕອບ"}


# dcol ແລະ icon ແມ່ນຍະຫວ່າງກ່ອນຂໍ້ຄວາມເພື່ອວາງຂໍ້ຄວາມຢູ່ກາງ

# ໃນ​ຫນ້າ​ຈໍ​. itime ແມ່ນຈໍານວນເວລາລໍຖ້າສໍາລັບຜູ້ໃຊ້ກົດປຸ່ມ wcol=$(( ( ${COLUMNS} - ${wlen} ) / 2 ))

icol=$(( ( ${COLUMNS} - ${ilen} ) / 2 )) itime=${itime:-"3"}


echo -e "\n\n"

echo -e "\\033[${wcol}G${welcome_message}" echo -e "\\033[${icol}G${i_message}${NORMAL}" echo ""

ອ່ານ -t "${itime}" -n 1 ໂຕ້ຕອບ 2>&1 > /dev/null

fi


# ສ້າງຕົວພິມນ້ອຍ

[ "${interactive}" == "ຂ້ອຍ" ] && interactive="i" [ "${interactive}" != "i" ] && interactive=""


# ອ່ານໄຟລ໌ຂອງລັດຖ້າມັນມີຢູ່ຈາກ runlevel S

[ -r /var/run/interactive ] && source /var/run/interactive


# ຄວາມພະຍາຍາມທີ່ຈະຢຸດການບໍລິການທັງຫມົດທີ່ເລີ່ມຕົ້ນໂດຍລະດັບແລ່ນທີ່ຜ່ານມາ,

# ແລະຖືກຂ້າຕາຍໃນລະດັບແລ່ນນີ້

ຖ້າ [ "${previous}" != "N" ]; ແລ້ວ

ສໍາລັບ i ໃນ $(ls -v /etc/rc.d/rc${runlevel}.d/K* 2> /dev/null) ເຮັດ

check_script_status

ຖ້າ [ "${SCRIPT_STAT}" =="1" ]; ຈາກນັ້ນ SCRIPT_STAT="0"

ດໍາເນີນການຕໍ່

fi

ຮູບພາບເລັກນ້ອຍ


suffix=${i#/etc/rc.d/rc$runlevel.d/K[0-9][0-9]} prev_start=/etc/rc.d/rc$previous.d/S[0-9][0-9]$suffix sysinit_start=/etc/rc.d/rcS.d/S[0-9][0-9]$suffix


ຖ້າ [ "${runlevel}" != "0" -a "${runlevel}" != "6" ]; ແລ້ວ

ຖ້າ [ ! -f ${prev_start} -a ! -f ${sysinit_start} ]; ຈາກນັ້ນ MSG="ຄຳເຕືອນ:\n\n${i} ບໍ່ສາມາດເປັນ "

MSG="${MSG}ຖືກປະຕິບັດແລ້ວ ເພາະວ່າມັນບໍ່ແມ່ນ " MSG="${MSG}ບໍ່ໄດ້ເລີ່ມໃນ " MSG="${MSG}ແລ່ນລະດັບກ່ອນໜ້າ (${previous})." log_warning_msg "$MSG"

ດໍາເນີນການຕໍ່

fi

fi


ແລ່ນ ${i} ຢຸດ error_value=${?}


ຖ້າ [ "${error_value}" != "0" ]; ຈາກນັ້ນ print_error_msg; ສຳເລັດແລ້ວ

fi


ຖ້າ [ "${previous}" == "N" ]; ຈາກນັ້ນສົ່ງອອກ IN_BOOT=1; ຟີ


ຖ້າ [ "$runlevel" == "6" -a -n "${FASTBOOT}" ]; ຈາກນັ້ນແຕະ /fastboot

fi


# ເລີ່ມຟັງຊັນທັງໝົດໃນລະດັບແລ່ນນີ້

ສໍາລັບ i ໃນ $( ls -v /etc/rc.d/rc${runlevel}.d/S* 2> /dev/null) ເຮັດ

ຖ້າ [ "${previous}" != "N" ]; ຈາກນັ້ນ suffix=${i#/etc/rc.d/rc$runlevel.d/S[0-9][0-9]} stop=/etc/rc.d/rc$runlevel.d/K[0 -9][0-9]$suffix prev_start=/etc/rc.d/rc$previous.d/S[0-9][0-9]$suffix


[ -f ${prev_start} -a ! -f ${stop} ] && ສືບຕໍ່

fi


check_script_status

ຖ້າ [ "${SCRIPT_STAT}" =="1" ]; ຈາກນັ້ນ SCRIPT_STAT="0"

ດໍາເນີນການຕໍ່

fi


ກໍລະນີ ${runlevel} ໃນ 0|6)

ແລ່ນ ${i} ຢຸດ

;;

*)


ວ່າ C


ແລ່ນ ${i} ເລີ່ມ

;;


error_value=${?}



ຖ້າ [ "${error_value}" != "0" ]; ຈາກນັ້ນ print_error_msg; ສຳເລັດແລ້ວ


# ເກັບຮັກສາຕົວແປແບບໂຕ້ຕອບໃນສະວິດຈາກລະດັບແລ່ນ S ແລະເອົາອອກຖ້າບໍ່ແມ່ນຖ້າ [ "${runlevel}" == "S" -a "${interactive}" =="i" ]; ແລ້ວ

echo "ໂຕ້ຕອບ = \"i\" > /var/run/interactive

ອື່ນ

rm -f /var/run/interactive 2> /dev/null

fi


# ສຳເນົາບັນທຶກການບູດໃສ່ການບູດເບື້ອງຕົ້ນເທົ່ານັ້ນ

ຖ້າ [ "${previous}" == "N" -a "${runlevel}" != "S" ]; ຫຼັງຈາກນັ້ນ cat $BOOTLOG >> /var/log/boot.log


# ໝາຍຈຸດສິ້ນສຸດຂອງເກີບ

echo "--------" >> /var/log/boot.log


# ເອົາໄຟລ໌ຊົ່ວຄາວ rm -f $BOOTLOG 2> /dev/null

fi


# ຈົບ rc

ຖ້າ [ "${error_value}" != "0" ]; ຈາກນັ້ນ print_error_msg; ສຳເລັດແລ້ວ


# ເກັບຮັກສາຕົວແປແບບໂຕ້ຕອບໃນສະວິດຈາກລະດັບແລ່ນ S ແລະເອົາອອກຖ້າບໍ່ແມ່ນຖ້າ [ "${runlevel}" == "S" -a "${interactive}" =="i" ]; ແລ້ວ

echo "ໂຕ້ຕອບ = \"i\" > /var/run/interactive

ອື່ນ

rm -f /var/run/interactive 2> /dev/null

fi


# ສຳເນົາບັນທຶກການບູດໃສ່ການບູດເບື້ອງຕົ້ນເທົ່ານັ້ນ

ຖ້າ [ "${previous}" == "N" -a "${runlevel}" != "S" ]; ຫຼັງຈາກນັ້ນ cat $BOOTLOG >> /var/log/boot.log


# ໝາຍຈຸດສິ້ນສຸດຂອງເກີບ

echo "--------" >> /var/log/boot.log


# ເອົາໄຟລ໌ຊົ່ວຄາວ rm -f $BOOTLOG 2> /dev/null

fi


# ຈົບ rc


ຮູບພາບເລັກນ້ອຍ

ຮູບພາບເລັກນ້ອຍ

: Gerard Beekmans - [email protected]

: DJ Lucas - [email protected]

: Bruce Dubbs - [email protected]

: Gerard Beekmans - [email protected]

: DJ Lucas - [email protected]

: Bruce Dubbs - [email protected]

: LFS 7.0


: ດ້ວຍລະຫັດໂດຍອີງໃສ່ simpleinit-msb ຂອງ Matthias Benkmann http://winterdrache.de/linux/newboot/index.html


ໄຟລ໌ຄວນຈະຢູ່ໃນ /lib/lsb

: LFS 7.0


: ດ້ວຍລະຫັດໂດຍອີງໃສ່ simpleinit-msb ຂອງ Matthias Benkmann http://winterdrache.de/linux/newboot/index.html


ໄຟລ໌ຄວນຈະຢູ່ໃນ /lib/lsb

OS Cloud Computing ຍອດນິຍົມຢູ່ OnWorks: