У меня была точно такая же проблема с Raspberry Pi 3B+ за Fritz!Box 7581, поэтому мое решение может подойти и вам.
Отредактируйте /etc/dhcpcd.conf
на RPi и замените slaac private на slaac hwaddr .
Несмотря на то, что IPv6 полностью включен в RPi, в последней версии Raspbian Stretch он может быть заблокирован в /etc/modprobe.d/ipv6.conf
. Удаление этого файла или комментирование его содержимого устраняет эту блокировку.
Заставьте FB7581
забыть о «старом» RPi, выключив его, подождав, пока он не появится в списке незанятых соединений, а затем удалив его.
После (повторной )загрузки RPi в разделе «Разрешить доступ» должно быть возможно открыть его для Ping6, OpenVPN и т. д. У меня это сработало.
Начиная с версии 1.9 HAProxy поддерживает ведение журнала в stdout
и stderr
.
Имея это в виду, передать его в файл довольно просто.
# change haproxy.cfg file with the following
global
log stdout local0 debug
defaults
log global
option httplog
Затем вы можете просто запустить HAProxy вот так:
haproxy -f haproxy.cfg > haproxy.log 2>&1 &
Как вы, наверное, знаете, >
передает stdout
в файл haproxy.log
, а затем 2>&1
передает stderr
в тот же файл. Он заканчивается на &
, что переводит процесс в фоновый режим.
Вы можете проявить изобретательность и попробовать настроить скрипт для уничтожения предыдущего экземпляра haproxy
, выполнив что-то вроде этого:
#!/bin/bash
# mini launcher
kill -9 `cat /home/user/haproxy.pid`
/home/user/haproxy -f /home/haproxy.cfg > /home/user/haproxy.log 2>&1 &
echo $! > /home/user/haproxy.pid
Жестко, как вы, наверное, понимаете... не рекомендуется.
Изменить :Запись в файлы раньше была блокирующим событием и поэтому не рекомендуется, особенно для чего-то вроде HAProxy. Команда HAProxy ясно дала понять в сообщении о выпуске, указанном выше, что это уже не так .
-121 ---299154 -We’ve received this request quite a bit and have spent some time planning the best way to implement it—without blocking—and we’re pleased to announce that we’ve found a solution!
Вместо вставки шестнадцатеричного дампа в строку замены s
попробуйте прочитать как файл:
{ printf ' %s' 'var wasm = "'; hexdump -v -e '1/1 "%02X"' camaro.wasm; } |
sed -e '/var wasm = ".*";/ {' -e 'r /dev/stdin' -e 'a\";' -e 'd;}' camaro.js
выход:
var camaro = (function() {
"use strict";
var wasm = "6C645950577A62776A57696452624E43... etc.";
})();
var wasm = ".*";
, заменяется содержимым stdin + ";
— это не универсальная альтернатива s/match/replacement/
. Кроме того, он корректно работает только для первой совпадающей строки — все последующие совпадающие строки заменяются на ";
. Попробуйте использовать awk
или perl
, если вам нужно решить эти проблемы. Чтобы использовать длинную строку как часть скрипта sed
,передать команды редактирования в sed
как файл сценария:
sed -f /dev/stdin camaro.js <<EOS
s#\(var wasm = "\).*";#\1$(hexdump -v -e '1/1 "%02X"' camaro.wasm)";#
EOS
hexdump
, сгенерированная при подстановке команд, передается как строка вместе с остальной частью команды редактирования s
на стандартный ввод sed
; -f /dev/stdin
просит sed использовать стандартный ввод в качестве файла сценария, избегая ошибки «Слишком длинный список аргументов»