вторник, 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 нормально отрабатывают.

среда, 9 октября 2013 г.

Дал тут товарищ ссылку на интересную видяшку.
http://vimeo.com/75781782
Посмотрел я ее - ну видяшка как видяшка, из разряда "что нас ждёт в будущем"
Но в самом её начале стоит цитата Марка Твена.
"For the majority of us, the past is a regret, the future an experiment."
Я как бы не поклонник цитат, но тут стало интересно, а что же сказал человек?
Попытка прямого перевода выдала только частично осмысленную фразу:
"Для большинства из нас, прошлое - это сожаление, а будущее - эксперимент."
Хм, погодите... Какой такой "эксперимент". Человек явно хотел сказать что-то другое.
Но все англо-русские словари упорно мне твердили: experiment - эксперимент.
Тогда я подумал... А в какое время была произнесена эта фраза?
Конец 19-го века, эпоха открытий. А что делали все учёные?
Это теперь мы скажем "ставили эксперименты".
А в 19-м веке они ставили опыты, и проводили испытания... ИСПЫТАНИЯ!
Вот оно, то слово!
И если новоязное "эксперимент" заменить на "испытание", то фраза обретёт смысл.
"Для большинства из нас, прошлое - это сожаление, а будущее - испытание."

Кстати... Раньше макеты ракет испытывали. Макеты двигателей к ракетам - испытывали. Всё - испытывали. Потому и ракеты - летали. А теперь, сука, экспериментируют. Потому факелы и тухнут.

суббота, 28 сентября 2013 г.

Смотрим IP-камеру DLink на iPhone и Android

http://www.pvsm.ru/ios/16350/print/


Захотел как-то директор некой организации Т посмотреть из отпуска, как у него продажники работают в его отсутствие. Так на потолке в кабинете отдела продаж появилась IP-камера с микрофоном. Дальше мне, как технарю, предстояло отдать звук+видео с камеры на яблочный телефон и на планшет от компании, которая возвращает долги целыми грузовиками пятицентовых монет.
Скажу сразу, все жители кабинета знают про камеру с микрофоном.

Первое решение этой задачи было весьма незамысловатым: web-камера и скайп, который сам поднимал трубку при звонке от директора. Решение прожило не долго. То камера “упадёт” глазом вниз, то комп “забудут” включить. И в те редкие счастливые случаи, когда позвонить всё таки удавалось, почему-то все работали.
Директор попросил другое решение задачи, на которое сотрудники не смогут повлият. Предложил wi-fi камеру, отключить которую можно только отключив питание у камеры или точки доступа или всего кабинета. Розетка камеры на потолке, по-быстрому не отключишь. Отключение точки доступа или кабинета чревато неработой всех компьютеров. Решение было поддержано и оплачено. Приступаем.
Выбор камеры как-то сразу ограничился наличием на полках магазина. Это D-Link DCP-2130. Монтаж и настройка камеры просты: монтаж — электрик, камера — ip-адрес и пароль. Камера умеет по http отдать изображение в mjpeg, но без звука. Умеет отдать звук+видео по rtsp (rtsp://ipcamera/video1.sdp)
Почему-то не все плееры дружат с rtsp. VLC оказался молодцом и победил других коллег.
Ярлычок “vlc rtsp://ipcamera/video1.sdp” на рабочий стол директора и просмотр в офисе на десктопе готов.
А вот дальше пришлось достать бубен, ибо хочется посмотреть кино с весёлыми человечками откуда угодно.
Путь первый: пробросить rtsp на шлюзе с внешнего ip на камеру. Fail. И вот почему:
1. rtsp не имеет никакой защиты в виде аутентификации смотрящего и наружу на шару выпустить это кино запрещено. Хотел было переименовать video1.sdp в mohqu3iep8Ohh.sdp, но такое не запомнить, и см п.2
2. Сильно не копал, но успел понять, что rtsp тяжко или совсем нельзя просмотреть на iOS, и далеко не каждый плеер на Android осилит.
И так, проброс порта снаружи на камеру отпал.
Путь второй: html5 или flash. Успех, но не весь.
я не смог найти ни одного flash плеера, который бы поддерживал rtsp. HTML5 video вообще не поддерживает потокового вещания. Но! VLC прекрасно читает имеющийся поток, VLC умеет декодировать видео на лету, VLC умеет отдавать по HTTP, да ещё и с аутентификацией. И у нас есть компьютер-шлюз. Совмещаем шлюз и умения VLC воедино командой на шлюзе
vlc.exe -I dummy rtsp://192.168.0.333:554/live1.sdp --http-reconnect --repeat --rtsp-caching=4600 --loop --sout=#transcode{width=320,vcodec=h264,vb=384,fps=15,venc=x264{aud,profile=baseline,level=30,keyint=30,ref=1},acodec=mp4a,ab=64,channels=1,samplerate=22050,audio-sync}:http{user=camuser,pwd=campass,dst=:8080/st.flv} --no-sout-rtp-sap --no-sout-standard-sap --ttl=1 --sout-keep
где 192.168.0.333 — это IP камеры, а rtsp://192.168.0.333/live1.sdp — это, соответственно, живой поток с камеры.
В итоге получаем, что по http://camuser:campass@gate:8080/st.flv идёт преобразованный видеопоток, уже годный для flash плеера. Кстати, открывается многими плеерами на Android, что не может не радовать.
Открываем порт 8080 на шлюзе и к потоку появляется доступ снаружи, и, как вы уже, возможно, заметили, имеющий хоть какую-то аутентификацию. Теперь flash плееру в качестве источника можно подсунуть наш поток в виде
http://camuser:campass@camera.my-org.ru:8080/st.flv
По совету друзей выбор пал на JW Player. Его простота и работоспособность полностью удовлетворили.
Накидал html страничку с аутентификацией и flash плеером, проверил, работает с компьютеров и с указанного в начале статьи планшета. Теперь директор с компьютера или с планшета заходит на
http://camera.my-org.ru, вводит имяпароль и смотрит, как его орлы работают, а кто на просто чай залетел.
Если тот же поток подсунуть html5 плееру, то ничего не выйдет, html5 никак не хочет понимать потоковое видео. Долгая игра с форматами видео/звука результата не дала. Но хочется смотреть кино ещё и на телефоне от одной фруктовой компании, а как известно, эта самая фруктовая компания ваши флеши на html вертела, поэтому меня ждал
Путь третий: Откусить яблоко и не умереть от счастья. Успех.
Гугление в яндексе долго не давало никаких результатов. Вообще никаких. Я уж начал сомневаться в своих умениях спрашивать у поисковиков. Я точно знал, что раз презентации Apple можно в прямом эфире смотреть на Apple же устройствах без дополнительных танцев, то это возможно. Примерно на третьем наскоке найти решение, я заметил часто повторяющуюся комбинацию слов, а именно HTTP Live Streaming. Я был восхищён решением Apple. Как известно, html5 умеет проигрывать только имеющийся файл. Вот и чудненько, подумали в Apple, и сказали: “а давайте представим, что живой поток — это кусочки по 10 секунд, нужно всего лишь, закончив играть текущий кусочек, сразу начать играть следующий” Супер! Это настолько гениально, насколько просто. Каждый занят своим делом. HTML5 video показывает файлы, он это умеет. Http-server файлы отдаёт и занимается всякой нагрузкой, авторизауией и пр. Он для этого и сделан. Остаётся лишь эти 10секундные кусочки вовремя подсовывать. И решение есть, и вновь VLC победил. VLC, как и остальные члены этой связки, занят исключительно своим делом — кодирует видео. Запускаем
vlc.exe -I dummy --mms-caching 0 rtsp://192.168.0.333:554/live1.sdp vlc://quit --sout="#transcode{width=320,height=180,fps=15,vcodec=h264,vb=384,venc=x264{aud,profile=baseline,level=30,keyint=30,ref=1},acodec=mp3,ab=64,channels=1}:std{access=livehttp{seglen=10,delsegs=true,numsegs=5,index=c:wwwcam01istream.m3u8,index-url=http://camera.my-org.ru/cam01/cam01-########.ts},mux=ts{use-key-frames},dst=c:wwwcam01cam01-########.ts}"
Вот что получаем: VLC складывает в папку c:wwwcam01 файлы cam01-########.ts и постоянно обновляющийся плейлист istream.m3u8, содержащий ссылки на эти файлы. Хранит 5 свежих кусочков видео, старые удаляет.
Собственно этот плейлист и отдаём HTML5 видео плееру на iDevice в качестве источника. Смотрим и наслаждаемся потоковым видео. Вот насколько просто выглядит HTML-файл:
<body>
<center>
<video width=320 height=180 controls="controls" src=/cam01/istream.m3u8 />
</center>
</body></html>
http://www.pvsm.ru/ios/16350
http://www.pvsm.ru/ios/16350
Помним только, что у Apache в .htaccess или конфигах нужно дописать новые типы файлов
AddType application/x-mpegURL m3u8
AddType video/MP2T ts
К сожалению, подсунуть такой плейлист в качестве источника для HTML5 видео можно только iDevice’ам. Жаль, что пропадает такое великолепное решение.
После почёсывания ЧСВ от проделанной работы немного обновил html страничку. Теперь директор заходит на сайт, логинится, и смотрит хоть с десктопа, хоть с Android, хоть c iOS.
хак: под андроид есть Puffin Web Browser который умеет показывать флешь, даже если флешь не установлен.
Добавляем запуск VLC в автозапуск и, пожалуй, готово.
Наблюдения за месяц полёта:
1. Тот VLC, который кодирует кусочки для iOS, работает стабильно неделями.
2. VLC, который гонит поток для флэша, любит падать через 1-2 дня непрерывной работы. Решение — перезапуск каждые два часа.
3. VLC, который гонит поток для флеша иногда теряет видео, оставляя только звук на фотне чёрного прямоугольника не Малевича. Решение не найдено, поэтому-то перезапуск каждые два часа, а не раз в сутки.
4. шлюз, на котором запущены VLC — это какой-то ранний P4 с 1G оперативной памяти, Win2K3. VLC потребляет немного оперативки и 50-60% процессора.
Автор: Nem427

вторник, 27 августа 2013 г.

Подключаем MAG-250 по Wi-Fi

STB приставка MAG-250 поддерживает следующие Wi-Fi адаптеры: 

МодельЧипсетПримечания
DLink DWA-125Ralink RT3072
Ralink RT5370
ревизия B1 не поддерживается
ASUS USB-N13Ralink RT3072ревизия B1 не поддерживается
Edimax EW-7711UANRalink RT3072
Tenda W311MIRalink RT5370
TPLINK TL-WN727NRalink RT3070
Dune HD AirRalink RT3070

DLink DWA-125 - 2001:3C19
DLink DWA-140 - 2001:3C15


понедельник, 26 августа 2013 г.

Наркоманы охренели вконец!

Вчера обнаружил на доске объявлений у подъезда.
Две таких бумажки висели.
Надо срочно вешать камеру и снимать, кто развешивает эти объявления.


четверг, 22 августа 2013 г.

Как заставить mysql5 использовать нужный вам default-character и collation

Взято отсюда: http://broderix.blogspot.ru/2009/06/mysql5-default-character-collation.html

Для начала посмотрите что у вас есть

SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | latin1                     | 
| character_set_filesystem | binary                     | 
| character_set_results    | utf8                       | 
| character_set_server     | latin1                     | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+
8 rows in set (0.00 sec)


По умолчанию Value=latin1

Теперь вы хотите чтобы все клиенты mysql сразу использовали нужную ва кодировку:
utf8,cp1251 или koi8r

Нужно добавить в файл my.cnf
/etc/mysql/my.cnf

Следующие переменные:


[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
init-connect='SET NAMES utf8;'
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8


После изменений перезагружайте сервер.
/etc/init.d/mysql restart

Если не работает еще раз проверьте что у вас происходит:


SHOW VARIABLES LIKE 'character_set%';


проверьте кодировку базы данных:


mysql> show create database yourdatabase;
+-------------+----------------------------------------------------------------------+
| Database    | Create Database                                                      |
+-------------+----------------------------------------------------------------------+
| yourdatabase | CREATE DATABASE `yourdatabase` /*!40100 DEFAULT CHARACTER SET utf8 */ | 
+-------------+----------------------------------------------------------------------+
1 row in set (0.00 sec)


Кодировка по умолчанию для создания таблиц наследуется.
Можно еще проще для ubuntu (10.04): создать файл, например /etc/mysql/conf.d/mysqld_charset.cnf с текстом:

[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
init-connect='SET NAMES utf8;'
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8
и перезапустить mysql

Опс! Whoopsie!

А вы в курсе, что Ubuntu 12.04 и новее отсылают тайком логи падений ваших систем прямиком разработчикам Ubuntu? Весело, не правда ли?
А все благодаря сервису whoopsie.
Но мы ведь не хотим, чтобы кто-то, кроме нас, знал об крахе нашей системы, и уж тем более - чтобы логи передавались куда-либо.
Поэтому варианта два.
1. Изменить конфигурацию файла /etc/default/whoopsie , поменяв report_crashes=true на report_crashes=false и перезапустить сервис командой service whoopsie restart
2. Удалить whoopsie из системы командой apt-get purge whoopsie
Whoops!

четверг, 1 августа 2013 г.

Проблемы с ettercap

При внедрении столкнулся с проблемой, что ettercap внезапно вылетал с сообщением
libnet_write 2704 (-1): libnet_write_raw_ipv4(): -1 bytes written (Message too long)

Немного напряг гугл, и вот он - ответ. Нужно просто подтюнинговать сетевушки командой:
ethtool -K eth0 tso off gso off gro off lro off

среда, 24 июля 2013 г.

Проверка режима работы Мультифона


#!/bin/bash
multifon_login="login@multifon.ru"
multifon_password="password"
OUTPUT=`curl --silent "https://sm.megafon.ru/sm/client/routing/?login=$multifon_login&password=$multifon_password"`
echo $OUTPUT|sed -n 's|.*<routing>\(.*\)<\/routing>.*|\1|p'

Возвращаемые значения
0 - звонки идут только на телефон
1 - звонки идут только на Мультифон
2 - звонки идут в оба места