Скрипты в Slackware

SLAX, Deep Style, ZenWalk

Модератор: Модераторы разделов

Ответить
Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)
Контактная информация:

Скрипты в Slackware

Сообщение sunny1983 »

С какой целью в /etc/profile.d используются и sh и csh скрипты, дублирующие друг друга по смыслу.
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: Скрипты в Slackware

Сообщение bormant »

То есть, всем, кто выберет не sh-совместимую оболочку (csh, tcsh), предлагаете остаться совсем без возможностей /etc/profile.d/ ?
Одним из полей /etc/passwd является используемый пользователем shell, меняется прямо в файле либо при помощи chsh.
csh/tcsh при старте в качестве регистрирующей оболочки (login shell) выполняют /etc/csh.login, а там:

Код: Выделить всё

        foreach file ( /etc/profile.d/*.csh )
                [ -x $file ]
                if ($status == 0) then
                        source $file
                endif
        end

sh/ksh/ash/bash при старте в качестве регистрирующей оболочки выполняют /etc/profile, а там:

Код: Выделить всё

# Append any additional sh scripts found in /etc/profile.d/:
for profile_script in /etc/profile.d/*.sh ; do
  if [ -x $profile_script ]; then
    . $profile_script
  fi
done
Спасибо сказали:
Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)
Контактная информация:

Re: Скрипты в Slackware

Сообщение sunny1983 »

Понятно, как то не подумал что кто-то может использовать командный интерпритатор отличный от bash.
Ещё вопрос об инициализационных скриптах. Их самому писать надо? Вот установил пакет gpm. В /etc/rc.d/rc.M есть строки:

Код: Выделить всё

# Start the GPM mouse server:
if [ -x /etc/rc.d/rc.gpm ]; then
  . /etc/rc.d/rc.gpm start
fi

Однако сам скрипт /etc/rc.d/rc.gpm отсутствует.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Скрипты в Slackware

Сообщение drBatty »

sunny1983 писал(а):
01.03.2014 01:29
Однако сам скрипт /etc/rc.d/rc.gpm отсутствует.

да что вы говорите?

Код: Выделить всё

$ cat /etc/rc.d/rc.gpm-sample
#!/bin/sh
# Start/stop/restart the GPM mouse server:

if [ "$1" = "stop" ]; then
  echo "Stopping gpm..."
  /usr/sbin/gpm -k
elif [ "$1" = "restart" ]; then
  echo "Restarting gpm..."
  /usr/sbin/gpm -k
  sleep 1
  /usr/sbin/gpm -m /dev/mouse -t imps2
else # assume $1 = start:
  echo "Starting gpm:  /usr/sbin/gpm -m /dev/mouse -t imps2"
  /usr/sbin/gpm -m /dev/mouse -t imps2
fi

# There is another way to run GPM, where it acts as a repeater outputting a
# virtual MouseSystems mouse on /dev/gpmdata.  This is useful for feeding
# gpm's data to X, especially if you've got a busmouse (in that situation X
# and gpm may not coexist without using a repeater).  To try running a GPM
# repeater for X, change the gpm command line to look like this:
# /usr/sbin/gpm -R msc -m /dev/mouse -t imps2
# Then, make sure that the mouse configuration in your XF86Config file refers
# to the repeater device (/dev/gpmdata) and a MouseSystems mouse type.  If you
# edit the file directly, you'll want the lines to look like this (minus the
# comment marks '#' shown here, of course):
#Section "Pointer"
#    Protocol    "MouseSystems"
#    Device      "/dev/gpmdata"
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)
Контактная информация:

Re: Скрипты в Slackware

Сообщение sunny1983 »

Ну нету у меня rc.gpm-sample
И в составе пакета нету.
http://packages.slackware.com/?r=slackware..._64-2.txz&f
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: Скрипты в Slackware

Сообщение bormant »

А вот тут есть повод вспомнить устройство пакетов Slackware. В состав пакета могут входить установочный и настроечные сценарии. Установочный (install/doinst.sh) исполняется сразу после установки пакета. Настроечные сценарии (var/log/setup/setup.*) выполняет setup по завершении установки на этапе конфигурирования системы (CONFIGURE).
Если бы gpm устанавливался при установке системы, вопросы о настройке gpm были бы заданы установщиком setup (точнее, setup запустил бы настроечный сценарий пакета gpm).
Slackware предоставляет также штатный способ выполнения указанных выше настроечных сценариев и в уже установленной системе из нее самой при помощи утилиты pkgtool, пункт меню Setup.

Для полноты картины по сценарной составляющей пакетов Slackware нужно упомянуть однократные настроечные сценарии: var/log/setup/setup.*onlyonce*

Таким образом, чтобы настроить gpm при помощи штатных средств Slackware, запустите pkgtool от root-а, выберите Setup, выберите среди сценариев сценарий настройки gpm -- setup.mouse, ответьте на полученные вопросы про необходимость настройки мыши в консоли и ее особенности. В результате будет сформирован /etc/rc.d/rc.gpm.

Можно позвать сценарий настройки напрямую, звать его mouseconfig, по аналогии с другими Slackware-вскими *config.

Но также никто не запрещает выполнить настройку руками.
Спасибо сказали:
Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)
Контактная информация:

Re: Скрипты в Slackware

Сообщение sunny1983 »

bormant, спасибо большое, очень объяснили. У меня такой же вопрос по пакету kbd был.
То есть если пакет ставится через pkgtool - то настроечный сценарий выполняется, а если через slackpkg - то не выполняется?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Скрипты в Slackware

Сообщение drBatty »

sunny1983 писал(а):
01.03.2014 10:27
У меня такой же вопрос по пакету kbd был.
То есть если пакет ставится через pkgtool - то настроечный сценарий выполняется, а если через slackpkg - то не выполняется?

всё там выполняется. См. /var/log/scripts/kbd-1.* (тут пишется история о том, что выполнилось. Не нужно это запускать бездумно).
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)
Контактная информация:

Re: Скрипты в Slackware

Сообщение sunny1983 »

Нашёл причину. У меня сценарии не выполнялись, потому что не был установлен пакет dialog
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: Скрипты в Slackware

Сообщение bormant »

sunny1983 писал(а):
01.03.2014 10:27
если пакет ставится через pkgtool - то настроечный сценарий выполняется, а если через slackpkg - то не выполняется?
Нет, установка пакетов при помощи pkgtool настроечные сценарии не вызывает.
pkgtool всего лишь позвляет выполнить настроечные сценарии установленных пакетов, которые лежат в /var/log/setup/.
shot_pkgtool_setup.png
shot_pkgtool.png


Настроечные сценарии выполняет setup на шаге CONFIGURE. Одним из официальных способов переконфигурирования системы является загрузка установщика, вызов setup, выполнение шагов TARGET и CONFIGURE. Другими -- pkgtool --> Setup, непосредственный вызов сценариев-конфигураторов или правка файлов вручную.

drBatty
речь не про установочные (основные) сценарии пакета (install/doinst.sh, которые действительно попадают в /var/log/scripts/имя-пакета-версия-архитектура-сборка_и_метка) и исполняются при установке пакета безусловно.
Речь про настроечные сценарии пакета, которые находятся в var/log/setup/ и имеют имя setup.* не содержащее или содержащее onlyonce (в последнем случае сценарий иполняется только однократно). Весь этот набор исполняет setup на завершающем шаге CONFIGURE.
Спасибо сказали:
Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)
Контактная информация:

Re: Скрипты в Slackware

Сообщение sunny1983 »

Большое спасибо.

У меня ещё вопросы, раз уж есть тема по скриптам?

Первый: какой пакет нужно установить/какой сценарий запустить, чтобы появился скрипт /etc/rc.d/rc.firewall?

Второй: есть одна небольшая неприятность, связанная с работой в WiFi. ESSID у меня прописан в /etc/rc.d.rc.iniet1.conf, парольная фраза в /etc/wpa_supplicant.conf. Всё работает. Но если всего лишь на секунду приостановится вещание ESSID - сеть пропадёт до тех пор пока я не перезапущу inet1. Можно ли как-нибудь сделать (скрипт переписать например), чтобы через равные промежутки времени велась бы проверка точки доступа на доступность и если она не доступна - сеть бы перезапускалась?
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: Скрипты в Slackware

Сообщение bormant »

По п.1:
rc.firewall целиком отдается на откуп админу.
Но есть такая штука, если лень писать целиком с нуля: Easy Firewall Generator, на офсайте или у Alien BOB-а -- http://www.slackware.com/~alien/efg/

По п.2:
можно накостылить что-то вроде

Код: Выделить всё

#!/bin/bash
TST_HOST=ya.ru
while :; do
    sleep 30s
    if ! ping -c2 $TST_HOST 1>/dev/null 2>/dev/null; then
        /etc/rc.d/rc.inet1 wlan0_restart
    fi
done
и стартовать из rc.local через nohup асинхронно.
Поскольку установление беспроводного соединения процесс сам по себе небыстрый, возможно придется добавить флаг для исключения повторного запуска в течение таймаута. Насчет критерия пропадания беспроводной сети вместо ping-а тоже можно что-то подумать.

Или используя networkmanager, передергивать из интерфейса.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Скрипты в Slackware

Сообщение drBatty »

sunny1983 писал(а):
01.03.2014 15:39
чтобы через равные промежутки времени велась бы проверка точки доступа на доступность и если она не доступна - сеть бы перезапускалась?

я бы предложил в crond, например файл /usr/local/sbin/restart.sh

Код: Выделить всё

#!/bin/sh

# адрес, который надо проверять
IP="192.168.1.1"

if /bin/ping -c1 $IP; then
  # сеть работает
  :
else
  # сеть упала
  /etc/rc.d/rc.inet1 stop
  sleep 2
  /etc/rc.d/rc.inet1 start
fi

потом от рута crontab -e
и вписать строку

Код: Выделить всё

* * * * * /usr/local/sbin/restart.sh >>/var/log/restart.log 2>&1

если всё работает хорошо, то /var/log/restart.log можно сменить на /dev/null, для экономии места. Хотя я не меняю(можно ввести в logrotate)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Ответить