Домашний linux сервер своими руками
Из софта на домашнем сервере будет «крутиться» следующий набор:
torrent клиент с web-мордой
DHCP — раздаем ip адреса и сетевые настройки
TFTP — для сетевой загрузки
OpenVPN — для хождения в сеть с нетбука из недоверенных сетей
FTP/Samba/NFS — сетевые шары для доступа с домашних машин
Radius — для WPA2 авторизации
DigiTemp — мониторинг домашней температуры
Аппаратная часть
При выборе аппаратной части, вариантов было несколько:
старенький комп
самосбор на базе mini-ITX
тонкий клиент HP T5000
тонкий клиент на базе Neoware CA2
Первый вариант собрать компьютер был сразу же отброшен из-за шума, пыли и энергопотребления. Второй был заказан, пока шли комплектующие, я успел передумать (захотелось шум и энергопотребление свести до минимума). В итоге, на Ebay были куплены тонкие клиенты HP t5000 и Neoware CA2. Месяц спустя пришли тонкие клиенты и из двух, после долгих размышлений, был выбран Neoware CA2. В него идеально поместился 2.5' HDD и вторая сетевая карта.
После допиливания, в буквальном смысле, Neoware CA2 я принялся ставить на него Ubuntu 9.10 с офисного TFTP сервера. Установку производил самую минимальную. Если бы не было набора для сетевой установки, ставил бы Debian с USB CD-ROM и netinstall диска. Сам я ярый фанат RHEL/CentOS, но на домашний сервер решил ставить что-то из debian семейства, для расширения кругозора.
Софт
Torrent клиент и вебморда
Теперь перейдем к установке torrent клиента и вебморды. Была выбрана связка rtorrent + rutorrent, установка из репозитариев была отметена сразу, т.к. «родной» пакет был собран без xmlrpc-c который расширяет функционал rutorrent. Ниже фактически, скрипт для авто-установки rtorrent+rutorrent+lighttpd+php.
Устанавливаем всё что необходимо для компиляции xmlrpc-c, libtorrent, rtorrent
apt-get install checkinstall subversion build-essential make autoconf autotools-dev automake libtool libcurl4-openssl-dev libsigc++-2.0-dev pkg-config libncurses5-dev<br /> apt-get remove rtorrent libtorrent11 libxmlrpc-c3 libxmlrpc-c3-dev libxmlrpc-core-c3 libxmlrpc-core-c3-dev
Компилируем и «заворачиваем» в .deb пакет xmlrpc-c, libtorrent, rtorrent
svn co xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/advanced xmlrpc-c<br /> cd xmlrpc-c<br /> ./configure --prefix=/usr && make && checkinstall -D</p> <p>cd ..<br /> wget libtorrent.rakshasa.no/downloads/libtorrent-0.12.6.tar.gz<br /> tar zxfv libtorrent-0.12.6.tar.gz<br /> cd libtorrent-0.12.6<br /> rm -f scripts/{libtool,lt*}.m4 # для Debian<br /> ./autogen.sh && ./configure --prefix=/usr && make && checkinstall -D</p> <p>cd ..<br /> wget libtorrent.rakshasa.no/downloads/rtorrent-0.8.6.tar.gz<br /> tar zxfv rtorrent-0.8.6.tar.gz<br /> cd rtorrent-0.8.6<br /> rm -f scripts/{libtool,lt*}.m4 # для Debian<br /> ./autogen.sh && ./configure --with-xmlrpc-c --prefix=/usr && make && checkinstall -D
К сожалению, rtorrent не умеет работать в режиме daemon, по этому будем использовать screen
apt-get install screen -y<br /> wget libtorrent.rakshasa.no/raw-attachment/wiki/RTorrentCommonTasks/rtorrentInit.sh --output-document=/etc/init.d/rtorrent<br /> chmod +x /etc/init.d/rtorrent<br /> sed -i 's/"user"/"torrents"/' /etc/init.d/rtorrent<br /> update-rc.d rtorrent defaults<br /> useradd -d /torrents -m torrents
Создаем конфиг и папки для сессий и готовых торрент закачек, после чего стартуем rtorrent.
mkdir /torrents/.rtorrent_session<br /> cat >> /torrents/.rtorrent.rc <<EOF<br /> port_range = 32001-32049<br /> dht = auto<br /> dht_port = 32000<br /> peer_exchange = yes<br /> use_udp_trackers = yes<br /> directory = /torrents/<br /> upload_rate = 10<br /> download_rate = 100<br /> session = /torrents/.rtorrent_session<br /> scgi_port = 127.0.0.1:5000<br /> EOF<br /> chown -R torrents:torrents /torrents<br /> /etc/init.d/rtorrent start
Теперь займемся вебмордой rutorrent. Для работы rutorrent необходим вебсервер и интерпретатор php.
apt-get install lighttpd php5-cgi php5-cli php5-curl curl -y<br /> lighty-enable-mod fastcgi<br /> echo 'server.modules += ( "mod_scgi" )' >> /etc/lighttpd/lighttpd.conf<br /> cat >> /etc/lighttpd/lighttpd.conf <<EOF<br /> scgi.server = (<br /> "/RPC2" =><br /> ( "127.0.0.1" =><br /> (<br /> "host" => "127.0.0.1",<br /> "port" => 5000,<br /> "check-local" => "disable"<br /> )<br /> )<br /> )<br /> EOF<br /> /etc/init.d/lighttpd force-reload
Вебсервер готов, теперь будем ставить rutorrent и несколько полезных плагинов к нему.
cd /var/www/<br /> svn checkout rutorrent.googlecode.com/svn/trunk/rutorrent<br /> cd /var/www/rutorrent/plugins/<br /> svn checkout rutorrent.googlecode.com/svn/trunk/plugins/tracklabels<br /> svn checkout rutorrent.googlecode.com/svn/trunk/plugins/cookies<br /> svn checkout rutorrent.googlecode.com/svn/trunk/plugins/autotools<br /> svn checkout rutorrent.googlecode.com/svn/trunk/plugins/erasedata<br /> chown -R www-data:www-data /var/www/
Теперь можно заходить по server_ip/rutorrent и начинать пользоваться.
DHCP
Теперь установим DHCP сервер и создадим для него конфиг таким образом чтобы клиенты получали:
router 192.168.1.1
dns сервер 8.8.8.8
сервер времени time.nist.gov
tftp сервер 192.168.1.1
и для примера фиксированная выдача 192.168.1.100 клиенту с MAC-адресом 00:1B:FC:33:F0:25
aptitude install dhcp3-server<br /> cat >> /etc/dhcp3/dhcpd.conf <<EOF<br /> ddns-update-style interim;<br /> not authoritative;</p> <p>option domain-name-servers 8.8.8.8;<br /> option subnet-mask 255.255.255.0;<br /> option ntp-servers 192.43.244.18;</p> <p>option option-150 code 150 = ip-address;<br /> option option-150 192.168.1.1;</p> <p>subnet 192.168.1.0 netmask 255.255.255.0 {<br /> authoritative;<br /> range 192.168.1.110 192.168.1.254;<br /> option routers 192.168.1.1;<br /> allow unknown-clients;<br /> allow booting;<br /> allow bootp;<br /> next-server 192.168.1.1;<br /> filename "pxelinux.0";</p> <p>host shakirov-home {<br /> option host-name "shakirov-home";<br /> hardware ethernet 00:1B:FC:33:F0:25;<br /> fixed-address 192.168.1.100; }<br /> }<br /> EOF<br /> /etc/init.d/dhcp3-server restart
строчки с option-150 нужны для моего VoIP телефона Cisco 7940.
TFTP и сетевая установка
aptitude install xinetd atftpd atftp</p> <p>mkdir /tftpboot</p> <p>cat >> /etc/xinetd.d/tftp <<EOF<br /> service tftp<br /> {<br /> disable = no<br /> socket_type = dgram<br /> protocol = udp<br /> wait = yes<br /> user = root<br /> server = /usr/sbin/in.tftpd<br /> server_args = --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /tftpboot</p> <p>per_source = 11<br /> cps = 100 2<br /> flags = IPv4<br /> }<br /> EOF
/etc/init.d/xinetd restart
Теперь проверим, работает ли tftp сервер
root@dvr:~# echo bla > /tftpboot/123<br /> root@dvr:~# atftp 127.0.0.1<br /> tftp> get 123<br /> tftp><br /> root@dvr:~# cat 123<br /> bla
Всё нормально, теперь создадим netinstall наборы для нескольких ОС: Ubuntu karmic, Ubuntu lucid, Debian lenny, Debian sid, Debian squeeze, Fedora 13, CentOS 5.5, Mandriva 2010.0, Suse 11.2, Slackware 13.1, Hardware Detection Tool, memtest и MHDD. Для этого предлагаю использовать слегка модифицированный скрипт который я взял с HowtoForge.
apt-get install lftp -y
wget itblog.su/tftpboot_installs.sh<br /> bash tftpboot_installs.sh
Теперь добавим SystemRescueCd в PXE меню
wget "http://downloads.sourceforge.net/project/systemrescuecd/sysresccd-x86/1.6.3/systemrescuecd-x86-1.6.3.iso?use_mirror=citylan"<br /> mount -o loop systemrescuecd-x86-1.6.1.iso /mnt/<br /> cp /mnt/sysrcd.* /var/www/<br /> cp /mnt/isolinux/initram.igz /tftpboot/<br /> cp /mnt/isolinux/rescuecd /tftpboot/
cat >> /tftpboot/pxelinux.cfg/default <<EOF<br /> label linux<br /> menu label SystemRescue-CD x86-1.6.1<br /> kernel rescuecd<br /> append initrd=initram.igz showopts vga=normal video=ofonly setkmap=us rootpass=123321 netboot=http://192.168.1.1/sysrcd.dat #eth0=192.168.1.213/24<br /> EOF
Без особого труда в это меню можно добавить продукты Acronis, инсталляцию и запуск Windows XP и прочее.
Вот так будет выглядеть наше меню:
Продолжение в следующей части. А именно:
OpenVPN сервер для «хождения» в сеть из не доверенных сетей (например из гостиницы)
FTP/Samba/NFS сетевые шары
Radius для авторизации wi-fi клиентов
DigiTemp зачатки умного дома, мониторинг температуры в квартире и за окном
festival — говорящий будильник
бакапы с хостинга
и подытожит статью скрипт который всё это установит в «два клика».
Разное Дизайнер (designer)