Back to the Windows

“простым смертным” надо просто клик хере и у них 99% функционала работает, а на остальное им пофигу. А нам чуть что так либо виртуалка либо на свободный раздел либо несовместимость форматов либо ещё какая хрень. А годов уже далеко не двадцать и жизни осталось не бесконечность. — Никита Ющенко про виндузовый рай

Началось всё с того, что у меня в ноутбуке стоит SSD Transcend TS256GMTS400. (При чем не от производителя ноутбука, а купленный на амазоне и установленный самостоятельно.) Вроде бы работает нормально, но изредка (иногда раз в неделю, иногда пять раз за день) вдруг подвисает на пять-десять секунд, после чего происходит пачка таймаутов операции чтения на ata, выполняется hard link reset и всё работает дальше как ни в чем не бывало. При чем обычное чтение всего устройства проходит без проблем.
Возможно в фоне ядро вызывало TRIM на устройстве, а эта операция на некоторых SSD приводит (или раньше приводила) к заметным проседаниям производительности (вплоть до вот таких подвисаний). Не знаю деталей, посмотрел я на версию прошивки, глянул в интернете, вроде на скриншотах много где указана версия старше, при чем значительно, так что надо обновлять. Более-менее привычная задача.

Тут-то всё и завертелось…

Вначале я залез на сайт производителя. (Ну если быть совсем честным, я туда залез чуть раньше, когда пытался понять какая версия прошивки сейчас актуальная, и уже тогда начал подозревать…) Производитель явно не отличается дружелюбностью. В разделе Support/Download для данного SSD лежит одна единственная ссылка на нечто, называемое SSD Scope. Какая-то утилита, которая работает под виндой и выводит “состояние здоровья” вашего накопителя. Правда на скриншотах было видно, что один из пунктов в интерфейсе называется “Firmware status/upgrade”. Так что, выходило, что надо качать и ставить этот софт под винду.

Так как это прошивка для SSD, подключаемого по M.2, да еще и того, на котором стоит система, то обойтись виртуалкой с пробросом в нее физического устройства скорее всего не получится (а даже если и получится, то как-то слишком рискованно). Переставить SSD в другой компьютер тоже проблематично: и интерфейс редкий и разбирать X240 крайне много мороки (чертовы китайцы!). Значит нужна живая винда. =(

Надо сказать, что на тот момент у меня на ноутбуке даже были какие-то остатки предустановленной винды. Проблема только в том, что из коробки винда стояла где-то на sda3, при этом sda1 был EFI boot раздел с ейным загрузчиком. Когда я поставил SSD, я первым делом сделал EFI boot раздел на sdb1 (то есть на этом самом SSD), sda переразбил, снеся всё ненужное, а виндовый загрузчик положил на sdb1. И даже заставил эту винду загружаться. Проблема только в том, что потом, в какой-то момент, я переносил данные с другого ноутбука, и, совсем забыв про винду, перезаписал в числе прочего и EFI boot раздел целиком. Так что винда у меня вроде как была, но её загрузчика уже не было.

Ну ок, починять свой загрузчик винда умеет аж со времен Windows NT 4.0, значит надо забутиться с инсталляционного носителя и восстановить, делов-то. Не тут-то было. Во-первых, как выяснилось, у винды до сих пор туго с загрузочными USB. Нельзя просто взять и записать ISO образ на USB, как уже давно делается в приличном обществе. Надо либо запускать встроенный мастер создания инсталляционного носителя (который будет качать все 4 ГБ из Интернета), либо использовать сторонние инструменты вроде rufus (которые берут данные из iso образа, но всё равно копируют файлы весьма медленно). Ну и, понятно, работает это всё только под виндой, благо у меня есть некоторое количество виртуалок, пробросить внутрь которых USB накопитель не представляется сложным.

Попробовал восстановить загрузчик… Два раза… Оба раза было так: загружается инсталлятор, я ему говорю, что хочу починить свою винду, он радостно говорит “у вас поврежден загрузчик, щас починю”, после чего рисует какой-то BSOD и… больше с этого USB диска уже загрузиться не получается, потому что, судя по всему, загрузчик он чинит сам у себя. “Разрешите я выстрелю себе в ногу, сэр!”

Черт с ним. Решил поставить винду с нуля. Фиг. Не нравится ей что-то. Пишет что на данный раздел установить винду невозможно, потому что диск имеет разметку GPT. После некоторого чертыхания, удаление раздела, затирания данных на разделе и т.п. таки удалось уговорить инсталлятор, что ставить можно и нужно и винда-таки поставилась…

Уже во времена приснопамятного Windows NT 4.0 виндовый загрузчик был достаточно умный. Он поддерживал менюшки, chainload других загрузчиков и всё такое. Конечно инсталлятор не мог понять всякие там линуксы, биэсди и прочее, тупо затирал MBR своим stage 1 bootloader, и в меню добавлял только другие найденные инсталляции той же винды. Но то был прошлый век. Сегодня у нас всё технологичнее, есть UEFI, с его стандартизованным процессом выбора загрузчика и т.п. Но фиг там. Винда заставила меня биться в истерике… первый раз…

21 век. Космические корабли, всё такое… Для совместимости и интероперабельности в области загрузки персональных компьютеров изобретен стандарт (U)EFI, со специальным разделом, куда разные ОС могут складывать свои загрузчики, чтобы потом их запускать из начальной микропрограммы EFI.

А долбаный Windows 10 ПРОДОЛЖАЕТ УДАЛЯТЬ ЗАГРУЗЧИКИ других операционных систем. Но так как теперь по стандарту они ему не мешают, он, для надежности, при инсталляции переформатирует все найденные EFI Boot разделы!

Реальность оказалась еще более фееричной. После того, как починил загрузку рабочей системы, я вернулся к исходной задаче, то есть к перепрошивке SSD. Загрузился в винду, поставил SSD Scope, перешел в раздел с информацией о прошивке… “Для вашего устройства есть более новая прошивка, скачать?” – радостно спросила меня программа. “Конечно да”, – ответил я. После чего ничего не произошло. Но в Диспетчере задач (а надо сказать, что диспетчер задач и прогрессбар файловых операций – это две реально отличные новые фишки в восьмой винде) было видно, что что-то оно-таки качает. Через некоторое время вдруг всплыло окошко “Новая прошивка скачана. Открыть?”

На самом деле об этом можно было догадаться раньше. Как можно из винды обновить прошивку накопителя, с которого, возможно, эта винда и загружена? Конечно инженеры Трансценда тоже об этом подумали. И, конечно, решили, что безопаснее будет, если пользователь загрузится с чего-то другого. Например с USB. К сожалению, это не прошивка BIOS и не устройства на какой-нибуть legacy шине, типа PCI, поэтому из DOS этого сделать не получится. Windows PE, конечно, более-менее подойдёт, но весит много, сложна в лицензировании и не все просто с поддержкой аппаратуры. Какую ОС выбрать для такого носителя, чтобы она +/- везде загрузилась и увидела все устройства без всяких там миллионом драйверов? Ну да, вы правильно догадались. SSD Scope просто скачал мне архив, в котором лежал образ специального Линукса, руководство и программка под винду, которая умеет переформатировать флэшку и записать на нее выбранный образ. Так со мной случилась истерика второй раз.

Но и это еще не все. Воспетая Никитой стратегия “клик хере” не сработала, флэшка записывалась, но при загрузке с нее не оказывалось ни иксов, ни программы прошивки. Разбираться не стал, выдрал прошивальщик с файлами из архива, загрузился по сети в GParted Live, запустил прошивальщик и… он сказал, что щас всё с SSD сотрёт полностью. Не знаю, что в такой ситуации делают “простые смертные”, а мне пришлось еще сдампить всё содержимое вначале на диск, а потом после перепрошивки обратно на SSD.

В общем задача решена: SSD, вроде, больше не подвисает, но лулзов и потраченного времени, как по мне, так несколько слишком. Единственное что не могу понять, так это какая из всего этого мораль, видимо придётся додумывать читателям.

i386, amd64, crypto

Есть у меня очень удобный Eee PC 1015B. Маленький, живет 6 часов от батарейки, потерять не жалко… Ну точнее как не жалко, сама железка стоила 10 тысяч несколько лет назад или даже дешевле, а сегодня таких почему-то больше не делают, так что, если потерять, то не понятно будет чем заменить. Это с одной стороны. С другой стороны, там есть некоторое количество информации, приватность которой меня волнует. Понятно, что надо всё шифровать и т.п.

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

Решил не париться, проинсталлировать его с нуля, заодно перейти с i386 на amd64, который теперь уже совсем-совсем дозрел. Но так как в нетбуке стоит слабенький Brazos, были некоторые опасения, не станет ли он совсем тормозить из-за дополнительного шифрования. Поэтому померил его производительность старым добрым бенчмарком “Собери ядро 3.16”.

Тестируемая система:
ASUS EeePC 1015B
AMD Brazos C-50 (1ГГц, 2 ядра (на самом деле что-то вроде HyperThreading), 64bit)
RAM 4GB
SSD 256GB (какой-то A-Data)

Результаты:
i386 без шифрования

$ time make -j2 modules
real 241m20.022s
user 443m10.388s
sys 21m6.952s

i386 (chroot на amd64 хосте) с шифрованием

$ time make -j2 modules
real 244m18.927s
user 445m4.748s
sys 21m45.132s

Как видно, включение шифрования почти не дало падения производительности на задачах, где надо не очень интенсивно читать/писать много маленьких файлов.

После этого я решил заодно проверить, насколько сейчас оптимизирована компиляция под amd64 и собрал то же ядро с тем же конфигом, но на amd64 хосте. Результат получился не совсем ожиданный (для меня). Под amd64 всё собралось заметно быстрее:

amd64 с шифрованием

$ time make -j2 modules
real 222m59.369s
user 381m12.240s
sys 29m23.844s

Выигрыш – 10%.

График:
benchmark

Удаление письма из хранилища dovecot

Отправил случайно в список рассылки письмо на много десятков мегабайт и оно разлетелось по всем разработчикам, что не есть хорошо, потому что у всех почта на нашем сервере и сразу полгига места ушло.
Решил удалить его прямо у пользователей из Maildir’ов. Вначале убедился, что ищутся правильные письма:

doveadm search -A FROM git@lvk.cs.msu.su LARGER 10M HEADER X-Git-Newrev 252417435200cca7d6ac33b8be24018100513527

Вроде, всё Ok, пытаюсь удалить:

doveadm -D expunge -A FROM git@lvk.cs.msu.su LARGER 10M HEADER X-Git-Newrev 252417435200cca7d6ac33b8be24018100513527

Получаю:

To avoid accidents, search query must contain MAILBOX in all search branches

Ну, в принципе, логично и правильно, от греха… Но у меня-то случай особый! =) Понятия не имею кто по каким папкам раскладывает коммит-логи, так что надо всё-таки удалять из всех, а не только из явно перечисленных. Пришлось в изысканиях дойти до исходников, где нашел, что можно указать не конкретную папку, а globe:

doveadm -D expunge -A mailbox '*' FROM git@lvk.cs.msu.su LARGER 10M HEADER X-Git-Newrev 252417435200cca7d6ac33b8be24018100513527

Вот так сработало.

The smallest video monitoring daemon ever

Как-то раз я уезжал и захотелось мне устроить небольшой видеомониторинг, чтобы с телефона контролировать происходящее под окнами.
При чем без всяких детекторов движения и всякой прочей ерунды. Просто иногда поглядывать, убеждаться, что машина на месте и продолжать предаваться отдыху.

Всякие системы мониторинга типа Motion или ZoneMinder поднимать было неохота, поэтому написал на коленке простенький скриптик, грабящий картинку с веб-камеры и копирующий ее на удаленный сервер.

Сейчас вот разбирал мусор, нашел его и решил куда-нить кинуть.

Update Seagate firmware from Linux

Нашел тут вчера пару Seagate Barracuda 7200.12 (ST31000528AS). Тех самых, на которых надо обязательно обновлять прошивку. И задался вопросом как бы ее обновить.

С Виндой и загрузочным CD как-то не задалось, поэтому попытался понять, как сделать это из-под линукса. Почему-то гугл давал много ссылок но ни одной по теме, поэтому пришлось поискать.

Итак, вам понадобятся:

  1. Файл с новой прошивкой
  2. Утилита hdparm
  3. Готовность к тому, что диск в результате будет испорчен

Прошивка:

Скачиваем iso с сайта Seagate (в моем случае это был Barracuda12-ALL-CC49.iso), вытаскиваем из него RAM-образ (у меня он назывался PH-CC49.ima), монтируем его как loop-устройство и находим в нем архив с прошивками LOD.zip

В архиве обнаружилось несколько LOD-файлов с прошивками, что несколько запутывает, но судя по этому файлу это версии прошивок для дисков одного семейства, но с разным числом головок, и в моем случае нужна была прошивка PHCC494H.LOD

А вот для Seagate Barracuda ES.2 история была чуть другая. Я скачал файл ES2SN06C-1D2DMoose.iso, но в нем была только какая-то ненужная ерунда, а прошивка была интегрирована в загрузочный образ. Так что мне потребовалось вначале вытащить загрузочный образ командой geteltorito ES2SN06C-1D2DMoose.iso > boot.img и уже в нем обнаружился 1D2DSN06.LOD.

В ряде мест упоминалось, что прошивку можно залить при помощи утилиты sg_write_buffer, но у меня это не заработало. Зато сработала команда hdparm --fwdownload

Была прошивка:

# smartctl -a /dev/sdb
Model Family:     Seagate Barracuda 7200.12
Device Model:     ST31000528AS
Firmware Version: CC38

Заливаем новую:

# hdparm --fwdownload PHCC494H.LOD /dev/sdb

Выключаем компьютер по питанию (перезагрузки недостаточно), включаем назад:

# smartctl -a /dev/sdb
Model Family:     Seagate Barracuda 7200.12
Device Model:     ST31000528AS
Firmware Version: CC49

Всё получилось!

Еще раз делаем это на свой страх и риск с готовностью потерять диск совсем (ну hdparm у вас это уточнит). И конечно загрузившись не с того диска, который перепрошиваем.

 

And one more time for Google spider =)

You can update Seagate HDD firmware from Linux with hdparm command.

First you should find the propper firmware in LOD format (E.g. dowload iso from vendor site, get .IMA image from it, and extract LOD.ZIP archive with firmwares from that image.)

If you don’t see image file in .iso, you can try to extract it from ElTorito boot, like I did for my Seagate Barracuda ES.2:
geteltorito ES2SN06C-1D2DMoose.iso > boot.img

And inside this boot.img I found 1D2DSN06.LOD.

Then upload firmware into hdd with

# hdparm --fwdownload <firmware.LOD> /dev/<HDD>

That’s it!

The Tor Project: Anonymity Online

В четверг, 2 декабря, состоится доклад одного из основных разработчиков Tor Эринн Кларк (Erinn Clark) на тему “Проект Тор: Анонимность онлайн”.

Доклад будет проходить на английском языке. После доклада планируется небольшая PGP key-signing party для интересующихся.

Место проведения: второй учебный корпус МГУ, аудитория П-13.
Время 18:00.

Слушатели не имеющие пропуска в здания МГУ должны предварительно записаться в список для прохода через охрану. Для этого необходимо послать письмо со своими ФИО (да-да, анонимность торжествует) на адрес gq@cs.msu.su. В subject имеет смысл написать слово Tor.

The Tor Project makes software used worldwide by a diverse set of people that is aimed at protecting people’s anonymity online. As the internet grows, more and more threats to people’s privacy grow with it, and Tor aims to minimize or remove those dangers.

This talk will give an overview of Tor’s architecture and design, its use as an anti-censorship and anti-surveillance tool, as well as discussing the basic concepts of privacy and anonymity on the Internet.

Невинномысск

Улетаю в Невинномысск. Буду там до начала сентября. Если кто-то из местных хочет обменяться PGP ключиками или там порасспрашивать меня про проект Debian, то пишите на gq@debian.org.

Авангард интернет-банкинг vs. Linux

Upd: Более неактуально, там теперь полностью джава.

Садись, малыш, сегодня я расскажу тебе как пользоваться интернет-банкингом Авангарда в Линуксе.

Итак ты являешься клиентом банка Авангард. У тебя должны быть:

  • логин и пароль от интернет-банкинга;
  • карточка с одноразовыми паролями;
  • флэшка с ключом ЭЦП.

С первыми двумя пунктами всё просто: логин с паролем позволяют зайти в веб-интерфейс и получить любую информацию. Если требуется выполнить типовой платеж, то раз в сеанс будет запрошен одноразовый пароль с карточки. Самое интересное происходит в ситуации, когда требуется выполнить какое-либо действие, которое по законодательству требует твоей подписи. Например, хочется открыть вклад. Или поменять какой-нибудь лимит для карточки. Или перевести миллионы в другой банк. Казалось бы надо идти в офис и там писать заявление, но не всё так страшно: в нашей самой лучшей на свете стране есть закон об Электронных Цифровых Подписях и Авангард как раз одну такую ЭЦП с православным ГОСТовским криптоключем внутри тебе сгенерировал.

Но тут-то и кроется подстава: софт, конечно же, кривой. Ну как не то чтобы совсем уж, чего обижать авторов, но не без забавностей.

Для того, чтобы проверить работу цифровой подписи можно попробовать изменить какой-нибудь лимит на закладке “Справочники/Лимиты по картам”.

Во-первых, для работы ЭЦП требуется java-plugin. Не знаю, как там с icedtea (или как там оно зовется), хотя вроде где-то писали, что и он работает, но я не стал оригинальничать и поставил java-plugin от некогда славной фирмы SUN (пакет sun-java6-plugin).

И ничего не заработало. Честно сказать, я это заметил еще месяца полтора назад, что не работают у меня java-апплеты, но списал это на то, что где-то прописалась какая альтернативная джава из gcj или еще какого проекта, и забил. А тут занялся вопросом серьезно – сносил, переставлял… Ничего не помогает. Вместо апплета выдает окошко с надписью “Error. Click for detail”, по клику на которое вызывается java-console с текстом о Class not found и прочих эксепшнах, но главное с ключевой строчкой: “Caused by: java.net.ConnectException: Network is unreachable”

Небольшое расследование вывело на следующую проблему: #560238. Если коротко, то суть ее состоит в том, что Marco d’Itri добавил в пакет netbase установку sysctl’я ломающего некоторый “кривой” софт. Не будем сейчас обсуждать Марко и его маму, равно как кривость сановской джавы и информационность RFC 3493. Просто факт остается фактом. Сейчас сановская джава не сможет подключиться к сети при установленном net.ipv6.bindv6only=1

Так что первым нашим шагом будет открытие /etc/sysctl.d/bindv6only.conf и установку там net.ipv6.bindv6only в значение 0. После чего стоит сказать “/etc/init.d/procps start” Ну это всё пока что актуально только на Debian Squeeze, остальным повезло. (Пока?)

Теперь апплет-таки запускается и, если тебе особенно повезло, радостно сообщает: “Обнаружение программы… Err” с очень содержательным пояснением: “Ошибка обнаружения/скачивания программы шифрования: invalid stream header: 0D0A0D0A”

Тут всё просто и очевидно (да, это сарказм): открываешь настройки IceWeasel/FireFox и разрешаешь там “Third-party cookies”. Они там в разных версиях в по разному называются/находятся, так что проще всего открыть “about:config” и там поставить значение переменной network.cookie.cookieBehavior в 0. Кстати эта проблема, наверняка должна проявляться и под виндой.

Едем дальше: аппет сообщает “Ошибка выполнения программы подписи  : Cannot run program “c:\avn_ib/avn_cc.exe”: java.io.IOException: error=13, Permission denied”. Если посмотреть в домашний каталог пользователя (а именно он является текущим для java-приложений, запускаемых из браузера), то мы радостно обнаружим там каталог “c:\avn_ib” внутри которого действительно есть неисполняемый файл avn_cc.exe

Как ты уже догадался, гений русских программистов бесконечен. Java-апплет всего-лишь является троян-дропперомзагрузчиком для настоящей боевой криптографии. Которая написана, естественно под винду. Ну тут всё просто. Он хочет запускать этот бинарник? Нет проблем! Чтобы работали виндовые программы, ставим wine. Чтобы бинарник можно было запускать напрямую, ставим binfmt-support. (Вообще он рекомендуется вайном, но мало ли, у тебя он не стоит. Ну и в других дистрибутивах пакет может называться иначе, ты уж сам разберись, главное чтобы работал прямой запуск виндовых прог: не только “wine prog.exe”, но и просто “./prog.exe”) Дальше, понятно, надо сделать бинарник avn_cc.exe исполняемым.

Нет, это еще не всё. Теперь апплет выдает нам не менее экзистенциальное “Ошибка выполнения программы подписи: ret 2 команда <c:\avn_ib/avn_cc.exe c:\avn_ib/avn_clb_sign.in>” Надо немного подумать: чтобы бинарник можно было запустить из вайна, он должен быть доступен внутри виндового окружения. А какой путь сейчас у этого бинарника? Правильно Z:\home\user\c:\avn_ib\avn_cc.exe В общем не бывает таких путей в виндовсе. Решаем всё просто:

mv ~/c:\\avn_ib ~/.wine/drive_c/avn_ib&&ln -s ~/.wine/drive_c/avn_ib ~/c:\\avn_ib

Пробуем еще раз… О чудо! Крипто-хрень спрашивает нас где лежит приватный ключик. Ну теперь достаточно воткнуть флэшку с ключом, примонтировать и оно всё само подпишет.

Велик русский Левша. Умеет подковать англицкую джаву.

PS А Авангард и его интернет-банкинг действительно хорош. Ну и MasterCard.Metro у него по самым адекватным тарифам. В общем рекомендую. Кстати, обещают подружиться до конца года(?) с московским наземным транспортом и питерской подземкой.

Maemo conference Moscow 2010

Побывал сегодня на конференции, посвященной платформе Maemo.

Довольно любопытно. Оказывается, что Нокиевцы сами не ожидали, что N900 удастся (в такой степени), а сейчас они расходятся как пирожки. В России 4е место по прибыли (порядка 1500-2000шт в месяц), в мире 5е. Планы на 2009 Q4 были перевыполнены в два с лишним раза. При этом средний покупатель, оказывается, вовсе даже не гик (политкорректно маркетинговые люди их называют “тэкникал лидерз”), а человек, переросший E серию (не по статусу, а по потребностям). Хотя встречаются перебежчики с яблок и форточек.

Кстати Россия сейчас для Нокии “4й по величине рынок”. Не совсем понятно правда, в мире или в азиатском регионе, но всё равно.

Люди из Нокии потравили много интересных баек в коридоре. Они всерьез уверены, что за Маэмо будущее. При этом вроде бы настроены очень лицом к сообществу. Правда основная причина это “лучше я сейчас потрачу 30 тысяч, чтобы замейнлайнить наше изменение в апстрим, чем 3 лимона за поддержку всего этого самим в течении 5 лет”. Но всё равно это звучит весьма позитивно.

Насколько их планы на завоевание рынка кажутся реалистичными? Не знаю. Но они говорят очень много правильных вещей в том, что касается юзабилити (в более широком, чем юзабилити пользовательского интерфейса, смысе), возможностей, которые они требуют от платформы. Хочется надеяться, что прок будет. В общем, если и вправду N920 будет без клавиатуры, и если навител портирует под него свою навигацию, то я, пожалуй, куплю себе и то и другое. А пока FS n560. Хотя и исключительно в роли нафигатора.

Spin Debian package

SPIN is a general tool for verifying the correctness of distributed software models in a rigorous and mostly automated fashion. It was written by Gerard J. Holzmann and others in the original Unix group of the Computing Sciences Research Center at Bell Labs, beginning in 1980. The software has been available freely since 1991, and continues to evolve to keep pace with new developments in the field.

http://spinroot.com

Unfortunately Bell Labs use strange non-free copyleft-like license instead of good old GPL. So it could not be included in Debian archive. But as I need Debian package for it, I’ve prepared one and put into my repository.

Роняю ядра. Недорого.

Сегодня научился ронять ядро.
Следующим образом:
mkfs.ext2 /dev/sdc2
mount /dev/sdc2 /mnt
iozone … -f /mnt/io #бенчмарк

В другом потоке:
dd if=/dev/zero of=/dev/sdc2 bs=1024 count=1024
mkfs.reiserfs /dev/sdc2

Вот я теперь думаю: я был не прав или всё-таки оно не должно было упасть?
Что ответит Александр ДрузьКО?

Copyright ≠ Авторское право

Сегодня был ткнут мордой в очаровательный факт. Подавляющее большинство словарей трактует/переводит Копирайт как Авторское право. И я тоже был в этом долгое время уверен.

Таки нет! Нам все эти годы врали! Английское Copyright обозначает только отчуждаемые авторские права. А к неотчуждаемым правам отношения не имеет.

А вы говорите, что изюм это сушеный виноград…

NeTAMS in Debian

Уж не знаю, имеет ли сегодня это какой смысл, но NeTAMS таки попал в архив Debian. А, с другой стороны, свободных аналогов-то и не видно что-то.

ЗЫ В моем репозитории в секции main лежат бэкпорты под все актуальные дистрибутивы Debian/Ubuntu.

Весёлые картинки

Вчера делал аж два рассказа про Debian. Один про то, как это всё вообще устроено, другой про то как выглядит работа мейнтейнера.
Картинки раз и два.

Upd: Лицензия на второй файл cc-3.0-by-sa, на первый, скорее всего тоже, но надо еще уточнить, потому что я использовал за основу творчество Сэма Хосевара, напишу ему и спрошу.

MyDNS to BIND convert script

Понадобилось мне тут на одном хосте поднять ispconfig. Ниче так, работает, одна проблема: для поддержки DNS там используется MyDNS (реально mydns-ng), который как-то странно работает. В частности он не умеет (не смотря на заявления автора) IXFR, так что на нормальные вторичники зона не трансферится, пока там явно не включишь request-ixfr no; для первичного сервера. И вроде как заменить MyDNS нечем, исправить нереально, а работать должно. В итоге родилась извращенная идея генерить гонфиги и зоны для BIND на лету. Был написан такой скрипт:

#!/bin/sh

rm -f /etc/bind/mydns/db.*
echo -n > /etc/bind/named.conf.mydns

echo "select origin from dns_soa where active='Y';" | mysql --defaults-file=/etc/mysql/debian.cnf dbispconfig | while read DOMAIN;do
[ "$DOMAIN" = "origin" ]&&continue

mydnsexport "$DOMAIN" > /etc/bind/mydns/db."$DOMAIN"

XFER=$(echo "select xfer from dns_soa where origin=\"$DOMAIN\"" | mysql --defaults-file=/etc/mysql/debian.cnf dbispconfig | tail -n1|tr , \;| sed -e 's/;;/;/g' -e 's/^;$//')\;

echo "zone \"$DOMAIN\" { type master; allow-transfer { $XFER }; file \"/etc/bind/mydns/db.$DOMAIN\"; };" >> /etc/bind/named.conf.mydns

done

/etc/init.d/bind9 reload > /dev/null

где /etc/mysql/debian.cnf – это файл содержащий параметры доступа к mysql:

[client]
host     = localhost
user     = root
password = password
socket   = /var/run/mysqld/mysqld.sock

Правда, как оказалось, mydnsexport генерирует невалидный файл зоны, так что пришлось его слегка пропатчить:

diff -rNu mydns-1.2.8/src/lib/rr.c mydns-1.2.8.patched/src/lib/rr.c
--- mydns-1.2.8/src/lib/rr.c	2009-02-03 12:15:26.000000000 +0300
+++ mydns-1.2.8.patched/src/lib/rr.c	2009-09-27 05:00:26.000000000 +0400
@@ -866,6 +866,7 @@
 			     "%s%s%s"
 			     "%s%s"
 			     "%s%s"
+			     "%s"
 			     "%s",

 			     columns,
@@ -891,8 +892,9 @@
 			     (filter)? " AND " : "",
 			     (filter)? filter : "",

+			     " ORDER BY name,type",
 			     /* Optional sorting */
-			     (mydns_rr_use_stamp)? " ORDER BY stamp DESC" : "");
+			     (mydns_rr_use_stamp)? ",stamp DESC" : "");

   RELEASE(namequery);

Ну и вставить вызов скрипта в крон. Извращение, но работает.

RuNIX.org update

Обновили RuNIX.org. Детали тут.
Порядок записей на странице – это артефакт обновления, насколько я понимаю, скорее всего в дальнейшем всё будет нормально.

Со всеми замечаниями как всегда на root@runix.org.

Cheers.

Git trac post-receive hook

Добавил тут для одного из проектов хук в репозиторий, который закрывает тикеты по коммит-логам.

Неочевидное тут вот что:
закрывать тикеты надо тогда, когда коммит попадает на master (такая у нас модель разработки), соответственно надо отлавливать мержи и в случае мержа просматривать смерженные коммиты.

Upd: Гит оказался умнее меня и сам (rev-list) выводит коммиты со смерженных веток. Поэтому всё намного проще и получившийся скрипт даже и не интересен ни разу.

Скрипт получился такой:

#!/bin/sh
# This script is run after receive-pack has accepted a pack and the
# repository has been updated.  It is passed arguments in through stdin
# in the form
#  oldrev newrev refname
# For example:
#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master

TRAC_HOOK="/srv/git/hooks/trac-post-commit-hook"
TRAC_DIR="/srv/trac/stand"

procrevs() {
    while read gitrev; do
	"$TRAC_HOOK" -p "$TRAC_DIR" -r "$gitrev"
    done
}

while read OLD NEW NAME;do
	test "$NAME" == "refs/heads/master"||continue
	git rev-list --no-merges "$OLD..$NEW"|procrevs
done

Где TRAC_HOOK – это trac-post-commit-hook из дистрибутива trac, TRAC_DIR – каталог с проектом trac. В самом trac’е должен быть включен и настроен плагин trac-git.