LINUX.ORG.RU

Избранные сообщения macumazan

Автомонтирование, рвать его мать

Форум — General

Хочу настроить автомонтирование usb накопителей(флешек). Погуглил немного, и создал такое правило для eudev:

/etc/udev/rules.d/automount.rules

KERNEL!="sd[c-z]*", GOTO="automount_end"

ACTION=="add", ENV{DEVTYPE}=="partition", RUN+="/usr/bin/udisksctl mount -b %N"
ACTION=="remove", ENV{DEVTYPE}=="partition", RUN+="/usr/bin/udisksctl unmount -b %N"

LABEL="automount_end"

Оно срабатывает только один раз - после перезапуска eudev /etc/init.d/udev restart. Дальше автомонтирование перестаёт работать, udisksctl выдаёт такую ошибку:

Error looking up object for device /dev/sde1

 , ,

neversleep
()

верификация конфига ядра

Форум — Desktop

суть в том, чтобы после переконфигурации ядра portage его провалидировал с учетом установленных пакетов. чтото типа:

1. ставлю, например, systemd

2. systemd говорит, что в ядре нужно включить CONFIG_ЧТОТОТАМ

3. лезу в nconfig, включаю CONFIG_ЧТОТОТАМ

4. ставлю systemd, все ок

5. через месяц, напрочь забывая про необходимость CONFIG_ЧТОТОТАМ, лезу в конфиг ядра и выключаю ее

можно ли после шага 5 как-то прогнать по установленным пакетам portage, чтобы тот ругнулся на несоответствие?

 , ,

x0r
()

systemd-networkd возвращает к дефолтной конфигурацию сети каждые несколько минут

Форум — Admin

Сеть у меня настраивается через systemd-networkd (статические настройки). При нерабочем одном канале инета я меняю скриптом метрики маршрутов, таким образом переключаюсь на другой канал.

Раньше это работало. Но вот с недавних пор почему-то systemd-networkd через каждые несколько минут начинает возвращать метрики к значениям, которые прописанные в конфиге.

root@xxx# systemctl status systemd-networkd
● systemd-networkd.service - Network Service
   Loaded: loaded (/usr/lib64/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since пт 2015-06-19 02:16:01 EEST; 13s ago
     Docs: man:systemd-networkd.service(8)
  Process: 2985 ExecStart=/usr/lib/systemd/systemd-networkd (code=exited, status=0/SUCCESS)
 Main PID: 2985 (code=exited, status=0/SUCCESS)
   Status: "Shutting down..."

чер 19 02:15:31 andromeda systemd[1]: Starting Network Service...
чер 19 02:15:31 andromeda systemd-networkd[2985]: Enumeration completed
чер 19 02:15:31 andromeda systemd[1]: Started Network Service.
чер 19 02:15:31 andromeda systemd-networkd[2985]: enp3s0: Configured
чер 19 02:15:31 andromeda systemd-networkd[2985]: enp5s6: Configured
Видно, что systemd-networkd почему-то перезапускался. Почему? Как это отключить? Мне достаточно единократного запуска.

Или есть systemd-way для смены конфигурации сети на лету?

 

Chaser_Andrey
()

Раздать внешний IPv6 в нутри локалки

Форум — Admin

И так, имеем локальную сеть. Сейчас все компу в ней получают серые IPv6, которые выходят через nat6. Подключил he6, дали внешку. Я распредилил её по узлам, на клиентах прописал руками.

Вот подсети:

серая - fd00:1002:1289:4::/64
внешка - 2001:470:7b2c:2::/64

Серая раздаётся через radvd - не жалко Вторую надо раздать так:

2001:470:7b2c:2::1/128 - пк
2001:470:7b2c:2::2/128 - ноутбук

как это можно сделать с помощью radvd

 , , ,

ne-vlezay
()

InnoDB не умеет сдуваться?

Форум — Admin

Была БД 10 МБ, раздулась до 10 ГБ, потом уменьшилась до 200 МБ - но на диске имеем все те же 10 ГБ. Как ее сдуть? Или механизм Innodb предполагает «ниппельную» систему? mysqldump не предлагать.

Перемещено leave из general

 ,

int13h
()

Анонс расширения VecTcl

Новости — Open Source
Группа Open Source

На конференции EuroTcl 2014 широкой публике было представлено расширение VecTcl, добавляющее в стандартный Tcl новый тип данных — числовые массивы и включающее в себя средства для эффективной работы с ними.

Это расширение предназначается для выполнения инженерных вычислений и является аналогом NumPy+SciPy в Python, PDL в Perl (напомню, что в Perl6 подобные массивы поддерживаются на уровне языка), языков APL, J, K, R.

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

Пример кода:

set x { 1 2 3 }
set A {{1.0 2.0 3.0} {4.0 5.0 6.0} {7.0 8.0 9.0}}
vexpr { A*x }
# 14.0 32.0 50.0

Здесь необходимо отметить, что имена переменных в теле vexpr не имеют сигила $.

Расширение пока что имеет версию 0.1.7alpha и распространяется в виде исходных кодов, бинарных архивов и старкита/старпака.

Здесь можно почитать презентацию с EuroTcl.

>>> Официальный сайт

 ,

buddhist
()

Бридж через GRE туннель

Форум — Admin

Есть debian wheezy и cisco (несколько) Требуется поднять между сервером и цисками gre туннели и объединить их логически в один влан. Для этого натсроил GRE туннель подобным образом:

auto tun2
iface tun2 inet manual
       pre-up iptunnel add tun2 mode gre remote 8.8.8.8 local 9.9.9.9 ttl 255

В результате имею gre интерейс в котором дампом видны пакеты, который приходят «с той» стороны:

root@lb2:~# ip tunnel show
gre0: gre/ip  remote any  local any  ttl inherit  nopmtudisc
tun2: gre/ip  remote 8.8.8.8  local 9.9.9.9 ttl 255 

Т е интерфейс поднят и все ок. Далее - пытаюсь сделать бридж и получаю ошибку:

root@lb2:~# brctl addbr br1   
root@lb2:~# brctl addif br1 tun2
can't add tun2 to bridge br1: Invalid argument
root@lb2:~# brctl show       
bridge name     bridge id               STP enabled     interfaces
br1             8000.000000000000       no
При этом добавление физического интерфейса проходит без проблем.

Поиск по поисковникам не помог найти ответ - поэтому прошу помощи здесь. Что это такое и как исправить?

 , , , ,

zorruch
()

Помогите плз завести NUT с Powercom

Форум — Admin

Есть UPS Powercom Smart King PRO 500A:

> sudo lsusb 
Bus 004 Device 003: ID 0d9f:00a2 Powercom Co., Ltd Imperial Uninterruptible Power Supply (HID PDC)
Bus 004 Device 004: ID 0d9f:00a3 Powercom Co., Ltd Smart King PRO Uninterruptible Power Supply (HID PDC)

Nut версии 2.7.2 под Debian Wheezy (nut - бэкпорт из sid).

Никак не получается завести UPS SKP-500. Параллельно подключен Powercom Imperial - он работает, SKP-500 под Windows работает (виден в системе как HID и в Powercom'овской софтине тоже виден). Один раз как-то получилось его запустить с nut, но я начал играться настройками ups'а и он почему-то отвалился.

ups.conf

maxretry = 3

[server-ups]
driver = usbhid-ups
port = auto
productid = 00a2

[current-ups]
driver = usbhid-ups
port = auto
productid = 00a3

При запуске выдаёт такую ошибку:

> sudo upsdrvctl -u root start current-ups
Network UPS Tools - UPS driver controller 2.7.2
Network UPS Tools - Generic HID driver 0.38 (2.7.2)
USB communication driver 0.32
No matching HID UPS found
Driver failed to start (exit status=1)
Network UPS Tools - Generic HID driver 0.38 (2.7.2)
USB communication driver 0.32
No matching HID UPS found
Driver failed to start (exit status=1)
Network UPS Tools - Generic HID driver 0.38 (2.7.2)
USB communication driver 0.32
No matching HID UPS found
Driver failed to start (exit status=1)

 ,

SaBo
()

tcpdump && TCP connection establishment && SYN_RECV state

Форум — Development

На сервере develop у меня стоит apache.
Делаю telnet на 80 порт, немного жду и закрываю соединение 
вообще без передачи каких-либо данных.

olimpico_work ~ # telnet develop 80
Trying 192.168.70.201...
Connected to develop.
Escape character is '^]'.
^]quit

telnet> quit
Connection closed.
olimpico_work ~ # 


Вот что показывает при этом tcpdump на клиентской стороне:

olimpico_work ~ # tcpdump -i eth1 host develop and port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
11:23:44.187263 IP krivenok.41234 > develop.http: S 2779819717:2779819717(0) win 5840 <mss 1460,sackOK,timestamp 1348338 0,nop,wscale 7>
11:23:44.187387 IP develop.http > krivenok.41234: S 107518013:107518013(0) ack 2779819718 win 5792 <mss 1460,sackOK,timestamp 15521524 1348338,nop,wscale 2>
11:23:44.187423 IP krivenok.41234 > develop.http: . ack 1 win 46 <nop,nop,timestamp 1348338 15521524>


11:23:57.346185 IP krivenok.41234 > develop.http: F 1:1(0) ack 1 win 46 <nop,nop,timestamp 1349652 15521524>
11:23:57.346368 IP develop.http > krivenok.41234: F 1:1(0) ack 2 win 1448 <nop,nop,timestamp 15524815 1349652>
11:23:57.346405 IP krivenok.41234 > develop.http: . ack 2 win 46 <nop,nop,timestamp 1349652 15524815>

6 packets captured
6 packets received by filter
0 packets dropped by kernel
olimpico_work ~ # 


Вроде все правильно и логично - сначала 3-этапное установление
соединения, а затем его завершение.

При этом на сервере develop видел, что соединение установлено:

develop ~ # netstat -na | grep "70.198" | grep 80 
tcp        0      0 192.168.70.201:80       192.168.70.198:41234    ESTABLISHED 
develop ~ # 

Пока все хорошо.


А теперь делаем то же самое с сервером develop2 на котором тоже
стоит apache.

olimpico_work ~ # telnet develop2 80
Trying 192.168.70.205...
Connected to develop2.
Escape character is '^]'.
^]quit

telnet> quit
Connection closed.
olimpico_work ~ # 

Вот что показывает tcpdump:

olimpico_work ~ # tcpdump -i eth1 host develop2 and port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
11:30:53.644916 IP krivenok.49819 > develop2.http: S 2776473031:2776473031(0) win 5840 <mss 1460,sackOK,timestamp 1391155 0,nop,wscale 7>
11:30:53.645069 IP develop2.http > krivenok.49819: S 874752337:874752337(0) ack 2776473032 win 5792 <mss 1460,sackOK,timestamp 6177317 1391155,nop,wscale 7>
11:30:53.645104 IP krivenok.49819 > develop2.http: . ack 1 win 46 <nop,nop,timestamp 1391155 6177317>
11:30:57.245167 IP develop2.http > krivenok.49819: S 874752337:874752337(0) ack 2776473032 win 5792 <mss 1460,sackOK,timestamp 6177677 1391155,nop,wscale 7>
11:30:57.245214 IP krivenok.49819 > develop2.http: . ack 1 win 46 <nop,nop,timestamp 1391515 6177677,nop,nop,sack 1 {0:1}>
11:31:03.247796 IP develop2.http > krivenok.49819: S 874752337:874752337(0) ack 2776473032 win 5792 <mss 1460,sackOK,timestamp 6178277 1391515,nop,wscale 7>
11:31:03.247837 IP krivenok.49819 > develop2.http: . ack 1 win 46 <nop,nop,timestamp 1392114 6178277,nop,nop,sack 1 {0:1}>
11:31:15.255559 IP develop2.http > krivenok.49819: S 874752337:874752337(0) ack 2776473032 win 5792 <mss 1460,sackOK,timestamp 6179477 1392114,nop,wscale 7>
11:31:15.255603 IP krivenok.49819 > develop2.http: . ack 1 win 46 <nop,nop,timestamp 1393312 6179477,nop,nop,sack 1 {0:1}>
11:31:39.466169 IP develop2.http > krivenok.49819: S 874752337:874752337(0) ack 2776473032 win 5792 <mss 1460,sackOK,timestamp 6181897 1393312,nop,wscale 7>
11:31:39.466216 IP krivenok.49819 > develop2.http: . ack 1 win 46 <nop,nop,timestamp 1395728 6181897,nop,nop,sack 1 {0:1}>


11:31:46.678079 IP krivenok.49819 > develop2.http: F 1:1(0) ack 1 win 46 <nop,nop,timestamp 1396448 6181897>
11:31:46.678314 IP develop2.http > krivenok.49819: F 1:1(0) ack 2 win 46 <nop,nop,timestamp 6182618 1396448>
11:31:46.678353 IP krivenok.49819 > develop2.http: . ack 2 win 46 <nop,nop,timestamp 1396448 6182618>

14 packets captured
14 packets received by filter
0 packets dropped by kernel
olimpico_work ~ # 


При этом если смотреть на сервере, то соединение находится 
в состоянии SYNC_RECV:

develop2 EQ-scripts # netstat -na | grep "70.198" | grep 80
tcp        0      0 192.168.70.205:80       192.168.70.198:49819    SYN_RECV   
develop2 EQ-scripts # 


То есть обмен пакетов следующий:
-> SYN  
<- SYN/ACK
-> ACK
<- SYN/ACK
-> ACK
<- SYN/ACK
-> ACK
...
...

Насколько я понимаю состояние SYN_RECV говорит о том, что
получен SYN и отправлен SYN/ACK.
После получения ACK на SYN/ACK соединение должно перейти
из SYN_RECV в ESTABLISHED.
Но этого не происходит.
Такое ощущение, что TCP сервера вообще не получает последний
ACK и поэтому постоянно перепосылает SYN/ACK клиенту.
На что клиент честно отвечает ACK'ом как показано выше.

В чем может быть проблема?

P.S.

Я запустил tcpdump и на сервере (все то же самое, только
номера эфемерных портов другие):

develop2 EQ-scripts # tcpdump -i eth0 host 192.168.70.198 and port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
11:44:40.458868 IP krivenok.internal.44560 > develop2.http: S 896196718:896196718(0) win 5840 <mss 1460,sackOK,timestamp 1473788 0,nop,wscale 7>
11:44:40.461384 IP develop2.http > krivenok.internal.44560: S 959167485:959167485(0) ack 896196719 win 5792 <mss 1460,sackOK,timestamp 6260093 1473788,nop,wscale 7>
11:44:40.459054 IP krivenok.internal.44560 > develop2.http: . ack 1 win 46 <nop,nop,timestamp 1473788 6260093>
11:44:44.255015 IP develop2.http > krivenok.internal.44560: S 959167485:959167485(0) ack 896196719 win 5792 <mss 1460,sackOK,timestamp 6260473 1473788,nop,wscale 7>
11:44:44.255231 IP krivenok.internal.44560 > develop2.http: . ack 1 win 46 <nop,nop,timestamp 1474167 6260473,nop,nop,sack 1 {0:1}>
11:44:50.257519 IP develop2.http > krivenok.internal.44560: S 959167485:959167485(0) ack 896196719 win 5792 <mss 1460,sackOK,timestamp 6261073 1474167,nop,wscale 7>
11:44:50.257738 IP krivenok.internal.44560 > develop2.http: . ack 1 win 46 <nop,nop,timestamp 1474766 6261073,nop,nop,sack 1 {0:1}>
11:45:03.592464 IP develop2.http > krivenok.internal.44560: S 959167485:959167485(0) ack 896196719 win 5792 <mss 1460,sackOK,timestamp 6262273 1474766,nop,wscale 7>
11:45:03.592679 IP krivenok.internal.44560 > develop2.http: . ack 1 win 46 <nop,nop,timestamp 1475963 6262273,nop,nop,sack 1 {0:1}>
11:45:27.794962 IP develop2.http > krivenok.internal.44560: S 959167485:959167485(0) ack 896196719 win 5792 <mss 1460,sackOK,timestamp 6264693 1475963,nop,wscale 7>
11:45:27.795178 IP krivenok.internal.44560 > develop2.http: . ack 1 win 46 <nop,nop,timestamp 1478379 6264693,nop,nop,sack 1 {0:1}>
11:45:38.087399 IP krivenok.internal.44560 > develop2.http: F 1:1(0) ack 1 win 46 <nop,nop,timestamp 1479406 6264693>
11:45:38.087487 IP develop2.http > krivenok.internal.44560: F 1:1(0) ack 2 win 46 <nop,nop,timestamp 6265722 1479406>
11:45:38.087688 IP krivenok.internal.44560 > develop2.http: . ack 2 win 46 <nop,nop,timestamp 1479406 6265722>
^C
14 packets captured
38 packets received by filter
0 packets dropped by kernel
develop2 EQ-scripts # 


Видно, что ACK приходит.

>>>

Krivenok_Dmitry
()

Slim + i3 не взлюбили друг друга

Форум — Desktop

Fedora 17. Стоял у меня i3, жил не тужил, но меня дико бесил GDM (дефолтный в федорке). Стартовал в пять раз дольше чем i3, выглядел как говн^W^Wгномотри, короче, не нравился он мне. Установил слим, в /etc/sysconfig/desktop прописал

 DISPLAYMANAGER=/usr/bin/slim 
По дефолту, после логина, стартует gnome 3, поэтому я создал .xinitrc, и записал в него следующее:
#!/bin/sh

exec i3
После чего i3 стартанул. Еще как стартанул. В качестве заставка рабочего стола установилась синяя билиберда из бэкграунда слима, похерились все шрифты, мало того, наполовину кокнулся терминал (urxvt) - у него пропала прозрачность, частично цветовая гамма, и тоже шрифты. Самое интересное - мои .Xdefaults, .fonts, .3/config тронуты не были. Куда копать, что смотреть?

 , , ,

MyNameIsWinner
()

получить уникальный идентификатор машины

Форум — Admin

Постоянно использую один внешний hdd, загружая с него Linux систему на разных машинах. Хочу написать скрипт для автоматизации рутинных действий по индивидуальной настройке hardware с вызовом разных программ для разных машин.

Т.е. напр.
If (Home)
cp /etc/X11/xorg-home.conf. /etc/X11/xorg.conf

if (Notebook)
/etc/init.d/wpa_supplicant start
и т.п

Вот только как отличать друг от друга различные компьютеры в скрипте? Нужен уникальный идентификатор машины.
По смыслу подошел бы например серийный номер. мат. платы, процессора или что-то в этом духе, но как получить эту информацию в скрипте я не знаю.
Думал про легко доступные вещи типа MAС-адреса сетевых карточек и серийников hdd но это будет не очень надежно (сетевух может быть много, hdd может поменяться и тп.).
Есть ли ещё какие-то доступные из скрипта id, которые можно использовать в качестве уникального идентификатора машины?

 

Dblmok
()

USBFS — из ядра убирают, что что взамен?

Форум — Linux-hardware

Итак, имеется Ubuntu Server 10.04. Возникла необходимость использовать электронный ключ usb Eutron InfoSecuritu. Всё бы ничего, да драйверу, который его обслуживает (закрытая разработка) для корректной работы необходима файловая система usbfs.

Пока что выхода всего лишь вижу 2: пересборка каждого ядра или откат на последнее ядро, где ещё поддержку не перевели в DEPRECATED (2.6.31-10, к примеру).

Но тогда возникает целый ряд вопросов о безопасности, обновлениях и прочем. И, самый главный: если usbfs выкинули (или, что более точно, пока планируют выкинуть) из ядра, то что совместимое осталось?

Гугл рыл, инфы по данному вопросу не сильно много. Прощу помощи.

HEXen
()

Актуальность tcl сегодня

Форум — Development

Стоит ли сегодня изучать tcl? Предполагается использовать для небольших системных скриптов, ну и небольших, но полезных утилиток для личного пользования.

>>>

anonymous
()

Аналог & в Tcl

Форум — Development

В bash есть & для выполнения в фоне. А что есть в Tcl?

>>>

anonymous
()

[hint] Linux bridge & multicast

Форум — Admin

Если у вас как-то странно работает мультикаст* через линуксовый мост (который поднимается brctl'ом) попробуйте выключить multicast snooping:

echo 0 >/sys/devices/virtual/net/$BRIDGE/bridge/multicast_snooping
* Особенно если приложение, принимающее мультикастовые пакеты, висит на интерфейсе моста и должно принимать данные именно с него.

Deleted
()

Самый лучший язык для скриптов: Tcl?

Форум — Development

Кратко: Я немного сравнивал разные языки и выбрал Tcl, при дальнейшем изучении не разочаровался.

А какие языки вы используете для задач средней сложности — тех что не требуют эпохальных тяжеловесных программ, но и не решаются тривиально пайпом из трёх-пяти команд в баше? Средняя сложность — это что-то порядка от 3-5 до 3-5 тысяч строк кода (смотря какой язык). Такие где разбиение программы на отдельные модули, хранимые в разных файлах ещё не требуется.

Длинно. Почему я выбрал Tcl.

Долгое время я писал на bash. Это неплохой язык, к тому же он достаточно выразительный, чтоб делать что угодно без вызова внешних программ и в таком случае производительность получается вполне на уровне.

Но у bash есть проблемы. Основная из которых — многие выражения (в частности пайпы) выполняются в субшелле, а из субшелла почти невозможно передать информацию в материнский иначе через stdout. Ещё одной проблемой является постоянная сериализация-десериализация объектов. Это уже не настолько важно, но всё-таки хотелось бы от этого по возможности избавиться.

То же самое касается других стандартных языков UNIX: dc, bc, sed, m4, awk, ... На последнем, впрочем, наверное, можно писать и нормальные программы, но синтаксис у него не очень красивый и возможностей не так уж много. Это хорошие языки, очень хорошие в своей области, но имеют ограниченную область применения.

Я уже знаю C и несколько других императивных языков, но если нужно что-то быстро посчитать или сделать, эти языки малопригодны — в том же C даже сравнить строки просто так нельзя, нужна специальная функция, кроме того нужно вручную рулить памятью. Pascal крайне беден в экспрессивном плане, а begin / end — это уродливо, так что лучше уж C. Basic уже мёртвый, да к тому же ещё более убог чем паскаль. C++ крайне сложен для изучения, а профита по сравнению с C почти никакого.

Таким образом, стало ясно, что мне нужно изучить какой-то другой язык. Так как язык требуется для того, чтоб быстро решить какую-то задачу, а не писать оптимизированное решение на века, стало ясно, что нужен один из динамических языков общего назначения: Perl, Python, PHP, Ruby, Tcl, Lua или какой-то другой.

Я выбрал Tcl.

1. PHP не подходит сразу, на нём только веб-странички хорошо писать, а всё остальное лучше в Perl (да и про страницы можно поспорить, если нужно чёткое разделение контента, стилей и логики).

1. На Perl, Python и Ruby множество сложных синтаксических конструкций, которые без поллитра не разберёшь, например (python):

_='_=%r;print _%%_';print _%_

2. Lua: простой язык, код на нём быстрый, изучить тоже можно довольно быстро. Но однако на каждый чих нужна либа. Даже работы с юникодом изкоробки нет (в смысле строку можно прочитать и вывести, но нельзя посчитать кол-во символ или заменить подстроку и тд).

3. Tcl: крайне простой синтаксис: 12 правил и man-ы по всем используемым командам достаточно для для понимания любого кода. При этом богатая стандартная библиотека, хорошая интеграция с Tk и кроссплатформенность.

То есть на Tcl можно решить любую задачу почти так же просто как на баше (да в крайнем случае даже пайпы есть), но при этом синтаксис гораздо более предсказуем.

Плюс на Tcl можно писать графические приложения так же легко как и консольные, например вот такой код в 10 строк — это уже целая работающая игра! Правда автор явно экономил строки, и читаемость кода из-за этого несколько страдает. Кроме того, Tcl поддерживает (особенно с 8.6) функциональное программирование и длинные числа изкоробки. Так что переход с bc, который только их и использует будет проще. Ещё мне очень нравится, что ключевых слов в этом языке нет. Вообще. Те же for / if и другие — это просто такие команды, которые берут условие и фрагмент и его исполняют. Можно запросто объявить процедуру for, которая будет использовать другой синтаксис итератора и далее использовать её, если так удобней. Язык динамически типизированный, как и другие скриптовые, но проблем из за этого не возникает. Если переменная используется внутри expr, то она интерпретируется как число. Если в команде string ... на месте строки — строка и тд. Никаких сомнительных x=«10»+10 Работа с переменными похожа на такую в bash, что тоже плюс: при присваивании переменной знак $ не ставится, а при извлечении из неё значения ставится:

set i 10 # i:=10
puts $i ;# будет выведено 10
incr i ;# i теперь 11
puts [expr [set i]+3] ;# set можно использовать вместо $i или ${i}\
так как при отсутствии третьего аргумента он просто возвращает значение.\
Ещё это один из немногих способов двойной подстановки.

4. Что-то другое. А что собственно? Пока только идёт в голову что-то лиспоподобное (например: clisp (scheme (или racket guile))), APL-подобное: J, K (есть свободная Kona), APL и тд или конкатенативное (dc-подобное): forth, factor...

Из 2, 3, 4 выбрал всё-таки Tcl, потому что синтаксис у него хоть и не стандартный для императивных языков, но похож на привычный шелловский и он есть в GNU/Linux изкоробки или в репозитории, так что не придётся заморачиваться ручной сборкой.

Уже начал изучать, почти всё нравится, кроме необходимости писать всё время expr и set, всё-таки такие частые операции можно было бы и сделать частью синтаксиса, хоть и немного в ущерб единообразию.

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

Учить его действительно легко, так как базовый синтаксис простой, а команды можно изучать по мере надобности, к тому же man к командам Tcl снабжен сносками на команды с похожим назначением, так что поняв, что команда — это не то, что надо, можно посмотреть все остальные и найти наиболее подходящую.

Таким образом, язык сочетает достоинства лиспа — гибкость, функциональщину и простоту базового синтаксиса и достоинства других скриптовых языков — более привычную инфиксную нотацию для арифметики и читаемый код.

 , , , ,

Xenius
()

управление cgroups в release notify agent

Форум — Development

Здравствуйте у меня вопрос, при использовании cgroups возможно добавлять свой release notify agent (простой баш скрипт), вопрос, существуют ли ограничения на возможности этого скрипта. Т.к. я заметил, что я не могу перенести процесс (и прочие процессы отфоркивающиеся от него) в не root цгруппу в любом контроллере. При этом не ясно почему, поскольку данный процесс в ps выглядит как обычный, у него не realtime scheduler (т.к. у меня в ядре нет поддержки cgroups для realtime процессов). Сам же lock на цгруппы снимается при запуске скрипта, и потом выставляется назад.

Есть ли у кого-нибудь идеи как отлаживать данную ситуацию.

Я конечно могу обойти этот вопрос, но это портебует наличия userspace демона, что хотелось бы обойти.

 ,

qnikst
()

Поймать все подшаблоны

Форум — Development

Допустим есть у меня некоторое неизвестное заранее регулярное выражение и строка, в которую надо подставить все совпадения из этой регулярки по индексам. К примеру:

set str "l:12:a41:low-roze"
set rgxp "^l:([0-9]+):([0-9a-z]+):low-([a-z]+)"
set result "nui=$1 an_dg=$2 run=$3"

...

# тут result должен быть таким "nui=12 an_dg=a41 run=roze"
Как? Имеется ввиду как это сделать красиво и быстро, а не вообще как. Всякие разборы в циклах городить не хочется. Ограничивать $rgxp в количестве подшаблонов тоже нельзя. Можно конечно написать что-то типа:
set str "l:12:a41:low-roze"
set rgxp "^l:([0-9]+):([0-9a-z]+):low-([a-z]+)"
set result "nui=$1 an_dg=$2 run=$3"

regexp -- $rgxp $str result result1 result2 ... result1000

# тут result должен быть таким "nui=12 an_dg=a41 run=roze"
Тем самым покрыв любое разумное количество подшаблонов в $rgxp, но сие совсем уж уродливо.

Хотеть какой-нибудь параметр типа -aslist чтобы что-то вроде regexp -aslist — $rgxp $str result resultL сгружало все подшаблоны в resultL как в список, но нет же (((

 ,

Suntechnic
()

OpenLDAP + openssh

Форум — Admin

В общем есть задача: надо настроить openldap, чтобы можно было через него шла авторизация по ssh, и в его базе хранились бы ssh-ключи. Дистр Scientific Linux 6.4, сам openldap поставил, настроил, поставил пакет openssh-lpk. Только вот дальше не пойду как теперь добавить схему с openssh-lpk через ldapadd, может есть у кого опыт? поделитесь, если не сложно.

 , , openssh-lpk

reddaemon
()

postfix не-sasl аутентификация

Форум — Admin

Добрый вечер.
Задался целью настроить postfix так, чтобы он сам аутентифицировал пользователей. Однако во всех мануалах показано как делать аутентификацию через sasl (cyrus или dovecot).
Возможно ли обойтись без sasl? Курю документацию, но пока толку мало. Киньте, пожалуйста, в меня параметрами конфига, чтобы уже по ним найти конкретику.

Stage1
()