Как на одном сетевом интерфейсе одновременно поднять статический и динамический IP (по DHCP)?

Для дебиана/убунты я её решил. Интересно, как она будет решаться в других линуксах, а также во FreeBSD и в Windows.

Задачка, как это ни смешно, чисто практическая. Динамический адрес выдаёт провайдер по DHCP. Связь с провайдером осуществляется через модем, у которого гвоздями прибит статический адрес 192.168.100.1, на который можно зайти по HTTP и посмотреть на состояние модема. Для этого и нужен статический адрес 192.168.100.x, потому что когда модем глючит и отваливается, DHCP не работает, и у клиентского компьютера вообще нет ни IP, ни default route, и в модем попасть невозможно. А как раз в этот момент хочется сходить в модем и посмотреть, чтО с ним.

Предположим, в силу исключительной криворукости вы умудрились в терминале привязать букву “e” к команде erase. И теперь при нажатии этой буквы у вас старается символ перед курсором. Соответственно, набрать stty sane или stty erase не представляется возможным.

Что делать?? Шелл пусть для определённости будет bash.
Один из вариантов отгадки под катом. Read the rest of this entry »

Сегодня утром немножко сломался скриптик, импортирующий в базу записи, приезжающие от партнёра. Скриптик рабочий, трудится уже много месяцев. Да и сломался он не совсем - не может добавить в таблицу некоторые отдельные записи. Остальные успешно добавляет, а эти никак.

Попытался вручную - натурально не добавляется. “Unique constraint (foo.bar) violated, пошли все нафиг” - говорит сервер. Ищу запись по ID - нет такой. Внимательно приглядываюсь к описанию violated constraint и обнаруживаю, что это про уникальность имени, а не ID. Ищу запись по такому имени - а её тоже нет. Но новая не добавляется. Чертовщина какая-то.

А разгадка оказалась проста. Можно предлагать в качестве задания на собеседовании DBA :)

Read the rest of this entry »

Сегодня на повестке дня две задачи:

1) Волею судеб вы случайно удалили у команды chmod права на выполнение. Как вернуть их обратно? Под рутом, конечно. Без этого вы бы их и не удалили.

2) Как в шелле (для определённости пусть будет bash) привязать команду к клавише, чтобы, скажем, при нажатии просто “1″ (без Enter) выполнялась команда (например, uname -a). Вопрос возник из http://community.livejournal.com/ru_freebsd/194430.html?mode=reply, ответ есть там в комментах.

Напишите регулярное выражение, которое проверяет, что во входной строке есть: хотя бы одна буква (латинская) и хотя бы одна цифра и хотя бы один символ, не являющийся буквой и цифрой.

Типичная такая проверка пароля на сложность. По отдельности это всё элементарно, загвоздка в том, что это надо сделать одним выражением.

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

Моя версия: /(?=.*\d)(?=.*[a-z])(?=.*[^0-9a-z])/i Чтобы посмотреть, выделите мышкой.

via [info]nikulina

Отдельной рубрики про верстальщиков у меня нет, и вообще я не настоящий сварщик, поэтому пусть будет в задачках для сисадминов.

Сегодня один товарищ в одном совершенно непрофильном сообществе задал интересный вопрос: как сделать, чтобы колёсико мышки осуществляло  на широком сайте _горизонтальный_ скроллинг?

Я немножко погуглил и сделал так. Может, это как-то проще делается?

На фотографии можно внимания не обращать, я взял первые попавшиеся.

Выбираем данные из некоторой таблички:

SELECT foo,bar FROM table1 WHERE условия;

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

SELECT * FROM table2 WHERE foo='foo1';

Ура, ничего не находится. Значит, они должны появиться в итоговой выборке. Пишем окончательный запрос:

SELECT foo,bar FROM table1 WHERE условия
AND foo NOT IN (SELECT foo FROM table2);

И.. получаем индейскую национальную избу. 0 rows, и всё тут. Данных в table2 совершенно точно нет, но и из table1 они выбираться перестали.

Профессиональные DBA уже, наверное, догадались, в чём дело, но поскольку я не, мне на это понадобилось минут 10..

Дано: маленькая одноранговая виндовая локальная сеть. Доменный контроллер, WINS, DHCP, всё как обычно. Всё подключено через одни общий неуправляемый коммутатор. IP-адреса из блока 10.0.0.0/24.

Шлюзом в интернет работает юниксовая машина. Она же по совместительству работает VPN-концентратором (PPTP) для внешних клиентов. Адреса выдаёт из той же сети 10.0.0.0/24, чтобы подключившиеся клиенты прозрачно видели локальную сеть.

Никакой фильтрации трафика для локальных IP-адресов ни на самом шлюзе, ни на внутренних серверах нет.

Проблема: клиент успешно подключается по PPTP, получает адрес, но из всей локальной сети видит только сам шлюз. Все остальные попытки соединиться с любыми серверами в локальной сети или даже запустить traceroute натыкаются на таймауты со следующего хопа после шлюза.

В то же время соединения с самогО шлюза на те же внутренние серверы успешно устанавливаются.

Форвардинг на шлюзе, естественно, включён. Анализ с помощью tcpdump на шлюзе показывает, что пакеты из VPN успешно форвардятся в локальную сеть, но ответы на них не приходят. proxyarp включён.

Вопрос: кто виноват, что делать?

Upd: ответ под катом Read the rest of this entry »

Есть табличка tbl. В ней есть записи нескольких типов, различаются по значению поля type. Кроме того, есть поле disporder (числовое, определяет, в каком порядке записи должны показываться пользователю) и поле prio (приоритет, может быть ‘Y’ или ‘N’). Для записей типа 1 prio может быть равен ‘Y’ максимум у одной записи в таблице, а может вообще у всех быть ‘N’.

Задача: одним запросом вывести из таблицы поле title (и только его) для всех записей типа 2, а также для первых трёх (в порядке prio+disporder) записей типа 1, причём выборка должна быть отсортирована в целом по disporder, но если в выборке встречается запись типа 1, у которой prio=’Y', то она должна оказаться на первом месте.

Пользоваться можно вашим любимым диалектом SQL, а в моём для полного счастья не допускается FIRST и ORDER BY в SELECT’ах, объединенных в UNION. UNION, понятное дело, можно сортировать только целиком и только по полям, присутствующим во всех входящих в него SELECT’ах.

Задачка для админов, которые утверждают, что умеют прекрасно настраивать апач и php под ним. (Да, я тоже самоуверенно думал, что умею :).

Дано: машина с линуксом (или FreeBSD, или солярисом, не принципиально). На ней запускается несколько экземпляров апача, каждый со своей конфигурацией (естественно, на разных IP/портах).

Apache (2) и mod_php (5) установлены из стандартных пакетов/портов, кому как больше нравится, но суть в том, что бинарники и библиотеки для всех экземпляров апача одинаковы. [Это менять нельзя, таково условие задачи, обусловленное необходимостью лёгкого апгрейда стандартными средствами.] Разные только конфиги.

Соответственно, везде, где подключён mod_php5, настройки для php  считываются из одного и того же файла (/etc/php5/apache2/php.ini  или /usr/local/etc/php/php.ini, не принципиально). Естественно, во всех апачах настройки получаются одинаковые.

Собственно задача: у одного из апачей надо изменить некоторые параметры php, которые задаются через php.ini. Например, max_execution_time. Разрешается поменять все параметры сразу путём подсовывания другого php.ini.

Как?

Хинт: задача решаемая, но я на поиски решения потратил минут двадцать.