Декабрь 2008

linux: iproute2 для управления сетевой подсистемой

19.12.2008

iproute2 -- набор утилит для управления сетевой подсистемой TCP/IP и управления трафиком в Linux.

Большинство руководств по конфигурированию сети до сих пор ссылаются на ifconfig, route и arp, однако ifconfig может вести себя неадекватно в современном сетевом окружении. Эти утилиты должны уйти на свалку истории, однако большинство дистрибутивов все еще включают их. Большинство систем управления сетью используют ifconfig, предоставляя лишь минимальный набор возможностей.

Проект /etc/net project ставит целью поддержку современных сетевых технологий, и, предоставляет набор утилит для наиболее полного контроля всех возможностей iproute2, включая управление трафиком.

Ссылки по теме:

ubuntu: обновляем систему до последнего релиза

18.12.2008

Инструкция по обновлению:
http://www.ubuntu.com/getubuntu/upgrading

Поехали..

WordPress бэкенд: устанавливаем правильный REMOTE_ADDR для комментариев

12.12.2008

В случае, если WordPress живет на бекенд-сервере, например за акселератором nginx, при настройках по-умолчанию комментарии будут содержать вместо IP отправителя IP фронтенда:

From: [email protected]              Fri, Nov 21, 2008 at 7:59 AM
To: [email protected]
Новый комментарий к записи #22 "Макросы RCS" ожидает одобрения

http://shatlovsky.ru/blog/2008/10/13/makrosy-rcs/

Автор : evikalley (IP: 10.1.0.1 , 10.1.0.1)
E-mail: 
URL   : http://
Whois  : http://ws.arin.net/cgi-bin/whois.pl?queryinput=10.1.0.1
Комментарий:
Спасибо! Буду теперь заходить на этот блог каждый день!

Видим, что вместо IP спамера записан IP фронтенд-сервера (10.1.0.1).

Решение этой проблемы заключается в подстановке корректного адреса в переменную $_SERVER["REMOTE_ADDR"] (в понятиях PHP, на котором написан WordPress). Корректный адрес может быть в переменных HTTP_X_FORWARDED_FOR, X_REAL_IP и некоторых других.

Решим задачу так, чтобы:

  1. не трогать код WordPress;
  2. это работало во всех наших скриптах.

Для этого воспользуемся фичей php autoprepepend (файл, который добавляется и исполняется перед каждым php-скриптом). Скрипт (автор Grant Burton), кладем в любое место сайта:

autoprepend.inc.php:

  1. /* By Grant Burton @ BURTONTECH.COM (11-30-2008): IP-Proxy-Cluster Fix */
  2. function checkIP($ip) {
  3. if (!empty($ip) && ip2long($ip)!=-1 && ip2long($ip)!=false) {
  4. $private_ips = array (
  5. array('0.0.0.0','2.255.255.255'),
  6. array('10.0.0.0','10.255.255.255'),
  7. array('127.0.0.0','127.255.255.255'),
  8. array('169.254.0.0','169.254.255.255'),
  9. array('172.16.0.0','172.31.255.255'),
  10. array('192.0.2.0','192.0.2.255'),
  11. array('192.168.0.0','192.168.255.255'),
  12. array('255.255.255.0','255.255.255.255')
  13. );
  14.  
  15. foreach ($private_ips as $r) {
  16. $min = ip2long($r[0]);
  17. $max = ip2long($r[1]);
  18. if ((ip2long($ip) >= $min) && (ip2long($ip) <= $max)) return false;
  19. }
  20. return true;
  21. } else {
  22. return false;
  23. }
  24. }
  25.  
  26. function determineIP() {
  27. if (checkIP($_SERVER["HTTP_CLIENT_IP"])) {
  28. return $_SERVER["HTTP_CLIENT_IP"];
  29. }
  30. foreach (explode(",",$_SERVER["HTTP_X_FORWARDED_FOR"]) as $ip) {
  31. if (checkIP(trim($ip))) {
  32. return $ip;
  33. }
  34. }
  35. if (checkIP($_SERVER["HTTP_X_FORWARDED"])) {
  36. return $_SERVER["HTTP_X_FORWARDED"];
  37. } elseif (checkIP($_SERVER["HTTP_X_CLUSTER_CLIENT_IP"])) {
  38. return $_SERVER["HTTP_X_CLUSTER_CLIENT_IP"];
  39. } elseif (checkIP($_SERVER["HTTP_FORWARDED_FOR"])) {
  40. return $_SERVER["HTTP_FORWARDED_FOR"];
  41. } elseif (checkIP($_SERVER["HTTP_FORWARDED"])) {
  42. return $_SERVER["HTTP_FORWARDED"];
  43. } else {
  44. return $_SERVER["REMOTE_ADDR"];
  45. }
  46. }
  47. //Override server variable for WordPress comments
  48. $_SERVER["REMOTE_ADDR"] = determineIP();
  49.  

Далее редактируем .htaccess в корне сайта, добавляем туда ссылку на этот скрипт:

  1. php_value auto_prepend_file /home/username/htdocs/autoprepend.inc.php

(путь надо скорректировать в соответствии с вашими настройками).

Готово! Теперь WordPress видит правильный IP комментатора.

QIP 2005 Build 8080: установка от ограниченного пользователя

11.12.2008

Версии QIP до 8070 не требовали полномочий Администратора для установки. Безо всяких проблем инсталлировались и работали из любой директории, куда у вас есть права.

QIP 2005 Build 8080 имеет дефект программы-установщика, из-за которого ошибочно требуются администраторские полномочия для установки:

Дистрибутивы в архивах ZIP и RAR, представленные на сайте, содержат тот же бракованный инсталлятор.

Поскольку реакциии от Ильгама Зюлькорнеева, автора QIP, по данной проблеме нет, а на форуме в качестве "официального" решения предлагается

установить где-нибудь, где права админа не требуются, и принести на флешке, отправить по почте и пр...

(lol)

предлагаю всем желающим архив с установочными файлами QIP 8080. Установка заключается в распаковке его в произвольную директорию, можно поверх существующей, если надо сохранить профили и историю.

Скачать архив с установочными файлами QIP 8080

tar: Просмотр содержимого архива (tar.gz, tgz, tar.bzip2)

05.12.2008

Для вывода оглавления tar-архива используется команда -t:

  1. ~$ tar -tvf archive.tar
  2. -rw-rw-rw- 0 username groupname 45523421 Dec 5 16:17 file1.txt
  3. -rw-r--r-- 0 username groupname 13234112 Dec 5 16:17 file2.txt
  4. -rw-r--r-- 0 username groupname 75323624 Dec 5 16:17 file3.txt

Для tar.gz (tgz; tar+gzip):

  1. ~$ tar -ztvf archive.tar.gz
  2. ...

Для tar.bz2 (tar+bzip2):

  1. ~$ tar -jtvf archive.tar.bz2
  2. ...

Использованные команды:
-t – печать содержимого архива на stdout
-v - подробный вывод, аналог ключа -l утилиты ls. Без этой команды будет выведен краткий спискок файлов без размеров и прав.
-f имя_файла - использовать указанный файл в качестве архива, иначе читать с ленты
-zgzip-фильтр. В некоторых реализациях использовать необязательно.
-jbzip2-фильтр. В некоторых реализациях использовать необязательно.

FeedBurner + Google = ?

02.12.2008

На главной странице FeedBurner читаем:

Google has acquired FeedBurner
* We are happy to announce that Google has acquired FeedBurner

Google приобрел FeedBurner! Но что удивительно, на странице подписки на фид есть Yahoo!, AOL, NetVibes и т.д, но нет Google Reader.

Не понимаю.

P.S. Да, RSS лента теперь живет на FeedBurner.

UPD: Понял! Кнопка (Add to Google Reader) блокировалась великим AdBlock+

ubuntu: сохранение точки монтирования при смене названия устройства

02.12.2008

Понадобилось мне слить информацию со старого HDD, отформатированного в NTFS. Подключив его, обнаружил, что порядок монтирования устройств сбился, все разделы NTFS "съехали": тот, что был /dev/sda1 стал /dev/sdb1, /dev/sdb1 стал /dev/sdc1, а новый диск получил идентификатор /dev/sda1. В итоге новый диск оказался смонтирован на месте старого, а старый стал вроде как новым несмонтированным устройством.

Система, жившая до того на семействе /dev/sda2..8, спокойно перенесла виртуальный переезд на /dev/sdb2..6, поэтому я даже не сразу сообразил, как такое могло произойти, и как уберечься от подобных фокусов в дальнейшем.

Отгадка, как обычно, крылась в манах (UsingUUID):

Linux now prefers to use UUID (Universally Unique Identifier), LABEL, or symlinks to identify media storage devices on a system. Directly using /dev/hd*# or /dev/sd*# is no longer preferred since these device assignments can change between system boots:

  • all filesystems should be specified by UUID= or LABEL= for each partition.
  • all physical devices should be specified by a symlink, like /dev/cdrom for a cd drive and /dev/disk/by-id/... for each physical hard drive.

The files for which UUID is most critical:

  • /boot/grub/menu.lst
  • /etc/fstab
  • /etc/initramfs-tools/conf.d/resume

Просмотр /etc/fstab подтвердил догадку. Системные ext3 разделы были смонтированы через UUID, в то время как ntfs-разделы монтировались по старинке через имена вида /dev/sd*.

Таким образом, решение проблемы заключается в монтировании ntfs-разделов по UUID.

Узнать UUID для конкретного раздела можно так:

  1. $ sudo vol_id -u /dev/sdb1
  2. 7CF803F6A8035E22
  3.  

Размонтируем все ntfs-разделы, меняем записи в /etc/fstab, и заново монтируем раздел.

Было:

  1. /dev/sda1 /mnt/sda1 ntfs rw,noexec,utf8 0 0

Стало:

  1. UUID=7CF803F6A8035E22 /mnt/sda1 ntfs rw,noexec,utf8 0 0

Теперь при подключении новых устройств запись прежний порядок монтирования сохранится.

UPD: Харитон пишет:

мне было известно 4 способа определения uuid'а, теперь знаю пятый))
- с помощью утилиты blkid (входит в пакет e2fsprogs)
sudo blkid /dev/sda1
- "...существуют и другие способы получить UUID например для ext2 используя dumpe2fs..."
dumpe2fs -h /dev/sda6
- или так:
ls -al /dev/disk/by-uuid/
- или так:
sudo tune2fs -l /dev/sda1 | grep UUID

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