вторник, 9 сентября 2014 г.

Centos 7 и RPMforge

Понадобилось поставить fail2ban в CentOS 7 - и облом, в стандартной поставке его нет.
Выход - установка RPMforge.

1. sudo rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt

2. sudo yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm

среда, 20 августа 2014 г.

Потерялся CCID

Обрезали симку, пластиковая штучка от симкарты потерялась, а нужен CCID-номер от сим-карты?
Не беда! Достаточно иметь модем Huawei (проверено на E173).
В терминале (к примеру - putty) подключаемся к COM-порту модема, и командой AT^ICCID? получаем в ответ строку типа
980791190375666517F6
Разбиваем эту строку по 2 символа:

| 98 | 07 | 91 | 19 | 03 | 75 | 66 | 65 | 17 | F6

отбрасываем последние два - в моем случае "F6", и меняем местами цифры, получаем

| 89 | 70 | 19 | 91 | 30 | 57 | 66 | 56 | 71 |

и в итоге получаем CCID:

897019913057665671

среда, 23 июля 2014 г.

Убираем проблему с (END) в vtysh

Для исправления проблемы с (END) в vtysh, нужны два действия:
1. Добавьте строку "export VTYSH_PAGER=more" в файл /etc/bash.bashrc
2. Добавьте строку "VTYSH_PAGER=more" в файл /etc/environment

echo "export VTYSH_PAGER=more" >> /etc/bash.bashrc
echo "VTYSH_PAGER=more" >> /etc/environment

пятница, 27 июня 2014 г.

Переносим LINUX-систему на gpt с raid и lvm

Для начала создаем разметку диска в gpt вместо устаревшей msdos
parted /dev/sda
mklabel gpt
yes
mkpart grub ext2 1 2
set 1 bios_grub on
mkpart for_raid ext2 2 100%
set 2 raid on

то же самое на втором диске
parted /dev/sdb
mklabel gpt
yes
mkpart grub ext2 1 2
set 1 bios_grub on
mkpart for_raid ext2 2 100%
set 2 raid on

Создаем Raid
В загрузке участвует только системный зеркальный раид - его и создадим.
mdadm -C /dev/md0 --level 1 -n 2 /dev/sd[ab]2

Создаем LVM
pvcreate /dev/md0
vgcreate raid1 /dev/md0
lvcreate -L 32G -n system raid1
lvcreate -L 4G -n swap raid1
Смотрим:
lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
swap raid1 -wi-a- 4,00g
system raid1 -wi-a- 32,00g

Создаем файловые системы
mkfs.ext4 /dev/raid1/system
mkswap /dev/raid1/swap

Перенсим систему на RAID
mkdir /tmp/new
mount /dev/raid1/system /tmp/new
rsync -aulv -x / /tmp/new/

Меняем /tmp/new/etc/fstab
# / was on /dev/sda1 during installation
/dev/mapper/raid1-system / ext4 errors=remount-ro 0 1
# swap was on /dev/sda5 during installation
/dev/mapper/raid1-swap none swap sw 0 0

Подключаем новую систему в chroot
mount --bind /dev/ /tmp/new/dev/
mount --bind /sys/ /tmp/new/sys/
mount --bind /proc/ /tmp/new/proc/
chroot /tmp/new

Редактируем /etc/default/grub
GRUB_PRELOAD_MODULES="part_gpt mdraid lvm ext2"

update-initramfs -u

grub-mkdevicemap

update-grub

grub-install /dev/sda
grub-install /dev/sdb

grub2-on-lvm-on-raid-on-gpt

http://bb.comp-house.ru/comp-house.repo/wiki/grub2-on-lvm-on-raid-on-gpt

Wiki

Clone wiki
comp-house.repo / grub2-on-lvm-on-raid-on-gpt View History
1.Разметка диска с помощью parted
2.Создаем Raid
3. Создаем LVM
4. Ставим систему
5. Ставим grub
1.Разметка диска с помощью parted
Для начала создаем разметку диска в gpt вместо устаревшей msdos
parted /dev/sda
mklabel gpt
В пазметке gpt нет места для размещения загрузчика, поэтому необходимо явно создать раздел под него. Для определенности, так и назовем его - "grub". Места под загрузчик надо немного, так что 1 дорожки будет достаточно. Чтобы grub2 смог найти свой раздел, необходимо поднять на нем флаг "bios_grub":
mkpart grub ext2 1 2
set 1 bios_grub on
Затем можно размечать диск под данные и систему. В данном случае есть винчестера, и мои задачи требуют, чтобы я использовал два раида - надежное зеркало под систему и быстрый стрип для обработки рабочих данных.
mkpart system ext2 2 200G
set 2 raid on
mkpart tmp ext2 200G -1
set 3 raid on
И второй винчестер /dev/sdb с аналогичной разметкой, чтобы винчестеры были полностью взаимозаменяемы и проще было разбираться с разметкой раидов в случае поломок:
parted /dev/sdb
mklabel gpt
mkpart grub ext2 1 2
set 1 bios_grub on
mkpart system ext2 2 200G
set 2 raid on
mkpart tmp ext2 200G -1
set 3 raid on
В итоге диски в глазах parted выглядят следующим образом:
[root@localhost ~]# parted /dev/sda print
Модель: ATA ST3250820AS (scsi)
Диск /dev/sda: 250GB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: gpt

Номер Начало Конец Размер Файловая система Имя Флаги
1 1049kB 2097kB 1049kB grub bios_grub
2 2097kB 200GB 200GB system raid
3 200GB 250GB 50,1GB tmp raid

[root@localhost ~]# parted /dev/sdb print
Модель: ATA ST3250620AS (scsi)
Диск /dev/sdb: 250GB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: gpt

Номер Начало Конец Размер Файловая система Имя Флаги
1 1049kB 2097kB 1049kB grub bios_grub
2 2097kB 200GB 200GB system raid
3 200GB 250GB 50,1GB tmp raid
За что мы любим gpt, в любом случае получается простая плоская таблица, в которой может быть больше 4 разделов и каждый раздел имеет не только номер, но и вменяемое имя, а внутри себя еще и точный UUID. Флаги raid необязательны, но упрощают автоопределение своего содержимого, а флаг bios_grub, как мы уже говорили, нужен pагрузчику grub и он-то как раз обязателен.
2.Создаем Raid
В загрузке участвует только системный зеркальный раид - его и создадим.
mdadm -C /dev/md/system --level 1 -n 2 /dev/sd[ab]2
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/system started.
mdraid предупреждает, что используется новый суперблок версии 1.2. В этой версии суперблок раида расположен в начале диска, что не позволяет прозрачно использовать его для загрузки, как это было раньше, когда загрузчик мог вообще ничего не зная о раиде просто обращаться к любому из дисков напрямую.
Но grub2 умеет явно грузиться с раида, так что все в порядке, говорим "y" и идем дальше.
3. Создаем LVM
[root@localhost ~]# pvcreate /dev/md/system
Physical volume "/dev/md/system" successfully created
[root@localhost ~]#vgcreate system /dev/md/system
Volume group "system" successfully created
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
system 1 0 0 wz--n- 186,26g 186,26g
[root@localhost ~]# lvcreate -L 50G -n root system
Logical volume "root" created
[root@localhost ~]# lvcreate -L 200g -n home system
Insufficient free extents (34882) in volume group system: 51200 required
[root@localhost ~]# lvcreate -l 34882 -n home system
Logical volume "home" created
[root@localhost ~]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
home system -wi-a- 136,26g
root system -wi-a- 50,00g
4. Ставим систему
Лично я в бесконечном стремлении упрстить свою жизнь просто копирую образ файловой системы, который лежит в подходящем исошнике live-cd федоры.
[root@localhost ~]#dd if=/home/avl/network/fw/ext3fs.img of=/dev/system/root
6291456+0 записей считано
6291456+0 записей написано
скопировано 3221225472 байта (3,2 GB), 397,584 c, 8,1 MB/c

[root@localhost ~]# resize2fs /dev/system/root
resize2fs 1.41.10 (10-Feb-2009)
Please run 'e2fsck -f /dev/system/root' first.

[root@localhost ~]# fsck -f /dev/system/root
fsck from util-linux-ng 2.17.2
e2fsck 1.41.10 (10-Feb-2009)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
_Fedora-16-x86_6: 71697/196608 files (0.2% non-contiguous), 502914/786432 blocks

[root@localhost ~]# resize2fs /dev/system/root
resize2fs 1.41.10 (10-Feb-2009)
Resizing the filesystem on /dev/system/root to 13107200 (4k) blocks.
The filesystem on /dev/system/root is now 13107200 blocks long.
5. Ставим grub
Начиная с fedora 16 grub2 уже установлен в системе.
Все, что нужно, это скопировать модули в стандартное место
cp /usr/lib/grub2/i386-pc/* /boot/grub2/
сгенерировать и почистить меню grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
Теперь самое сложное, создать образ загрузчика. Дело в том, что grub2 имеет модульную структуру и поэтому для создания образа нам необходимо подобрать последовательность загрузки модулей, после прохождения которой будет доступен каталог /boot/grub2 .
Логика подбора последовательности проста:
грузим модуль biosdisk, чтобы добраться до дисков.
грузим part_gpt чтобы добраться до разделов gpt на дисках
грузим mdraid1x чтобы добраться до содержимого раидов
грузим lvm чтобы увидеть логические тома
грузим ext2, поскольку /boot вместе с корешком у нас отформатированы в ext4
грузим normal, который грузит и исполняет /boot/grub2/grub.cfg
Все, это минимум, необходимый для доступа груба к своим модулям в /boot/grub2/*.mod и автоматического показа меню сгенереного на лету скриптом /boot/grub2/grub.cfg.
Остальные модули можно грузить уже вручную командой insmod.
На самом деле, проще всего отладить эту последовательность, сделав загрузку по сети. В этом случае в образе будет только один модуль pxe. А затем загрузившись, можно экспериментировать с загрузкой модулей. Очень удобный режим, учитывая тот факт, что модули можно загрузить только один раз и выгрузки их тоже не предусмотрено, так что загрузив даже правильные модули в неверной последовательности, например, сначала lvm, а затем raid, мы не получим ничего, поскольку на момент инициализации модуля lvm партиции с ним будут недоступны.
Короче говоря, создаем образ загрузчика:
grub2-mkimage -O i386-pc --prefix='(system-root)/boot/grub2' --output=/boot/grub2/core.img biosdisk part_gpt mdraid1x lvm ext2 normal configfile linux boot
И устанавливаем его на оба диска, поскольку мы же хотим, чтобы они были взаимозаменяемы?
[root@localhost grub2]# grub2-setup '(hd0)'
[root@localhost grub2]# grub2-setup '(hd1)'
Отображение грубовской нотации дисков (hd0) и (hd1) на реальные диски прописано в файле /boot/grub2/device.map. Этот файл автоматически создается командой grub2-menuconfig.
[root@localhost grub2]# cat /boot/grub2/device.map
(hd0) /dev/disk/by-id/ata-ST3250820AS_9QE0M7AX
(hd1) /dev/disk/by-id/ata-ST3250620AS_3QE0EV4D
Все, можно перезагружаться и смотреть, что там и как там.
Для отладки опять таки очень удобно использовать pxe-загрузку с тем же grub2. Это позволит грузиться в систему вообще не используя загрузчик на жестком диске и тестировать разные конфигурации.
PS
Fedora 17 has rename grub-setup to grub-bios-setup.

среда, 18 июня 2014 г.

Приключения с open-iscsi

Возникла необходимость воспользоваться open-iscsi на рабочем сервере.
В качестве хранилища был взят openmediavault, в качестве клиента - ubuntu 12.04.4.
После установки open-iscsi было обнаружено, что:
1. если хранилище "отваливалось" по какой-либо причине на срок более 30 секунд,
то ubuntu заботливо переводило файловую систему в режим read-only после восстановления коннекта.
2. диски iscsi, прописанные для автомонтирования в fstab - не автомонтировались.

Для решения этих проблем был перерыт гугл, и вот что удалось найти.
Решение проблемы №1 состоит в том, что можно задать таймаут для устройства,
после истечения которого система переводится в read-only.
Текущее значение можно посмотреть через
cat /sys/block/sdX/device/timeout
где sdX - имя вашего подключенного iscsi-диска.
По умолчанию выводит 30 секунд. Но этого мне мало, захотелось чего-то поболее, поэтому в /etc/udev/rules.d/
был создан скрипт 99-iscsi.rules следующего содержания:
#The iscsi device rules.
#This will create an iscsi device for each of the targets.
ACTION=="add", SUBSYSTEMS=="scsi", ATTRS{model}=="VIRTUAL-DISK ", RUN+="/bin/sh -c 'echo 360 >/sys/block/%k/device/timeout'"

Этот скрипт меняет таймаут на 360 секунд (можно сделать и больше)

А вот решение проблемы №2 оказалось в "кривой" инсталляции скриптов автозапуска open-iscsi.
Решилось в две команды:
update-rc.d -f open-iscsi remove
update-rc.d open-iscsi start 20 2 3 4 5 . stop 20 0 1 6 .
После этого при перезапуске клиента все автомонтирования в fstab нормально отрабатывают.