Originally Posted by
kanSki
здесь описывают установку lighttpd, они еще устанавливают php-fcgi и php
Нужно и то, и другое.
Originally Posted by
kanSki
2. А может вебсервер не стартует просто "/opt/etc/init.d/S80lighttpd start "?, для трансмиссион писал в /usr/local/sbin/post-mount: "/opt/etc/init.d/S80busybox_httpd start"
Можно и так. Но по уму нужно писать скрипт, который запускает (и остановливает) все сервисы разом.
Originally Posted by
kanSki
еще создают файл "/opt/etc/init.d/S45php"
Это Вам не нужно.
Вообщем, как я понял, лекцию нужно начинать издалека. Сразу говорю, что
1) все ниженаписанное на форуме уже было, это не мой креатив.
2) я могу пользоваться неверной терминологией и вообще в чем-то ошибаться. Т.к. гуру в линуксе не являюсь.
Для начала немного о файлах запуска системы для данной прошивки.
Лежат они в директории /usr/tmp/local/sbin и бывают такими:
pre-boot - запускается сразу перед загрузкой. Один раз. На этот момент еще много чего нет, но это хорошее место для установки всяких переменных и загрузки модулей.
У меня выглядит так:
Code:
#!/bin/sh
tz="MSK-3MSD,M3.5.0,M10.5.0/3"
nvram set time_zone="$tz"
echo "$tz" > /etc/TZ
Выставляем таймзону.
post-boot - запускается сразу после загрузки. Один раз.
Выглядит так:
Code:
#!/bin/sh
/usr/bin/logger "*** post-boot : started"
dropbear -p 51800 >/dev/null 2>&1
/usr/bin/logger "*** post-boot : finished"
Запускает ssh демон на нестандартном порту 51800. (Разумеется, порт у меня другой, здесь набрал от балды).
pre-mount - запускается перед монтированием разделов.
Выглядит так:
Code:
#!/bin/sh
swapon -a
for i in `/usr/bin/awk '/ext3/{print($1)}' /etc/fstab`
do
/bin/grep -q $i /proc/mounts || /sbin/e2fsck -p $i 2>&1 | /usr/bin/logger -t e2fsck
done
Включает своп, и бегает по /proc/mounts с целью произвести проверку на монтируемых файловых системах. Замечу, чтобы сие работало номально, монтировать разделы нужно не явной командой mount, а через файл /etc/fstab. Последний у меня выглядит таким образом:
Code:
#device Mountpoint FStype Options Dump Pass#
/dev/discs/disc0/part1 none swap sw 0 0
/dev/discs/disc0/part2 /mnt ext3 rw,noatime 1 1
/mnt/opt /opt none bind,rw,noatime 1 1
Т.е. первая партиция диска монтируется как своп, вторая - как ext3 на /mnt. Кроме того, в /opt монтируется директория /mnt/opt для корректной работы ipkg и прочего.
post-mount - запускается после монтирования разделов
Выглядит так:
Code:
#!/bin/sh
/usr/bin/logger "*** post-mount : started"
/opt/etc/init.d/rc.unslung start
/usr/bin/logger "*** post-mount : finished"
Первая и последняя строчки - вывод отладочных сообщений в лог.
Файл же /opt/etc/init.d/rc.unslung содержит следующее:
Code:
#!/bin/sh
# Start/stop all init scripts in /opt/etc/init.d
# starting them in numerical order and
# stopping them in reverse numerical order
#
if [ $# -ne 1 ]; then
printf "Usage: $0 {start|stop}\n" >&2
exit 1
fi
daemons=`echo $(/usr/bin/dirname $0)/S??*`
[ $1 = "stop" ] && daemons=`echo $daemons | /usr/bin/tr " " "\n" | /usr/bin/sort -r`
for i in $daemons; do
# Ignore dangling symlinks (if any).
[ ! -f "$i" ] && continue
case "$i" in
*.sh)
# Source shell script for speed.
(
trap - INT QUIT TSTP
set $1
. $i
)
;;
*)
# No sh extension, so fork subprocess.
$i $1
;;
esac
done
Т.е. он перебирает все файлы вида /opt/etc/init.d/S??* и запускает каждый из них с переданным ему параметром.
Т.е. строчка
/opt/etc/init.d/rc.unslung start
означает - запустить все службы. Замечу, что для корректной работы файлы S??* должны быть оформлены таким образом, чтобы они корректно понимали параметр start (и, желательно stop). Это, как правило, всегда так, но бывают и досадные исключения.
Соответственно, стопорятся службы в файле
pre-shutdown, который запускается перед шатдауном системы.
Code:
#!/bin/sh
/usr/bin/logger "*** pre-shutdown : started"
/opt/etc/init.d/rc.unslung stop
for i in `awk '/ext3/{print($1)}' /proc/mounts`
do
mount -o remount,ro $i
done
swapoff -a
sleep 5s
/usr/bin/logger "*** pre-shutdown : finished"
Последовательно останавливаем службы, перемонтируем все разделы диска в readonly и отключаем своп. Дабы не случалось неприятностей с битьем файлов на диске.
Остался
post-firewall - запускается после внесения изменений в таблицы firewall. Может запускаться несколько раз.
Это хорошее место для добавлений правил к файрволу, например, для открытия портов. Может выглядеть так:
Code:
#!/bin/sh
iptables -I INPUT -p tcp --dport 51800:51801 -j ACCEPT
iptables -I INPUT -p tcp --dport 8081 -j ACCEPT
Открываем три порта. Для ssh - 51800, для rtorrent - 51801 и для http - 8081. Последнее делать так сходу не советую, по уму наружу только https высовывать можно. Да и отладиться можно без этого, из внутренней сети.
Всякие замечания по поводу редактирования этих файлов.
1) Они находятся отнюдь не на жестком диске, посему, чтобы не пропали после перезагрузки, после редактирования необходимо а) выдать команду flashfs save && flashfs commit && flashfs enable б) если файл лежит в /etc, то его нужно внести в файл /usr/tmp/local/.files. У меня его содержимое таково:
Code:
/etc/smb.conf
/etc/passwd
/etc/group
/etc/smbpasswd
/etc/profile
/etc/fstab
/etc/ld.so.conf
2) Файлы post- и pre- (и все прочие выполняемые скрипты) должны иметь атрибут "выполняемый" (т.е. если Вы их создали - нужно не забыть после выдать соотв. команду, в данном случае - chmod a+x /usr/tmp/local/sbin/*)
3) Файлы post- и pre- должны начинаться со строки #!/bin/sh
Это подсказывает системе, какой интерпретатор нужно запустить при их выполнении.
4) Файлы post- и pre- (и все прочие выполняемые скрипты) должны редактироваться средствами linux. Дабы строки отделялись друг от друга символом \n, а не парой \r\n как в dos/windows. Иначе система не найдет строку #!/bin/sh и ничего про интерпретатор не узнает.