LINUX.ORG.RU

Сообщения intelfx

 

Использование 6to4 c динамическим внешним IPv4-адресом

Приветствую.

Решил развлечения ради поднять IPv6 у себя дома и в общежитии. Отличительной особенностью нашего МФТИ-телекома является то, что они раздают всем настоящие «белые» IPv4-адреса — но адреса эти динамические, и они действительно имеют свойство меняться. У моего домашнего провайдера то же самое, но там выдаваемый адрес меняется весьма редко (три раза за последние два года).

Отсюда вопросы:

  1. Можно ли использовать такие адреса для 6to4 (который с anycast-адресом 192.88.99.1)?
  2. Если можно, то какие неочевидные грабли/проблемы я встречу (то, что префикс нужно будет менять lease-скриптом — это грабли очевидные)?
  3. Есть ли какой-либо механизм форсировать выдачу новых IPv6-адресов при смене IPv4-адреса, или же в такой ситуации все узлы окажутся экскоммуницированными до тех пор, пока у них не истечёт время действия выданного адреса?
  4. Если нет, то приемлемо ли задать очень низкое время жизни выданного адреса (типа одной минуты), или же что-то отвалится?

Истории успеха и советы по настройке (OpenWRT/Mikrotik) также приветствуются.

 , , , ,

intelfx
()

Ядро 4.10-pf с планировщиком MuQSS — постоянный жор CPU или ошибка индикации (LA >= 1)

post-factum, у меня ядро 4.10-pf4 (e869f122, верхушка pf-4.10) со включенным MuQSS приводит к индикации постоянного жора 1 ядра CPU (не какого-то конкретного, а суммарно, т. е. LA >= 1). Конкретного жрущего процесса тоже нет. Отключение MuQSS решает проблему.

Потребление энергии при этом тоже возросло (на 2-3W), но не настолько, сколько отняло бы на моём железе одно действительно постоянно работающее ядро. Других свидетельств того, что это реальный жор, а не ошибка индикации, у меня нет, т. е. производительность не замерял.

Железо — ThinkPad T540p (i7-4700MQ). Конфиг ядра здесь.

 ,

intelfx
()

Низкая производительность (особенно TCP send) от QCA6174 (Killer 1535) к QCA9880 (Mikrotik wAP ac)

Приветствую.

Я не знаю, где этому треду большее место — в Admin или Linux-hardware, но вроде бы здесь основное подозрение на железо, а не на TCP.

Итак, есть роутер на QCA9880 (Mikrotik wAP ac) и ноутбук — Intel 8260 и QCA6174 (Killer 1535). Производительность замеряем iperf3 между ноутбуком (в прямой видимости от точки доступа) и NAS'ом в той же сети. Энергосбережение везде выключено, прошивки актуальные, ядро 4.9. Сетевой планировщик (queue discipline) ­— fq_codel (дефолт systemd), алгоритм управления загруженностью (TCP congestion control algorithm) — YeAH, хотя от его смены на Reno ничего не меняется.

Intel 8260, TCP, приём:

$ iperf3 -c server.9-20.lan -p 12200 -f M -t 20 -R
Connecting to host server.9-20.lan, port 12200
Reverse mode, remote host server.9-20.lan is sending
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-20.00  sec   950 MBytes  47.5 MBytes/sec  697             sender
[  4]   0.00-20.00  sec   945 MBytes  47.2 MBytes/sec                  receiver

Intel 8260, TCP, передача:

$ iperf3 -c server.9-20.lan -p 12200 -f M -t 20
Connecting to host server.9-20.lan, port 12200
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-20.00  sec   639 MBytes  31.9 MBytes/sec  128             sender
[  4]   0.00-20.00  sec   636 MBytes  31.8 MBytes/sec                  receiver

Intel 8260, UDP, приём:

$ iperf3 -c server.9-20.lan -p 12200 -f M -t 20 -R -u -b 0
Connecting to host server.9-20.lan, port 12200
Reverse mode, remote host server.9-20.lan is sending
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-20.00  sec  1.38 GBytes  70.6 MBytes/sec  0.034 ms  262399/1023042 (26%)
[  4] Sent 1023042 datagrams

Intel 8260, UDP, передача:

$ iperf3 -c server.9-20.lan -p 12200 -f M -t 20 -u -b 0
Connecting to host server.9-20.lan, port 12200
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-20.00  sec   993 MBytes  49.6 MBytes/sec  0.010 ms  6090/718961 (0.85%)
[  4] Sent 718961 datagrams

QCA6174, TCP, приём:

$ iperf3 -c server.9-20.lan -p 12200 -f M -t 20 -R
Connecting to host server.9-20.lan, port 12200
Reverse mode, remote host server.9-20.lan is sending
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-20.00  sec   737 MBytes  36.8 MBytes/sec  831             sender
[  4]   0.00-20.00  sec   731 MBytes  36.5 MBytes/sec                  receiver

QCA6174, TCP, передача:

$ iperf3 -c server.9-20.lan -p 12200 -f M -t 20
Connecting to host server.9-20.lan, port 12200
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-20.00  sec   111 MBytes  5.56 MBytes/sec   10             sender
[  4]   0.00-20.00  sec   110 MBytes  5.52 MBytes/sec                  receiver

QCA6174, UDP, приём:

$ iperf3 -c server.9-20.lan -p 12200 -f M -t 20 -R -u -b 0
Connecting to host server.9-20.lan, port 12200
Reverse mode, remote host server.9-20.lan is sending
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-20.00  sec  1.44 GBytes  73.9 MBytes/sec  0.031 ms  461908/1069809 (43%)
[  4] Sent 1069809 datagrams

QCA6174, UDP, передача:

$ iperf3 -c server.9-20.lan -p 12200 -f M -t 20 -u -b 0
Connecting to host server.9-20.lan, port 12200
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-20.00  sec   630 MBytes  31.5 MBytes/sec  0.033 ms  972/456078 (0.21%)
[  4] Sent 456078 datagrams

К этим результатам два вопроса. Во-первых, у Intel 8260 скорость на приём или при использовании UDP стабильно несколько выше, чем у QCA6174, хотя последний вроде Wave 2 и вообще подаётся как более производительный радиомодуль. Во-вторых, в случае TCP на передачу QCA6174 работает очень медленно, выше 8 МБ/с скорость передачи не поднималась ни разу.

Почему? Что может быть не так? Может быть, у драйвера ath10k или в TCP-стеке есть какие-то параметры, которые нужно потюнить?

Не знаю, зачем, но скастую dimss и devl547.

 , , ,

intelfx
()

Скормить NetFlow v9 в InfluxDB

В продолжение вот этой темы про подкроватный мониторинг. Есть ли у кого-либо идеи или (вдруг) готовые скрипты/решения на тему того, как сохранять данные с коллекторов NetFlow v9 в InfluxDB или что-нибудь подобное?

Нужен именно NetFlow, sFlow не подойдёт, т. к. коллектор — это роутер MikroTik.

 , , ,

intelfx
()

Посоветуйте подкроватный мониторинг

Приветствую.

Имеется типичный набор локалхостов в лице сервера-файлопомойки и нескольких роутеров (в VPN). Хочу две вещи: смотреть на графики из разнообразных чисел (начиная от мощности 3G-сигнала в одной из сетей VPN'а и aggregate traffic за день и заканчивая температурой жёстких дисков в файлопомойке и количеством тонера в принтере) и получать оповещения о заранее определённых событиях на почту (например, когда развалился туннель, перегрелись диски или отвалился их контроллер, заспамив лог ядра предупреждениями — увы, такое случается часто, потому что железо нищебродское).

Какой набор софта вы можете для этого посоветовать? Железа мало, поэтому разные там SNMP, discovery и шаблоны скорее вредны, чем полезны. В принципе, все необходимые данные со всех узлов я могу собирать с помощью самописных шелл-скриптов — от мониторилки нужна возможность запускать эти скрипты по расписанию (или в потоковом режиме), оповещать по электронной почте при наступлении указанных условий, складывать численные данные в какую-нибудь и уметь строить адекватные графики и диаграммы (включая несколько типов графиков из одних и тех же данных).

 , ,

intelfx
()

Подкроватный DNS для VPN'ов в топологии «звезда»

Приветствую.

Допустим, у меня есть набор из нескольких подсетей /24, соединённых различными IP-туннелями (в смысле, L3, а не L2) в топологии «звезда». В частности, две подсети соединяются с центральной через IPsec между роутерами в туннельном режиме, и ещё есть подсеть для OpenVPN-клиентов (OpenVPN-сервер находится в центральной подсети, но на отдельной машине). Все подсети лежат внутри 10.0.0.0/8. OSPF и прочими протоколами динамической маршрутизации не пользуюсь, везде статические маршруты. Это всё как-то работает (все всех видят). Для определённости, все роутеры Mikrotik.

Теперь собственно задача. В каждой подсети есть свой кэширующий DNS-сервер-ресолвер, в кэш которого инжектируются записи о DHCP-клиентах в данной подсети (как dnsmasq, но не dnsmasq). Доменные зоны везде разные (*.1.lan, *.2.lan и так далее). И ещё у OpenVPN-сервера есть свой список клиентов с именами. И хочется сделать так, чтобы любой узел в любой подсети мог заресолвить имя любого другого узла, обращаясь к «своему» кэширующему ресолверу (к тому, чей адрес он получает через DHCP).

Как лучше всего это сделать? Я придумал три одинаково хреновых подхода.

Простейший и мегакостыльный способ 1 — синхронизировать списки клиентов, т. е. при появлении DHCP-клиента в любой подсети DHCP-сервер роутера через lease script будет стучаться по SSH на все остальные роутеры и добавлять это имя во все кэши. То же самое для OpenVPN-сервера.

Ещё один простейший и скорее всего нерабочий способ 2 — выдавать через DHCP адреса всех кэширующих ресолверов, а не только свой. Но это наверняка будет тормозить, потому что наверняка найдётся клиент, который перепутает порядок и будет пинать чужой сервер через VPN по умолчанию. Или, как вариант 2a, прописать адреса всех кэширующих ресолверов на каждом роутере как статические upstream DNS servers. Наверное, будет получше, но всё равно порядок опроса наверняка где-нибудь навернётся.

Наконец, способ номер 3 поизящнее — поднять в центре полновесный DNS-сервер, в котором делегировать каждую зону на соответствующий кэширующий ресолвер через VPN, и прописать этот DNS-сервер как второй upstream DNS server на каждом роутере. Но я не знаю, что взять в качестве полновесного DNS-сервера и как заставить ресолверы роутеров ресолвить запросы к *.lan через этот сервер, а остальные — через нормальный?

Есть ли у уважаемых админов и недоадминов ЛОРа какие-либо предложения (помимо «убей себя об стену, нуб»), комментарии (помимо «больной поехавший ублюдок»), идеи (помимо «оставить администрирование и идти работать дворником»)?

 , , ,

intelfx
()

Приложение-калькулятор с поддержкой Natural Input (как у Casio) для iOS

Приветствую.

Да, не совсем онтопик, но всё же — разыскивается приложение-калькулятор под iOS с поддержкой т. н. «естественного ввода» (как у научных калькуляторов Casio или в приложении Natural Scientific Calculator для Android).

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

 ,

intelfx
()

Мастерская или человек, способный восстановить (напаять новый) MHF4-разъём на 4G-модеме

Приветствую.

В силу собственной криворукости я только что сорвал с платы 4G-модема EM7455 один из трёх коаксиальных антенных разъёмов MHF4. Дорожки и контактные площадки на самой плате не повреждены — я сорвал только внешний цилиндрический «ободок».

Не знает ли кто-нибудь мастерскую, сервисный центр или просто человека, способного/готового напаять на плату новый разъём?

Даже не знаю, что написать в теги и кого скастовать. ncrmnt?

 

intelfx
()

Аналог HP Microserver Gen8 c >6 слотами для HDD

Приветствую.

С недавних пор хочу наконец заиметь для домашней файлопомойки/медиацентра специализированное устройство вместо имеющейся сейчас половинки ноутбука с ExpressCard'ным SATA-контроллером (да, оно даже шевелится).

В принципе, мне очень нравится HP Microserver Gen8 — как железка, максимально приближенная к взрослому серверу (iLO, ...) и за крайне смешные для сервера деньги. Но у него есть недостаток: всего четыре слота для HDD. Если я захочу добавить места, мне придётся менять все четыре двухтерабайтника одновременно (RAID5), что по стоимости сопоставимо с ещё одним таким микросервером.

Существуют ли в природе устройства, похожие на HP Microserver Gen8, но с более чем четырьмя (а лучше с более чем шестью) слотами для жёстких дисков?

Требования (в порядке убывания важности):

  • >6 слотов HDD и столько же SATA-разъёмов на материнской плате
    (т. е. варианты вида «восемь посадочных мест, но четыре разъёма, а для остального втыкайте в единственный PCIe второй SATA-контроллер» не рассматриваются)
  • Gigabit Ethernet (понятное дело)
  • PCIe, в который можно воткнуть видеокарту, или современная (HD3000+) интеловская интеграшка с выходом HDMI/DP
  • up to 30 килорублей (в крайнем случае up to 40, если оно совсем крутое)
  • iLO или аналог для удалённого управления
  • процессор не слабее i3-330M

Кто-нибудь знает? Самосбор годится, но нужно влезть в бюджет.

Текущий выбор — самосбор:

 , , ,

intelfx
()

Разыскивается адекватное облачное хранилище для бэкапов

Допустим, мне нужно куда-то бэкапить 8 терабайт различного хлама. От бэкапилки требуется ровно три вещи: уметь в инкрементальное дописывание данных, иметь линуксовый клиент (или использовать один из общеизвестных протоколов типа rsync) и уметь сохранять все POSIX-метаданные — такие, как mtime, права доступа, xattrs/ACLs, хардлинки и симлинки.

Например, взять Backblaze:

  • Backblaze Personal Backup ($5/месяц, неограниченный объём) имеет крайне привлекательную цену, но мне не подходит, т. к. нет линуксового клиента;
  • B2 Cloud ($5/(месяц*TB)) — уже дороже, но оно представляет собой «тупое» object storage без поддержки метаданных на файлах.

Иными словами, нужно облако, в которое можно заливать бэкапы пофайлово (а не одним большим tar-архивом), при этом не теряя метаданные. Если есть что-то, что понимает формат btrfs send — оно тоже подойдёт (но вряд ли такие существуют).

Помимо этого (вполне возможно, что таких нет), я буду рад услышать об инструментах для бэкапа, умеющих работать с object storage напрямую. Один уже назвали — duplicity.

 ,

intelfx
()

Передача в функцию тяжёлого temporary

Допустим, у меня есть следующий код:

#include <string>
#include <vector>

void foo(const std::vector<std::string> &vec)
{
    /* произвольные операции с vec */
}

int main(int, char **)
{
    for (unsigned i = 0; i < 1e6; ++i) {
        foo({"foo" /* много букв */,
             "bar" /* много букв */,
             "baz" /* много букв */});
    }
}

Под «много букв» понимаются строки, достаточно длинные для того, чтобы исключить small string optimization.

При выполнении данной программы я наблюдаю (clang 3.9.0, gcc 6.2.1, -std=с++14, наблюдения произведены с помощью valgrind), что вне зависимости от уровня оптимизации происходит 7 * 1e6 выделений памяти.

Отсюда возникает два вопроса:

  1. Почему аллокаций 7 миллионов, а не 4, учитывая move semantics и всё такое?
  2. Почему компилятор не может построить вектор со строками статически в .rodata, учитывая, что он передаётся по константной ссылке и не изменяется? Или какие-то свойства языка запрещают так делать?

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

 

intelfx
()

Хочется странного: 802.11ac-only точка доступа с >= 3x3 MU-MIMO

Приветствую.

Весь вопрос в строке заголовка. Нужно проапгрейдить домашнюю сеть, в которой уже есть хороший маршрутизатор и точка доступа в диапазоне 2.4 ГГц. В связи с этим я ищу:

  • точку доступа (без встроенного свитча и роутинга);
  • с 802.11ac (и только с ним, отдельный 2.4 ГГц радиотракт не нужен);
  • с гигабитным Ethernet-каналом (разумеется);
  • уровня Wave 2 (т. е. с MU-MIMO и как минимум тремя антеннами).

Последнее требование самое важное. Первые два можно отбросить, если они не дают экономии (выигрыша в стоимости).

Такое есть в мире?

Список результатов

  • UniFi UAP-AC-HD, только точка доступа, 2.4+5 ГГц, 4x4 MU-MIMO, $350

 , , ,

intelfx
()

Питерским велосипедистам

Привет всем. Меня тут занесло в Питер (на велосипеде). Отсюда вопрос: кто-нибудь из местных вело-ЛОРовцев не хочет произвольным вечером покататься || зайти куда-нибудь || потрепаться? IOW устроить обычный такой outsession, но только с велосипедами.

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

// Axon?

 , , ,

intelfx
()

Где взять USB-GPIO контроллер с edge-triggered прерываниями?

Приветствую.

Поскольку я (ввиду своего рукожопия) уже отчаялся собрать хотя бы простейшую плату на каком-нибудь ATTiny, а задача никуда не делась, имеем вопрос: где можно найти (уже собранный) модуль, у которого с одной стороны USB, а с другой хотя бы пара ног и земля?

При этом:

  • требуется только получение данных;
  • частоты порядка нескольких килогерц (небольшие);
  • входной сигнал цифровой, 5V;
  • хочу избежать периодического активного опроса устройства (как в FT232), т. е. чтобы оно имело некий внутренний таймер, само отслеживало фронты на входах и пинало хост, передавая новое состояние входа и timestamp.

Вообще говоря, исходная задача звучит так: нужно принимать команды по протоколу Onkyo RI (там внизу страницы есть графическое представление сигнала) и скармливать их LIRC'у.

Такое можно найти в дефолт-сити за небольшие деньги?

 ,

intelfx
()

Linux и копирование больших файлов, часть 100500

Есть у меня файлопомойка в виде ноута, подключенного к гигабитной LAN. На файлопомойке массив 4x2T, подключенный через ExpressCard-ный однопортовый SATA2-контроллер(!) и SATA port multiplier. На массиве btrfs и RAID5, но это вроде как не важно.

Пропускная способность этой офигительной матрёшки из интерфейсов при линейном I/O — 120 MiB/s, т. е. по 30 MiB/s на диск. Учитывая RAID5 — полезных 90 MiB/s суммарно. Это всё проверялось с помощью dd на чтение; полагаю, на запись цифры не должны сильно отличаться. Пропускная способность сети примерно такая же (замерял iperf3).

А теперь собственно проблема. Я копирую некий большой файлик по сети через rsync-over-ssh и вижу, что диск загружен примерно 25-30% времени. Если смотреть на загрузку CPU, то всё соответствует: сначала загрузка CPU где-то 40% (особо отмечу — я не упираюсь в CPU из-за ssh) и ноль iowait, потом внезапно 100% iowait и шуршание дисками. В итоге скорость копирования получается ~25-30 MiB/s и ещё проседает время от времени.

Вопрос: как это исправить? Я хочу, чтобы не простаивали ни диск, ни сеть. Ядро на файлопомойке 4.6.2 стоковое арчовское.

 , ,

intelfx
()

Заиметь PSR (Panel Self-Refresh) в существующем ноутбуке — реально ли?

Приветствую.

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

(Об этом пишет Matthew Garrett, например, вот здесь.)

В частности, на Haswell и выше есть вполне задокументированная зависимость между разрешением основного дисплея и максимальным Package C-state, в которое кристалл сможет упасть. Для моего Thinkpad T540p и штатного разрешения 2880x1620 это всего лишь PC3 (из возможных семи). Следовательно, энергопотребление этого ноута при штатном разрешении никогда не опускается ниже 12W, но если сменить разрешение на 1024x768 — оно сразу же падает до 7-8W.

Однако, есть такая весёлая штука, как PSR (Panel Self-Refresh). Насколько я понял, это «умные» дисплеи, которые умеют обновлять кадр по частям и самостоятельно его перерисовывать. В той же доке на Haswell написано, что в системах с PSR чип сможет падать в PC7 вне зависимости от разрешения, но для этого нужна поддержка в видеоядре и в самой матрице. Судя по логам, второй у меня нет.

Отсюда вопрос: нельзя ли где-либо добыть хотя бы электрически совместимую с T540p матрицу с поддержкой PSR?

P. S.: если у кого-то есть T550 или T560, прошу загрузиться с параметрами ядра i915.enable_psr=1 drm.debug=0xe и скинуть лог ядра (dmesg) и/или содержимое файла /sys/kernel/debug/dri/0/i915_edp_psr_status.

 , ,

intelfx
()

«Секьюрный» IPC, или как неинтерактивно передать в ssh-keygen парольную фразу?

Приветствую.

Исходная задача: нужно в неинтерактивном режиме запустить ssh-keygen -y -f $privkey и скормить ему парольную фразу, причём сделать это максимально секьюрно. С stdin он её читать не хочет.

Переформулировка задачи: я решил запускать ssh-keygen, передавая ему в качестве SSH_ASKPASS путь к вспомогательной программе, которая, запустившись, как-то получит у меня парольную фразу и отдаст её ssh-keygen'у в stdout. Вопрос: как?

  • Тупо скормить в stdin и надеяться, что запущенный псевдо-askpass унаследует файловый дескриптор от ssh-keygen'а — ненадёжно, в будущей версии openssh могут решить закрывать все fd на всякий случай.
  • Создавать named pipe, System V SHM, ... — несекьюрно, можно успеть подключиться раньше и вычитать оттуда всё что нужно.
  • Что ещё?

Clarification. В итоге я всё-таки заставил ssh-keygen читать парольную фразу из stdin без применения костылей с подложным SSH_ASKPASS. Для этого нужно убрать переменную DISPLAY= и завернуть процесс в setsid, чтобы отобрать доступ к /dev/tty:

( unset DISPLAY; exec setsid -w ssh-keygen -y -f "$privkey_file" < "$passphrase_file" )

 ,

intelfx
()

Теория эксперимента: «усреднить» результаты нескольких экспериментов, учитывая их погрешности

Приветствую.

Контекст — обычные студенческие физлабы, но хотелось бы сделать максимально «правильно».

Итак, имеется несколько экспериментальных результатов, представляющих собой арифметические выражения от показаний (нескольких) приборов, и соответствующие им «погрешности». Я не знаю, как это правильно называется с точки зрения статистики, но последние были посчитаны исходя из величины деления шкалы и классов точности приборов по известным правилам вида «относительная погрешность произведения ...». В каждом случае эти «погрешности» получились существенно разными, сами результаты тоже несколько отличаются.

Вопрос: как усреднить результаты и посчитать «погрешность» среднего (видимо, это называется стандартное отклонение...) с учётом вышесказанного? На пальцах — я хочу что-то вроде взвешенного среднего, и какой-то способ оценить погрешность того, что получится.

Дисклеймер: курсов матстата, теории вероятности, теории эксперимента и тому подобных у нас не было. Буду благодарен, если кто-то ответит более развёрнуто, чем «читать вон туда».

 , теория эксперимента,

intelfx
()

zsh: автодополнение целых строк из истории

Недавно вкатил себе zsh. С уберсложной подсистемой автодополнения ещё почти не разбирался. И вот есть вопрос.

Дано: практически дефолтный (с точки зрения настроек автодополнения) zsh. Задача: поиметь возможность дополнения из истории команд.

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

bindkey  "^[[A" history-beginning-search-backward
bindkey  "^[[B" history-beginning-search-forward

Вопрос: как сделать автодополнение из префикса по истории? Так, чтобы по нажатию, скажем, Ctrl+Tab 1) дополнялись целые строчки из истории, соответствующие введённому префиксу, и 2) из этих строчек можно было составить меню (menu select включено).

 

intelfx
()

bus1 — скоро допилят?

https://github.com/bus1

Просто из коммит-лога. Код модуля уже неделю не трогали, везде последние коммиты — это какие-то мелкие исправления, комментарии и тесты.

Для Ъ: bus1 — это то, что они пилят вместо kdbus. Просто IPC в ядре, без какого-то конкретного протокола (формата сериализации etc). Видимо, с тем расчётом, чтобы поверх этого уже в юзерспейсе натянуть dbus. А ещё там в соседних репозиториях полнофункциональный игрушечный пример юзерспейса на этом bus1. Отдельный игрушечный загрузчик, инит, аналог udev и всё такое. Вот это вообще круто, откуда у них время и силы?..

А что по этому поводу думает ЛОР? Я ведь уверен, что много чего.

 , ,

intelfx
()

RSS подписка на новые темы