LINUX.ORG.RU

[Slackware] Вывод процесса загрузки скрипров при старте системы как в Gentoo или Arch'е

 


0

1

Здравствуй ЛОР!

Как сделать сабж в Слаке? Т.е. организовать вывод таким вот образом:

...
Starting network...                                [  ok  ]
Starting syslog...                                 [ fail ]
%какое-то_ещё_сообщение%                           [статус]
...

Есть ли готовые рецепты? Или подскажите как это реализовано, например, в Арче.


Сделать форк и переписать скрипты инициализации.

urxvt ★★★★★
()
Ответ на: комментарий от KblCb

Это понятно. Чтоб не заниматься велосипедостроением хочется знать как это реализовано в других дистрах.

fpm
() автор топика
Ответ на: комментарий от cadaber

Как нафига? Just for fun, же :)

По сабжу (если кому интересно): в Арче есть скрипт /etc/rc.d/functions в котором, по всей видимости, и описан процесс отображения начальной загрузки. В Слаке его нет (точнее есть function из RedHat'а, но он не торт). Сейчас попробую подсадить в Слаку Арчевский скрипт, добавлю нужные функции в конфиги инициализации и посмотрю что получится. Нужные функции: stat_busy, stat_done и stat_fail, может ещё что-нибудь.

fpm
() автор топика

Таки да, переписать скрипты. А вы копните чуть глубже красоты и поставьте себе арч или генту. Профит не заставит себя ждать, особенно в во втором случае.

Insomnium ★★★★
()
Ответ на: комментарий от Insomnium

Arch - хорош! Gentoo - прекрасна! Но Слака уж больно приглянулась.

fpm
() автор топика

Итак, чтобы сделать в Слаке старт скриптов при загрузке такой же как в Арче нужно:
1. Взять из Арчевского скрипта /etc/rc.b/function необходимый кусок и сохранить его в отдельный файл:

#!/bin/bash

# width:

STAT_COL=80
if [[ ! -t 1 ]]; then
    USECOLOR=""
elif [[ -t 0 ]]; then
    # stty will fail when stdin isn't a terminal
    STAT_COL="$(/bin/stty size)"
    # stty gives "rows cols"; strip the rows number, we just want columns
    STAT_COL="${STAT_COL##* }"
elif /bin/tput cols &>/dev/null; then
    # is /usr/share/terminfo already mounted, and TERM recognized?
    STAT_COL=$(/bin/tput cols)
fi
if ((STAT_COL==0)); then
    # if output was 0 (serial console), set default width to 80
    STAT_COL=80
    USECOLOR=""
fi

# we use 13 characters for our own stuff
STAT_COL=$(($STAT_COL - 13))

# clear the TZ envvar, so daemons always respect /etc/localtime
unset TZ

# sanitize the locale settins
unset LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY \
      LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE \
      LC_MEASUREMENT LC_IDENTIFICATION LC_ALL
if [[ $DAEMON_LOCALE =~ yes|YES && -n $LOCALE ]]; then
	export LANG="${LOCALE}"
else
	export LANG=C
fi

USECOLOR=yes

# colors:
if [[ $USECOLOR = YES || $USECOLOR = yes ]]; then
	C_MAIN="\033[1;37;40m"      # main text

	C_OTHER="\033[1;34;40m"     # prefix & brackets
	C_SEPARATOR="\033[1;30;40m" # separator

	C_BUSY="\033[0;36;40m"      # busy
	C_FAIL="\033[1;31;40m"      # failed
	C_DONE="\033[1;37;40m"      # completed
	C_BKGD="\033[1;35;40m"      # backgrounded

	C_H1="\033[1;37;40m"        # highlight text 1
	C_H2="\033[1;36;40m"        # highlight text 2

	C_CLEAR="\033[1;0m"
fi

if [[ -t 1 ]]; then
	SAVE_POSITION="\033[s"
	RESTORE_POSITION="\033[u"
	DEL_TEXT="\033[$(($STAT_COL+4))G"
else
	SAVE_POSITION=""
	RESTORE_POSITION=""
	DEL_TEXT=""
fi

# prefixes:

PREFIX_REG="::"
PREFIX_HL=" >"

# functions

deltext() {
	printf "${DEL_TEXT}"
}

printhl() {
	printf "${C_OTHER}${PREFIX_HL} ${C_H1}${1}${C_CLEAR} \n"
}

stat_busy() {
	printf "${C_OTHER}${PREFIX_REG} ${C_MAIN}${1}${C_CLEAR} "
	printf "${SAVE_POSITION}"
	deltext
	printf "   ${C_OTHER}[${C_BUSY}BUSY${C_OTHER}]${C_CLEAR} "
}

stat_done() {
	deltext
	printf "   ${C_OTHER}[${C_DONE}DONE${C_OTHER}]${C_CLEAR} \n"
}

stat_fail() {
	deltext
	printf "   ${C_OTHER}[${C_FAIL}FAIL${C_OTHER}]${C_CLEAR} \n"
}

status() {
	stat_busy "$1"
	shift
	if "$@" >/dev/null 2>&1; then
		stat_done
		return 0
	fi
	stat_fail
	return 1
}

2. Обозначить полученный скрипт в сценарии загрузки, например, rc.M
3. Каждую строку инициализвции дополнить функцией status, например:

# Start the system logger.
if [ -x /etc/rc.d/rc.syslog -a -x /usr/sbin/syslogd -a -d /var/log ]; then
  status "Start the system logger" . /etc/rc.d/rc.syslog start
fi
4. ?????
5. PROFIT

В результате можно получить процесс загрузки очень похожий на Арчевый, а поигравшись с форматом сообщений и цветовыми схемами - на что только душа пожелает.

fpm
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.