25 нояб. 2015 г.

Как я ставил Windows без DVD/CD, флешки и сети

Возникла тут задача установить Windows на компьютер без DVD/CD.

Первая мысль была установить с флешки. День колдовал с флешкой, ничерта не грузится. Даже Ubuntu пробовал. Загружается. А Windows установочный никак. Кстати, позже проверил флешку на другом ПК, там всё загрузилось.

Вторая мысль - загрузиться по сети и установить. наличие настроенного сервера делало эту задачу, вроде бы, легко выполнимой. Но нет. Облегчённая версия Windows успешно грузилась по сети и в тот момент когда можно было бы подключать сетевой диск с дистрибутивом сетевая карта неожиданно умирала. Точнее пропадал линк и Windows PE уходила в вечное ожидание сети.

И тут в голову неожиданно пришла идея поставить систему в виртуальной машине... БРЕД? Нет. Всё сработало!.

Что нам необходимо для установки:

  1. VirtualBox
  2. Образ системы на диске или в файле ISO (ну или любой другой формат, которые съест VirtualBox).
  3. Контейнер для HDD или, на крайний случай, место в системнике для подключения второго винта на который будет ставиться система.

Приступаем к установке.

Для начала выясним как обзывается мой второй HDD. На Linux сделать это проще простого. Подключаю внешний диск и смотрю что появилось в /dev - у меня это /dev/sdb. Отлично. Создаю в удобном месте файл sdb.vmdk

VBoxManage internalcommands createrawvmdk -filename sdb.vmdk -rawdisk /dev/sdb

Виртуальный образ, а точнее ссылка на реальный HDD, для VirtualBox создан. Остаётся создать новую машинку, использовать в качестве HDD созданный образ и подключить желаемый ISO-образ с дистрибутивом в качестве CD/DVD. Не забываем о правах доступа к /dev/sdb*. Или даём при подклчении права 666 на все разделы, или вступаем в группу disk (или как группа называется в вашем дистрибутиве Linux).

Начинаем установку Windws. Ждём пока установка дойдёт до первой перезагрузки. Выключаем нашу виртуальную машину, достаём HDD из контейнера и ставим в наш ПК. Включаем ПК и наблюдаем продолжение установки уже на реальной машине. Всё. Система установлена.

3 сент. 2015 г.

Настройка ssl на сервере nginx

Каждый год приходится обновлять сертификат для сайтов, работающих через https. Решил описать весь процесс настройки. В качестве домена для демонстрации используется www.example.com.

Подробнее о настройке ssl можно узнать в официальной документации nginx.

На сайте StartSSL создаём сертификат «Web Server SSL/TLS Certificate».

Первым получаем секретный ключ *.key. Сохраняем его в файл www.example.com.key. Данный ключ защищён паролем. Можно поступить двумя способами:

  1. создать файл с паролями от секретных ключей (каждый пароль указан на отдельной строке) и указать путь к нему в директиве ssl_password_file;
  2. расшифровывать ключ командой openssl rsa -in www.example.com.key -out www.example.com.nopass.key.

Первый необходимый нам файл получен. Его нужно скормить директиве ssl_certificate_key в конфигурации nginx.

Далее получаем сертификат в формате PEM. Сохраняем его в файл www.example.com.crt. Обязательно проверяем, что в файле есть пустая строка в конце. Далее склеиваем с промежуточным сертификатом sub.class1.server.ca.pem ссылку на который вы можете найти на странице получения сертификата или через меню сайта StartSSL.:

cat www.example.com.crt sub.class1.server.ca.pem > www.example.com.pem

Файл www.example.com.pem скармливаем директиве ssl_certificate. Сертификат действителен на указанный вами домен третьего уровня, так и второго example.com. Добавить в сертификат дополнительные поддомены на бесплатном аккаунте startssl.com нельзя. Если на одном IP адресе требуется создать несколько SSL-сайтов можно воспользоваться SNI (Server Name Indication) — технология установки нескольких SSL сертификатов на один IP Поддержка SNI есть во всех современных браузерах. Проверить включена ли данная технология в вашем nginx можно командой nginx -V:

# nginx -V
nginx version: nginx/1.10.0
built with OpenSSL 1.0.2h  3 May 2016
TLS SNI support enabled
...

В выводе должно быть отображено сообщение «TLS SNI support enabled».

Настроим параметры SSL.

    ssl_session_timeout 10m;              # Увеличим время жизни сессий, по умолчанию 5 минут
    ssl_session_cache shared:SSL:10m;     # Размер разделяемого процесссами кэша
#    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Версия 1.9.1 и более поздних это значение по умолчанию, можно не указывать
#    ssl_ciphers "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:
#                 EECDH+aRSA+SHA256:EECDH:EDH+aRSA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4";
#    ssl_prefer_server_ciphers on;        # Установить более высокий приоритет серверным шифрам, чем клиентским
    ssl_password_file ssl/ssl.passwd;     # Файл с паролями от ключей (по одному на строку)   

При таком значении ssl_protocols отключены некоторые небезопасные протоколы (начиная с nginx 1.9.1 это значение по умолчанию), однако могут возникнуть проблемы с доступом для пользователей Internet Explorer под Windows XP.

Параметр ssl_ciphers здесь разбит на 2 строки для удобочитаемости. Описывает разрешённые шифры. Шифры задаются в формате, поддерживаемом библиотекой OpenSSL. В данном случае значение параметра я просто скопировал с сайта http://айри.рф/. За подробностями можете перейти по ссылке.

Если мы хотим распространить параметры настройки для всех сайтов, то данный код необходимо поместить в секцию http файла конфигурации.

Создаём виртуальный HTTPS-сервер и включаем SSL. Полученные на первом этапе файлы www.example.com.pem и www.example.com.key размещаем в папке ssl в папке настроек nginx (или любом другом месте по вкусу).

server {
    listen 443 ssl http2;
    ssl_certificate ssl/www.example.com.pem;     # Сертификат данного виртуального сервера и промежуточный сертификат StartSSL
    ssl_certificate_key ssl/www.example.com.key; # Секретный ключ

    # Другие настройки вашего сайта
}

Указывать ssl on не обязательно, и.к. это развнозначно использованию ssl в параметре listen.

Начиная с версии nginx 1.9 имеется поддержка протокола HTTP/2. В данной конфигурации мы активируем этот протокол. Для старых версий nginx можно использовать spdy.

При необходимости можно перенести некоторые настройки ssl из секции http в секцию server.

Для безопасности для папки ssl/ желательно установить права 700 и отдать её root. Все содержащиеся в них ключи, сертификаты и файл с паролями также отдать root и установить права доступа 600.

На этом настройку можно считать законченной. Можете убедиться, что ваш сайт https://www.example.com/ доступен и браузер принимает сертификат.

15 дек. 2014 г.

Памятка по установке GRUB2 и загрузке через EFI в Gentoo x64.

ПРЕДУПРЕЖДЕНИЕ! Всё, что вы делаете со своим компьютером вы делаете на свой страх и риск. Эта заметка создавалась с целью сохранения накопленного опыта для себя. Возможно, в будущем, я ещё раз проверю все действия и внесу в текст уточнения.

Уж очень много времени убил на поиск рабочего варианта. Итак!

Во-первых, при разметке диска нужно создать раздел с файловой системой FAT. На нём и будут располагаться ядро системы или Grub 2. Этот раздел нужно подключить в /boot/EFI. Хотя я в своё время сделал весь раздел /boot в FAT32. Далее рассматривается именно этот вариант.

Что нам понадобится:

  • sys-boot/grub — непосредственно GRUB2. Не забываем включить efi-64 в GRUB_PLATFORMS в файле /etc/portage/make.conf.
  • sys-boot/os-prober — нужен если мы ходим, чтобы GRUB2 находил что-то ещё, кроме ядер Linux, например, загрузчик Windows.
  • sys-boot/efibootmgr — утилита для настройки EFI.

После сборки нужных пакетов устанавливаем GRUB2:

grub2-install --target=x86_64-efi --efi-directory=/boot

Не забываем положить нужные ядра в /boot. После этого можно сгенерировать конфиг для grub2:

grub2-mkconfig -o /boot/grub/grub.cfg

Проверим, всё ли в порядке c EFI:

# efibootmgr -v
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000,0001
Boot0000* GRUB2 HD(1,800,f3800,927dfa8b-a8da-4a33-ae18-3cbab9449dbb)File(\EFI\gentoo\grubx64.efi)
Boot0001* Windows Boot Manager HD(1,800,96000,b0a33380-d8c1-4402-b7da-7d1214ebfd4c)File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...s................

У меня почему-то после первой установки был указан тот же диск, что и для Windows. В любом случае можно удалить неугодные записи через:

efibootmgr -b XXXX -B

и создать угодную нам. ВНИМАНИЕ! Главное не перестарайтесь и не полудаляйте что-нибудь ценное.

efibootmgr -c -d /dev/sdb -p 1 -L "GRUB2" -l \\EFI\\gentoo\\grubx64.efi

(двойных слешей можно не делать, если взять имя файла в кавычки). Обратите внимание на направление слеша - оно не типичное для *nix систем.

Если лень ждать каждый раз загрузку GRUB и выбирать ядро, можно скопировать нужную версию ядра в любую папку в /boot/EFI и указать путь к ней:

efibootmgr -c -d /dev/sdb -p 1 -L "Gentoo Linux" -l \\EFI\\gentoo\\vmlinuz.efi

В результате получим что-то вроде:

# efibootmgr -v
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000,0002,0001
Boot0000* Grub 2 HD(1,800,f3800,927dfa8b-a8da-4a33-ae18-3cbab9449dbb)File(\EFI\gentoo\grubx64.efi)
Boot0001* Windows Boot Manager HD(1,800,96000,b0a33380-d8c1-4402-b7da-7d1214ebfd4c)File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...s................
Boot0002* Gentoo Linux HD(1,800,f3800,927dfa8b-a8da-4a33-ae18-3cbab9449dbb)File(\EFI\gentoo\vmlinuz.efi)

Проверяем что пути к файлам указаны верно, слеш в нужную сторону (я убил некоторое время пока пытался использовать разделитель "/", потом ещё немного времени, с тем, чтобы правильно прописался "\".

Если что-то сделали не так (кстати, нужно определённым образом сконфигурировать ядро, об этом позже), то просто выбираем в меню загрузки GRUB2 и грузим рабочее ядро. Если грузить ядро напрямую, то загрузка компьютера производится очень быстро!!!

20 февр. 2014 г.

Загружаем загрузчик linux по сети

Надеюсь со временем эта заметка вырастет во что-то больше. Но хотелось бы описать просто то, что раньше не мог понять и собирал по крупицам на русском языке, а потом нашёл немного времени разобраться что и как. Закончилось всё хорошо. Загрузилось красивое меню, куда можно добавлять разные нужные штуковины для загрузки по сети. Грузить пока ничего не будем, может быть позже :) Всё действо происходит под Gentoo, но пользователи иных дистрибутивов (и даже пользователи BSD) могут воспользоваться своими apt-get, aptitude, rpm, pacman, portmaster и т.д. по вкусу. Возможно, пути не всегда будут совпадать, надеюсь вы разберётесь сами.

Первое, что нужно сделать, это настроить свой DHCP-сервер. Обычно я использую net-misc/dhcp, т.е. isc-dhcpd. Всё, что нам нужно, это указать что мы будем грузить по сети и с какого сервера.

filename="pxelinux.0" # Какой мы файл будем загружать с нашего сервера. Можно указать файл где-то глубже в папке.
next-server="192.168.1.1" # Адрес нашего TFTP-сервера.

Добавляем эти строчки в глобальную секцию dhcpd.conf, если хотим предоставить наши услуги всем нашим сетям или в секцию subnet нужной сети. next-server можно не указывать, если ваш TFTP-сервер расположен на том же хосте, что и DHCP.

Как вы уже наверно поняли, нам понадобится ещё и TFTP-сервер. Можно использовать, например, net-ftp/tftp-hpa или net-ftp/atftp. Оба сервера ставятся без проблем, настройки минимальные. Корень TFTP сервера в обоих случаях размещается в /tftproot/. Запускаем наш TFTP-сервер и начнём заниматься его наполнением.

Третий компонент, необходимый для загрузки по сети, как ни странно, загрузчик linux. Его мы можем найти в пакете sys-boot/syslinux. В нём содержится множество разных загрузчиков, в том числе, необходимый нам pxelinux. После установки пакета заглядываем в /usr/share/syslinux и /usr/share/doc/syslinux-{ВЕРСИЯ}. В первой папке мы можем найти все необходимые нам файлы, а во второй можно узнать подробности о настройке загрузчика. Попробуем загрузить красивое меню для выбора того, что нам загружать в дальнейшем. Для этого нам понадобится загрузчик pxelinux.0 и красочное меню vesamenu.c32 (или текстовое меню menu.c32). Скопируем их в корень нашего TFTP-сервера, папку /tftproot/. Расскажем загрузчику что же мы хотим загружать. Для этого создадим в папке с pxelinux.0 папку с именем pxelinux.cfg. Внутри папки размещаются файлы конфигурации для наших клиентов. Можно задать свой индивидуальный файл для каждого клиента, группы и по умолчанию. Порядок поиска файлов конфигурации можно найти в файлах документации /usr/share/doc/syslinux-{ВЕРСИЯ}/pxelinux.txt.bz2 и menu.txt.bz2. Создадим в папке pxelinux.cfg файл default, который будет использоваться всеми клиентами для которых вы не задали конфигурацию.

UI vesamenu.c32 # Указываем какой интерфейс мы будем использовать

MENU TITLE My PXE boot menu # Заголовок меню
PROMPT 0 # Пункт меню, выбираемый по умолчанию (нумерация с 0)
TIMEOUT 50 # Количество секунд до автоматического выбора пункта меню умноженное на 10

LABEL Boot from first HDD # наименование пункта меню
LOCALBOOT 0x80 # загружаемся с первого HDD

Теперь можно попробовать запустить другой ПК или даже виртуальную машину в VirtualBox и вы должны увидеть красивую меню с единственным пунктом загрузки с HDD.

На этом всё. Следите за обновлениями данного поста! Всем удачной загрузки по сети!!!

15 окт. 2013 г.

Установка GRUB2

После недавнего обновления portage в gentoo прилетела обновка для GRUB. Отныне GRUB2 считается стабильным, а значит при апгрейде системы будет установлен. Причин оставаться на GRUB Legacy я не вижу, поэтому решил проапгрейдиться.

Последовательность действий для обновления:

  1. в /etc/portage/make.conf добавляем переменную, указывающую, что наш GRUB собирается для платформы PC:
    GRUB_PLATFORMS="pc"
  2. обновляем grub через emerge;
  3. монтируем папку /boot если она у вас на отдельном разделе;
  4. устанавливаем новую версию grub (вот тут я себе набил шишку):
    grub2-install /dev/sda
    обязательно указываем непосредственно HDD, а не раздел на нём!!! Никаких sda1!!!
  5. Правим файл /etc/defaults/grub где указываем нужные опции (читаем документацию), например, я себе включил дефолтную тему со звёздами;
  6. Создаём файл конфигурации grub, который является ничем иным, как скриптом (кстати, его не рекомендуется изменять непосредственно, а только через правку файла из предыдущего пункта):
    grub2-mkconfig -o /boot/grub/grub.cfg
    В процессе формирования проверяются все имеющиеся в /boot ядра, по умолчанию будет загружаться самое старшее ядро (если вы не правили /etc/default/grub).
На этом всё. Ваша система при следующем запуске должна успешно стартовать. Если кроме Linux у вас на компьютере есть другие операционные системы, то установите sys-boot/os-prober.

11 окт. 2013 г.

Настройка WiFi в Gentoo

На удивление быстро настроился WiFi на Gentoo. Поскольку заметка написана уже после настройки WiFi, то могут быть неточности. Замечания и полезные комментарии приветствуются. Если будет необходимо, заметка будет доработана.

По некоторым соображениям я не люблю NetworkManager, поэтому настройку сети предпочитаю делать через конфигурационные файлы и командную строку.

Что нам понадобится для настройки:

  • поддержка нашего адаптера в ядре;
  • опция в ядре для поддержки iw
    [*] Networking support --->
    -*- Wireless --->
    cfg80211 wireless extensions compatibility
  • пакет net-wireless/iw;
  • пакет net-wireless/wpa_supplicant для подключения к точкам доступа с WPA (по мне так дико настраивать точки доступа иначе).

Будем считать, что ядро вы уже собрали так, как нужно и по ifconfig или ip addr мы получаем в списке адаптеров наш wlan0 или wlp3s0. Установим необходимые пакеты.

Проверим работоспособность нашего WiFi:

iw list
В ответ вы должны получить список доступных точек доступа. Если выдаются ошибки, то дальнейшие действия вам не помогут. Если вы в списке не нашли вашей точки доступа, то проверьте, что она расположена на каналах с 1 по 11. У меня ранее были проблемы при использовании 13 канала!

Настроим сеть с помощью редактирования /etc/conf.d/net

modules_wlp3s0="wpa_supplicant" #Будем использовать WPA.
wpa_supplicant_wlp3s0="-Dnl80211" #Загрузим соответствующий модуль.
config_wlp3s0="dhcp" #Адрес будем получать автоматически.
Если желаете, то можете вместо dhcpd использовать статический IP адрес и другие опции, которые можно найти в документации Gentoo по настройке сети.

Создадим конфигурацию для подключения к нашей точке доступа. Для этого создадим или отредактируем файл /etc/wpa_supplicant/wpa_supplicant.conf:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
update_config=1

###### собственно конфигурация ######
network={
 priority=1
 ssid="port66"
 mode=0
 key_mgmt=WPA-PSK
 psk="WPA_PASSWORD"
}
WPA_PASSWORD - это ничто иное, как пароль к точке доступа. Секций network может быть несколько - по одной для каждой точки доступа.

Собственно теперь, после перезапуска системы вы можете получить доступ к беспроводной сети.

Множество полезной информации по настройке WiFi можно найти на сайте http://wireless.kernel.org/.

Решение проблем

Столкнулся с проблемой настройки WiFi на ноутбуке Compaq C6510b. Во-первых, WiFi упорно не хотел включаться кнопкой, только выключался. Решить эту проблему помогли пара опций в ядре: CONFIG_ACPI_WMI и CONFIG_HP_WMI. Вместо второй вам возможно потребуется другая опция. Для этого поищите я опциях ядра WMI и найдите нужную опцию конкретно для вашей беспроводной сетевой платы.

Второй проблемой была жёсткая блокировка WiFi. rfkill list упорно выдавал Hard blocked: yes. По идее этой блокировкой управляет кнопка включения/выключения WiFi. Но не смотря ни на что, блокировка была. Решить эту проблему оказалось не просто, а очень просто: достаточно выдернуть кабель из порта Ethernet. Блокировка снята! Если же вам всё-таки нужно использовать одновременно WiFi и Ethernet, то нужно зайти в BIOS Setup и отключить опцию переключения LAN/WLAN. Что характерно, при включении этого переключателя, при блокировке WiFi индикатор не гаснет, что и сбивает с толку. Просто этот индикатор на данном ноутбуке сдвоенный и отображает активность обоих беспроводных интерфейсов: WiFi и Bluetooth.

10 сент. 2012 г.

Переходим на subversion для обновления FreeBSD

Всё никак не мог собраться перейти на subversion. Однако уже было анонсировано, что 28 февраля 2013 года поддержка cvs будет прекращена. Как оказалось, задействовать subversion не просто, а очень просто. Для начала понадобится subversion. Взять его можно в портах: devel/subversion. Если у вас очень старая версия портов, то devel/subversion-freebsd.

Перед переходом желательно очистить содержимое /usr/src и /usr/ports (за исключением distfiles, но если вам не жалко трафика, то можете удалить и его). Клонирование дерева портов осуществляем командой:

svn co svn://svn.FreeBSD.org/ports/head /usr/ports

Для скачивания исходных кодов мира и ядра нужно выполнить:

svn co svn://svn.freebsd.org/base/releng/9.1/ /usr/src

В данном случае скачивается ветка релиза 9.1 (releng/9.1/). Узнать какие существуют актуальные на данный момент ветки можно на официальном сайте FreeBSD. Например, на момент написания заметки имеются ветки stable/9 и releng/9.0. Все существующие ветки можно просмотреть через веб-интерфейс для svn по адресу: http://svnweb.freebsd.org.

Если у вас возникают затруднения, например, при использовании прокси-сервера, то вы можете заменить протокол svn на http или https: https://svn.freebsd.org/base/releng/9.1/.

Скачивание производится с основного сервера. Адреса других зеркал можно найти на в хендбуке.

Дальнейшее обновление исходных кодов и портов можно осуществлять командой svn update, предварительно перейдя в папку /usr/src или /usr/ports, соответственно.

Если вы желаете перейти на более свежую ветку, то достаточно переключить репозиторий командой:

svn switch svn://svn.freebsd.org/base/releng/9.2/ /usr/src