Если вы еще не пользуетесь Vim, эта статья может убедить вас делать это )
via Полезные советы по Linux
четверг, 29 мая 2008 г.
воскресенье, 25 мая 2008 г.
Debian-Way установка Google Earth
Казалось бы, можно как и предлагает Google, установить это приложение прямо из GoogleEarthLinux.bin, но это не отражает правильного поведения в случае Debian-Like дистрибутивов. Во-первых, это приведет к установке в систему файлов, не отслеживаемых пакетным менеджером, во-вторых это может быть неудобным, если вам хочется установить это приложение на много однородных систем и регулярно обновлять его. В-третьих, для установки этого приложения в Debian есть специальный способ.
Итак, что же надо сделать, чтобы установить Google Earth?
1. Необходимо установить утилиту для создания пакетов .deb из его инсталлятора:
2. Необходимо скачать оригинальный .bin дистрибутив с google.com:
Перейти на страницу загрузки
3. А теперь надо натравить (1) на (2)!
Впрочем, можно попробовать и пропустить шаг 2 - утилита может скачать установщик самостоятельно.
В итоге всех манипуляций, мы получим что-то похожее на "googleearth_4.3.7204.836+0.5.4-1_i386.deb", который можно устанавливать в систему, выкладывать в свой репозитарий (для внутреннего пользования) и т.д.
Итак, что же надо сделать, чтобы установить Google Earth?
1. Необходимо установить утилиту для создания пакетов .deb из его инсталлятора:
$ sudo aptitude install googleearth-package
2. Необходимо скачать оригинальный .bin дистрибутив с google.com:
Перейти на страницу загрузки
3. А теперь надо натравить (1) на (2)!
$ make-googleearth-package --file /tmp/GoogleEarthInstaller.bin
Впрочем, можно попробовать и пропустить шаг 2 - утилита может скачать установщик самостоятельно.
В итоге всех манипуляций, мы получим что-то похожее на "googleearth_4.3.7204.836+0.5.4-1_i386.deb", который можно устанавливать в систему, выкладывать в свой репозитарий (для внутреннего пользования) и т.д.
суббота, 24 мая 2008 г.
Смена CPU Affinity - привязки процесса к процессорам в SMP-системе
Давеча этот вопрос был задан, но ответ не сразу нашелся даже в google.
Суть его - как заставить процесс использовать не все процессоры, а только определенные? Для этого в SMP существует понятие "CPU Affinity Mask".
Для этого существует утилита taskset, входящая либо в пакет util-linux, либо schedutil.
заставит команду использовать только 1-й процессор системы
Вместо битовой маски можно использовать и просто список процессоров, а используя ключ -p - менять маску для уже запущенных процессов:
Суть его - как заставить процесс использовать не все процессоры, а только определенные? Для этого в SMP существует понятие "CPU Affinity Mask".
Для этого существует утилита taskset, входящая либо в пакет util-linux, либо schedutil.
taskset 0x00000001 command
заставит команду использовать только 1-й процессор системы
Вместо битовой маски можно использовать и просто список процессоров, а используя ключ -p - менять маску для уже запущенных процессов:
taskset -c 0,3 -p 12345
среда, 21 мая 2008 г.
Как не терять историю команд?
Часто бывает, что мы пользуемся шеллом одновременно из нескольких открытых окон терминала. При этом не менее часто бывает, что удобную и длинную команду из истории шелла из одного терминала случайно затерла история шелла из другого терминала. Избежать этого может помочь добавление следующих строк в .bashrc:
Первая опция заставляет шелл не перезаписывать файл истории, а добавлять записи в него. Вторая команда будет вызывать добавление содержимого истории в файл и перечитывание файла истории сразу при выводе приглашения командной строки, а не после выхода из шелла.
("Кросспост" с Полезные советы по Linux)
shopt -s histappend
PROMPT_COMMAND='history -a; history -n'
Первая опция заставляет шелл не перезаписывать файл истории, а добавлять записи в него. Вторая команда будет вызывать добавление содержимого истории в файл и перечитывание файла истории сразу при выводе приглашения командной строки, а не после выхода из шелла.
("Кросспост" с Полезные советы по Linux)
суббота, 10 мая 2008 г.
X.org 7.3, Debian Sid и клавиатура
После aptitude upgrade неожиданно обнаружил, что в иксах перестали работать старые комбинации клавиш (Ctrl-Alt-F1, например, гг). В поисках проблемы наткнулся на пакет xkb-data-legacy, который заменяет новый xkb-data - это решает проблему.
Но позже adjkerntz с #linux подсказал, в чем проблема - дело в том что вариант winkeys из новой версии xkb-data убрали, поэтому XkbVariant из конфига надо убирать.
Итак, я снова установил xkb-data и стер ",winkeys" из конфига xorg.conf - и полет нормальный!
Но позже adjkerntz с #linux подсказал, в чем проблема - дело в том что вариант winkeys из новой версии xkb-data убрали, поэтому XkbVariant из конфига надо убирать.
Итак, я снова установил xkb-data и стер ",winkeys" из конфига xorg.conf - и полет нормальный!
суббота, 26 апреля 2008 г.
Excel, сетевые принтеры и тормоза
Как ни странно, жалобу пользователя на "долго открывается Excel" пришлось решать именно с помощью Wireshark. Ибо задержки, примерно похожие на ожидание таймаута ARP =)... как-то связаны обычно с сетью.
А что же делает Excel при запуске? Оно зачем-то лезет за сетевыми принтерами. И если эти принтеры находятся на недоступном сервере, он исключительно противно тормозит при запуске. Вот так все просто. Как лечить без удаления принтеров - пока не знаю.
А что же делает Excel при запуске? Оно зачем-то лезет за сетевыми принтерами. И если эти принтеры находятся на недоступном сервере, он исключительно противно тормозит при запуске. Вот так все просто. Как лечить без удаления принтеров - пока не знаю.
четверг, 3 апреля 2008 г.
О туннелях в linux
Те, кто все-таки читал Linux Advanced Routing and Traffic Control HOWTO знают, что с помощью ip tunnel add можно создать ipip, gre или sit туннель. Но вчера случайно возник вопрос:
Но:
Да и вообще странно, что его нельзя удалить:
То же самое можно заметить, если вы создали ipip-туннель с именем tunl0, или sit-туннель с именем sit0.
Да, можно гуглить по этой ошибке. Скорее всего ответ вы найдете только в этой статье, если будете искать ответ на вопрос "как удалить tunl0".
Вот, ответ - по крайней мере до 2.6.22 (выше не проверял) - удалять туннели с именами tunl0, gre0, sit0 не удается.
Если почитать документацию к iproute2, можно заметить, что эти туннели называются "base devices". Это специальные устройства, у которых remote и local адреса устанавливаются в "any", и это конечный пункт для туннелированных пакетов, если они не попадают в критерии другого туннеля.
Туннель с другим именем с remote any local any создать нельзя. Нет, система не ругается, но туннель просто не создаст:
Но если указать хотя-бы один адрес - ради бога, вот он:
Да, и такой туннель легко удаляется:
Полный ответ на этот вопрос есть в исходных кодах модулей ядра, которые и включают поддержку туннелирования. Откроем, например, net/ipv4/ip_gre.c.
В нем есть вот такие вот строки:
Вот это вот и есть gre0 устройство, которое создается при инициализации модуля:
(в __init)
Причем в функциях конфигурирования и удаления туннелей мы заметим особые случаи попыток удаления и перенастройки этого fallback tunnel, которые и вызывают появление ошибки ioctl:Operation is not permitted:
Как раз где-то тут оно и намеренно выдает эту ошибку.
P.S. Ничего страшного в том что туннель останется, нет.
dpmmsrv:/home/stasikos# ip tun add gre0 local 192.168.20.250
ioctl: No buffer space available
Но:
dpmmsrv:/home/stasikos# ip tun sh
gre0: gre/ip remote any local any ttl inherit nopmtudisc
Да и вообще странно, что его нельзя удалить:
dpmmsrv:/home/stasikos# ip tun del gre0
ioctl: Operation not permitted
То же самое можно заметить, если вы создали ipip-туннель с именем tunl0, или sit-туннель с именем sit0.
Да, можно гуглить по этой ошибке. Скорее всего ответ вы найдете только в этой статье, если будете искать ответ на вопрос "как удалить tunl0".
Вот, ответ - по крайней мере до 2.6.22 (выше не проверял) - удалять туннели с именами tunl0, gre0, sit0 не удается.
Если почитать документацию к iproute2, можно заметить, что эти туннели называются "base devices". Это специальные устройства, у которых remote и local адреса устанавливаются в "any", и это конечный пункт для туннелированных пакетов, если они не попадают в критерии другого туннеля.
Туннель с другим именем с remote any local any создать нельзя. Нет, система не ругается, но туннель просто не создаст:
dpmmsrv:/home/stasikos# ip tun add gre1
dpmmsrv:/home/stasikos# ip tun sh gre1
ioctl: No such device
Но если указать хотя-бы один адрес - ради бога, вот он:
dpmmsrv:/home/stasikos# ip tun add gre1 local 192.168.20.250
dpmmsrv:/home/stasikos# ip tun sh gre1
gre1: gre/ip remote any local 192.168.20.250 ttl inherit
Да, и такой туннель легко удаляется:
dpmmsrv:/home/stasikos# ip tun del gre1
dpmmsrv:/home/stasikos# ip tun sh gre1
ioctl: No such device
Полный ответ на этот вопрос есть в исходных кодах модулей ядра, которые и включают поддержку туннелирования. Откроем, например, net/ipv4/ip_gre.c.
В нем есть вот такие вот строки:
/* Fallback tunnel: no source, no destination, no key, no options */
static int ipgre_fb_tunnel_init(struct net_device *dev);Вот это вот и есть gre0 устройство, которое создается при инициализации модуля:
(в __init)
ipgre_fb_tunnel_dev = alloc_netdev(sizeof(struct ip_tunnel), "gre0",
ipgre_tunnel_setup);
Причем в функциях конфигурирования и удаления туннелей мы заметим особые случаи попыток удаления и перенастройки этого fallback tunnel, которые и вызывают появление ошибки ioctl:Operation is not permitted:
case SIOCDELTUNNEL:
err = -EPERM;
if (!capable(CAP_NET_ADMIN))
goto done;
if (dev == ipgre_fb_tunnel_dev) {
err = -EFAULT;
if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p
)))
goto done;
err = -ENOENT;
if ((t = ipgre_tunnel_locate(&p, 0)) == NULL)
goto done;
err = -EPERM;
if (t == ipgre_fb_tunnel_dev->priv)
goto done;
dev = t->dev;
}
err = unregister_netdevice(dev);
break;
Как раз где-то тут оно и намеренно выдает эту ошибку.
P.S. Ничего страшного в том что туннель останется, нет.
Подписаться на:
Сообщения (Atom)