Изменение цветов вводимой команды в Bash.
Здрасть, форум! Мне хочется изменить команду, которую ввожу, на другой цвет. Например:
modpoll -c 1300
Нужно, чтобы был другой цвет параметра.
Здрасть, форум! Мне хочется изменить команду, которую ввожу, на другой цвет. Например:
modpoll -c 1300
Нужно, чтобы был другой цвет параметра.
Раньше мне помогал spoofdpi, а теперь, два дня назад, и он перестал работать. В интернете говорят, что и у goodbyedpi в этот момент проблемы возникли но их быстро решили. К сожалению, его нету под Linux. Были надежды на byeDPI но либо он тоже не справляется, либо я не могу найти подходящую команду для него. Хотя приложение ByeDPI на андроиде ещё работает. Так вот, кто какими решениями пользуется под Linux? v2ray, vpn, это всё конечно хорошо но своей VPS у меня нету, а публичные в 12 раз медленнее чем мой интернет.
Ещё примечание, я обычно предварительно скачиваю через yt-dlp а потом уже смотрю. Где-то говорили, что у кого-то youtube работает если включить протокол QUIC в браузере. Есть ли такая возможность в yt-dlp? Или может есть какая-то дополнительная программа, которая будет работать как прокси и будет трафик в QUIC превращать.
Не подскажите, через что и в обще где задается общесистемный параметр для гашения монитора ~5 минут, если не запущен ни xscreensaver, ни xfce4-power-manager &etc.?
Хотел бы увеличить период, ну и посмотреть чего еще задать может можно, раньше через всякие ДЕ-тулзы это все задавал... но так подумал если просто гашение нужно зачем какие-то еще демоны тащить, вот правда, на счет скажем отправлять в спящий режим машину, если к ней не прикасать ~час, что-то мне кажется не получится это или все таки можно, как думаете?
В /etc/X11/xorg.conf* смотрел, но там у меня пусто, дефолт или заданный параметр оттуда берется я правильно понимаю?.. В принципе, наверно и вопрос про это
Этьен Жювиньи, он же Tk-Glitch, известный по github-проектам wine-tkg, wine-proton-tkg и Tk-Glitch PKGBUILDs (последний предназначен для дистрибутивов на основе ArchLinux), после около десяти лет поддержки стал жаловаться на здоровье. Из-за этого он стал реже смотреть за «перебазированием» патчей и приёмом пулл-реквестов.
Этьен заявляет, что не собирается бросать репозиторий. Но тут же стало известно, что он назначил для репозитория Wine-TkG ещё одного управляющего — Кирилла Артемьева, он же Artewar67.
Пока что Кирилл столкнулся с непредвиденной задачей — на гитлабе Wine поломали структуру директорий, из-за чего библиотеки (i386 и x86_64) устанавливаются все вместе в один общий каталог, без разделения на архитектуру. С этим «перебазированием» Кирилл справляется хорошо.
Надеемся, что и в дальнейшем поддержка остальных репозиториев TkG и Wine будет идти хорошо и не будет заброшена.
Привет, ЛОР.
Уже давно бьюсь со странной проблемой.
Дано: ArchLinux (до этого был KDE Neon), Firefox (до этого Chromium) и везде одна и та же проблема.
Некоторые сайты не открываются с ошибкой
The connection has timed out
The server at www.fastmail.com is taking too long to respond.
При этом на всех других устройствах и ОС в той же локальной сети все работает отлично, проблема наблюдается только на Linux.
nslookup до них проходит, ping тоже, DoH в Firefox выключен.
Я уже голову сломал в попытке понять, чем оно так примечательно и почему на всех других устройствах работает.
Примеры: fastmail.com, vsulimov.com, git.vsulimov.com (последние 2 - мои личные)
Господа, всем доброго настроения.
Не пойму как решить задачу. Гугление, к сожалению, не поспособствовало, за сим прошу помощи у коллективного сознательного.
Имеется скрипт-уведомлялка, который говорит Telegram-боту отправить сообщение определённому абоненту при авторизации на сервере по SSH.
Лежит скрипт по пути /etc/profile.d/script.sh, выглядит следующим образом:
#!/bin/bash
BOT_TOKEN=token
CHAT_ID=id
USER_IP=$(echo $SSH_CLIENT | awk '{ print $1}')
BOT_MESSAGE="🔐 $(hostname): $(whoami) is authorized from $USER_IP"
curl -X POST -d "text=$BOT_MESSAGE" 'https://api.telegram.org/bot'$BOT_TOKEN'/sendMessage?chat_id='$CHAT_ID'' &>/dev/null
Проблема заключается в том, что работает он только при подключении по, непосредственно, интерактивному SSH. Если подключиться через условный WinSCP - уведомления не будет, как и если просто скопировать файл на сервер через scp.
Интуиция подсказывает, что заковыка связана с понятиями «интерактивности/неинтерактивности» устанавливаемой сессии, и, соответственно, в местоположении скрипта, но вот знаний, чтобы понять, как описанную проблему исправить – не хватает.
Подскажите, пожалуйста, что именно нужно сделать, чтобы получать желаемое уведомление при любого типа подключении на условный «22 порт», вне зависимости от того, было ли это SSH или SFTP?
Играюсь здесь с ЯДом... Решил сделать протокол. Делаю:
# /usr/bin/time "cd /e"
/usr/bin/time: cannot run cd /e: No such file or directory
Command exited with non-zero status 127
0.00user 0.00system 0:00.00elapsed 61%CPU (0avgtext+0avgdata 1240maxresident)k
0inputs+0outputs (0major+37minor)pagefaults 0swaps
Для себя уже навалял кучку полезных скриптиков и походу изучения bash периодически их перечитываю, и что-то там допиливаю, но понял, что надо что-то посложнее попробовать и этакое поближе к программированию.
Решил попробовать написать программку, которая удаляет дубликаты строк из .bash_history (там более 7000 строк у меня). Мне это показалось достойной задачкой для начинающего башиста, хотя и (может быть) довольно бесполезной. Кстати, есть такая программа shell-history-cleaner (кажется на расте написана, давно себе собрал, работает, но видимо заброшена автором), я пользуюсь, но попробовать свои силы надо было.
В результате мне удалось сделать задуманное, но хочется поговорить и о «неудачных» вариантах, которые может быть были бы более удачными, если бы я больше знал о bash и linux вообще, так что категорически приветствуется критика и подсказки более правильных решений или каких-нибудь хитростей командной строки.
Так как-то сложилось, что я упорно откладывал изучение массивов на потом, и когда наконец более-менее разобрался с индексированным массивом, то сразу приступил к делу, чтобы заодно закрепить прочитанное в книжках, поэтому первый «неудачный» вариант будет об этом.
Программа рабочая, делает дело, но долго. Мой файл перемалывает за минуту с небольшим, при этом нагружая одно виртуальное ядро процессора на 100%. Зная лоровские нарративы об ущербности bash как языка программирования, я подумал, что вот и столкнулся с подобной ущербностью, поэтому просто искал возможность хоть как-то оптимизировать процесс.
Я не знаю никаких алгоритмов, так что рассудил так: надо взять (последнюю) строку, удалить дубликаты, строку положить в файл и так по кругу.
file=$1
mapfile -t list < <(grep -v '^$' $file)
while ((${#list[*]})); do
line=${list[-1]}
unset list[-1\]
for i in ${!list[*]}; do
[[ $line == "${list[i]}" ]] &&
unset list[i\]
done
final+=("$line")
done
printf '%s\n' "${final[@]}" | tac > $file
Для таких же любителей как я поясню идею кода. На его краткость отлично повлиял тот факт, что в истории командной строки надо сохранять последние уникальные строки, то есть работать надо с конца файла, а у индексированных массивов как раз есть стабильная ссылка на последний индекс: array[-1]. То есть не надо ничего переворачивать.
Как я понимаю, самое тугое место в скрипте — сравнение строк, и что-то более быстрых вариантов походу нет. Далее надо думать о многопоточности, но я пока до этого не дозрел.
Поскольку на данном этапе я застрял и вроде бы ясно, что тема с массивами как-то всё усложняет, то решил написать скриптик в стиле unix-way, и искренне полагал, что это будет правильным решением задачки, ведь утилиты все написаны суровыми дядьками на Си, и там всё без дураков — быстро и надёжно. Пришла идея отбросить всю эту возню с поиском и удалением, а просто взять всё — и отфильтровать.
file=$1
list=$(tac $file | grep -v '^$')
while [[ $list ]]; do
read -r line <<< $list
list=$(grep -Fxv "$line" <<< $list)
echo "$line"
done | tac > $file
Чтобы уважаемый лорчанин не хельпал ключи -F -x, напомню: F — читает regex буквально, а x — помещает выражение между ^$, иначе пришлось бы использовать ключ -P (perlre) и выражение выглядело бы как говно: "^\Q$line\E$", а работало бы ещё медленней, возможно, но это не точно. (кстати, я был весьма разочарован узнать, что с sed такое вообще не провернуть — никак не заставить подстановку читать буквально).
Итак, на короткой дистанции (разумеется, у меня был короткий вариант файла для тестов) этот скрипт почти в два раза обогнал предыдущий, но — что было для меня полнейшим разочарованием! — он совершенно заткнулся даже на средней дистанции (нагружая процессор на четверть, но размазано по потокам), то есть я его тупо прервал на какой-то там 10-ой минуте, так что о проверке на полном файле речи уже не шло. Как это понимать — не знаю, поясните. 1000 строк он смолол где-то за секунду с небольшим, а 3000 — уже застрял.
Ладно, пока не было новых идей, прочитал главу про ассоциативные массивы и сразу почуял, что это походу то, что мне надо, но я не ожидал, что настолько! Свойство хеша не дублировать индексы как будто специально создано для решения этой задачки. Быстро стало понятно, что надо просто переложить строки из обыкновенного массива в индексы хеша, а в значения хеша — номера индексов строк из обыкновенного массива.
file=$1
mapfile -t list < <(grep -v '^$' $file)
declare -A hash
for i in ${!list[*]}; do
hash[${list[i]}]=$i
done
for i in "${!hash[@]}"; do
final[${hash[$i]}]="$i"
done
printf '%s\n' "${final[@]}" > $file
Это было круто! Нет смысла даже говорить о времени выполнения этой программы, она работает почти мгновенно, менее двух десятых секунды.
Получается на bash таки можно что-то программировать и оно может работать быстро.
UPD
Наконец подсказали, что во втором скрипте у меня ошибка: read -r очищает строку от пробельных символов по краям, поэтому grep её не находит и получается бесконечный цикл. Спасибо @mky: Хочу говорить про Bash (комментарий)
Теперь этот скрипт переваривает тот же файл за 15-16 секунд!
file=$1
list=$(tac $file | grep -v '^$')
while [[ $list ]]; do
IFS=$'\n' read -r line <<< $list
list=$(grep -Fxve "$line" <<< $list)
echo "$line"
done | tac > $file
UPD2
Спасибо анону, подкинул идею отфильтровать хешем в один проход: Хочу говорить про Bash (комментарий)
file=$1
mapfile -t list < <(tac $file | grep -v '^$')
declare -A hash
for i in "${list[@]}"; do
[[ ${hash[$i]} ]] && continue
hash[$i]=added
final+=("$i")
done
printf '%s\n' "${final[@]}" | tac > $file
UPD3
Продолжаю благодарить анона, что замотивировал таки раскурить sort. Итак, почти самый шустрый вариант:
file=$1
list=$(< $file \
grep -vn '^$' |
tac |
sort -t: -k2 -u |
sort -t: -k1,1n |
cut -d: -f2-)
echo "$list" > $file
На моём компе меньше трёх сотых секунды!
UPD4
Дошли руки до AWK и это походу победитель на скорость в стиле unix-way (анон давал такой рецепт в треде).
file=$1
list=$(tac $file |
grep -v '^$' |
awk '!added[$0]++')
tac <<< $list > $file
На моём компе — девять тысячных секунды!
Кто какими пользуется, какие бывают. Поисковики выдают хренову тучу вариантов. Все их проверять удел сильных духом. Чтобы локация была в РФ, если дают ssh то клёво. Дохлость ресурсов, аптайм в целом по барабану. Кое-как работает и ладно. Интересно узнать как и о просто хостингах куда можно залить статику хоть по FTP и всё без всяких CMS (или если цмски как опция) так и VPS,VDS. Я выпал из всего этого, просто интересно было-бы узнать что сейчас ну стабильное что ли, пусть и скромное.
Ну и чтобы без всяких приколов типа, превышен некий лимит и тебе выставляют счёт. Не скажу что сильно надо, но на перспективу узнать хорошо бы. Если не знаете «хорошие» места, но знаете плохие места, то тоже будет полезно узнать. И не только мне. Гы ::)
Перемещено Dimez из general
Есть статья: Запуск Linux с виртуального диска vmdk на реальном железе и VirtualBox
https://habr.com/ru/articles/547512/
Почему там нужно создавать диск из двух частей? Ну, то есть, зачем там еще впереди кусок из 1 Мегабайта?
Статью я проверил – на Kubuntu 24 Desktop она сработала, а вот на других дистрах не работает, а мне надо другие.
И мне не понятен вопрос про такую конфигурацию диска.
Перемещено hobbit из general
В стародавние времена когда деревья были большими, трава зеленее, а мороженное стоило по 10 копеек, на Земле жили динозавры, и эти динозавры программировали в Vim.
( читать дальше... )
В последнее время ютуб затеял какую-то реорганизацию и стал убирать из некоторых своих видео формат 22 (720p, единый файл, не dash). Может я наговариваю, конечно, на ютуб, но формат best (720p) всегда был, имхо.
Оказывается есть возможность получать другую таблицу форматов, отличную от дефолтной. У yt-dlp есть параметр --extractor-arg "youtube:player_client=mediaconnect" ([youtube] Format 22 is only sometimes extracted for some videos #10206).
Дефолтная таблица форматов:
$ yt-dlp -F 'https://youtu.be/eUyr9MJnj4w'
Extracting cookies from firefox
Extracted 1328 cookies from firefox
[youtube] Extracting URL: https://youtu.be/eUyr9MJnj4w
[youtube] eUyr9MJnj4w: Downloading webpage
[youtube] eUyr9MJnj4w: Downloading ios player API JSON
[youtube] eUyr9MJnj4w: Downloading player 5b22937f
[youtube] eUyr9MJnj4w: Downloading m3u8 information
[info] Available formats for eUyr9MJnj4w:
ID EXT RESOLUTION FPS CH │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC ABR ASR MORE INFO
────────────────────────────────────────────────────────────────────────────────────────────────────────────────
sb3 mhtml 48x27 0 │ mhtml │ images storyboard
sb2 mhtml 80x45 1 │ mhtml │ images storyboard
sb1 mhtml 160x90 1 │ mhtml │ images storyboard
sb0 mhtml 320x180 1 │ mhtml │ images storyboard
233 mp4 audio only │ m3u8 │ audio only unknown Default
234 mp4 audio only │ m3u8 │ audio only unknown Default
139 m4a audio only 2 │ 1.32MiB 49k https │ audio only mp4a.40.5 49k 22k low, m4a_dash
249 webm audio only 2 │ 1.30MiB 48k https │ audio only opus 48k 48k low, webm_dash
250 webm audio only 2 │ 1.70MiB 63k https │ audio only opus 63k 48k low, webm_dash
140 m4a audio only 2 │ 3.51MiB 129k https │ audio only mp4a.40.2 129k 44k medium, m4a_dash
251 webm audio only 2 │ 3.51MiB 130k https │ audio only opus 130k 48k medium, webm_dash
602 mp4 256x144 15 │ ~ 2.33MiB 86k m3u8 │ vp09.00.10.08 86k video only
394 mp4 256x144 30 │ 1.68MiB 62k https │ av01.0.00M.08 62k video only 144p, mp4_dash
269 mp4 256x144 30 │ ~ 4.16MiB 154k m3u8 │ avc1.4D400C 154k video only
160 mp4 256x144 30 │ 1.55MiB 57k https │ avc1.4D400C 57k video only 144p, mp4_dash
603 mp4 256x144 30 │ ~ 4.18MiB 154k m3u8 │ vp09.00.11.08 154k video only
278 webm 256x144 30 │ 2.35MiB 87k https │ vp9 87k video only 144p, webm_dash
395 mp4 426x240 30 │ 2.70MiB 100k https │ av01.0.00M.08 100k video only 240p, mp4_dash
229 mp4 426x240 30 │ ~ 5.70MiB 211k m3u8 │ avc1.4D4015 211k video only
133 mp4 426x240 30 │ 2.35MiB 87k https │ avc1.4D4015 87k video only 240p, mp4_dash
604 mp4 426x240 30 │ ~ 7.76MiB 287k m3u8 │ vp09.00.20.08 287k video only
242 webm 426x240 30 │ 3.59MiB 133k https │ vp9 133k video only 240p, webm_dash
396 mp4 640x360 30 │ 5.02MiB 186k https │ av01.0.01M.08 186k video only 360p, mp4_dash
230 mp4 640x360 30 │ ~ 11.41MiB 421k m3u8 │ avc1.4D401E 421k video only
134 mp4 640x360 30 │ 4.13MiB 153k https │ avc1.4D401E 153k video only 360p, mp4_dash
18 mp4 640x360 30 2 │ ≈ 7.64MiB 282k https │ avc1.42001E mp4a.40.2 44k 360p
605 mp4 640x360 30 │ ~ 15.03MiB 555k m3u8 │ vp09.00.21.08 555k video only
243 webm 640x360 30 │ 6.06MiB 224k https │ vp9 224k video only 360p, webm_dash
397 mp4 854x480 30 │ 8.40MiB 310k https │ av01.0.04M.08 310k video only 480p, mp4_dash
231 mp4 854x480 30 │ ~ 15.17MiB 561k m3u8 │ avc1.4D401F 561k video only
135 mp4 854x480 30 │ 6.09MiB 225k https │ avc1.4D401F 225k video only 480p, mp4_dash
606 mp4 854x480 30 │ ~ 20.80MiB 769k m3u8 │ vp09.00.30.08 769k video only
244 webm 854x480 30 │ 8.50MiB 314k https │ vp9 314k video only 480p, webm_dash
398 mp4 1280x720 30 │ 14.51MiB 536k https │ av01.0.05M.08 536k video only 720p, mp4_dash
232 mp4 1280x720 30 │ ~ 24.57MiB 908k m3u8 │ avc1.4D401F 908k video only
136 mp4 1280x720 30 │ 11.09MiB 410k https │ avc1.4D401F 410k video only 720p, mp4_dash
609 mp4 1280x720 30 │ ~ 31.59MiB 1167k m3u8 │ vp09.00.31.08 1167k video only
247 webm 1280x720 30 │ 13.61MiB 503k https │ vp9 503k video only 720p, webm_dash
399 mp4 1920x1080 30 │ 24.33MiB 899k https │ av01.0.08M.08 899k video only 1080p, mp4_dash
270 mp4 1920x1080 30 │ ~ 73.64MiB 2721k m3u8 │ avc1.640028 2721k video only
137 mp4 1920x1080 30 │ 39.45MiB 1458k https │ avc1.640028 1458k video only 1080p, mp4_dash
614 mp4 1920x1080 30 │ ~ 53.22MiB 1967k m3u8 │ vp09.00.40.08 1967k video only
248 webm 1920x1080 30 │ 26.78MiB 990k https │ vp9 990k video only 1080p, webm_dash
616 mp4 1920x1080 30 │ ~131.47MiB 4858k m3u8 │ vp09.00.40.08 4858k video only Premium
400 mp4 2048x1152 30 │ 60.94MiB 2252k https │ av01.0.08M.08 2252k video only 1080p, mp4_dash
620 mp4 2048x1152 30 │ ~151.23MiB 5589k m3u8 │ vp09.00.50.08 5589k video only
271 webm 2048x1152 30 │ 82.90MiB 3063k https │ vp9 3063k video only 1080p, webm_dash
Новая таблица форматов с единым файлом/потоком для 720p (и 1080p):
$ yt-dlp -F 'https://youtu.be/eUyr9MJnj4w' --extractor-arg "youtube:player_client=mediaconnect"
Extracting cookies from firefox
Extracted 1329 cookies from firefox
[youtube] Extracting URL: https://youtu.be/eUyr9MJnj4w
[youtube] eUyr9MJnj4w: Downloading webpage
[youtube] eUyr9MJnj4w: Downloading mediaconnect player API JSON
[youtube] eUyr9MJnj4w: Downloading m3u8 information
[info] Available formats for eUyr9MJnj4w:
ID EXT RESOLUTION FPS CH │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC ABR ASR MORE INFO
────────────────────────────────────────────────────────────────────────────────────────────────────────────
sb3 mhtml 48x27 0 │ mhtml │ images storyboard
sb2 mhtml 80x45 1 │ mhtml │ images storyboard
sb1 mhtml 160x90 1 │ mhtml │ images storyboard
sb0 mhtml 320x180 1 │ mhtml │ images storyboard
140 m4a audio only 2 │ 3.51MiB 129k https │ audio only mp4a.40.2 129k 44k medium, m4a_dash
160 mp4 256x144 30 │ 1.55MiB 57k https │ avc1.4d400c 57k video only 144p, mp4_dash
91 mp4 256x144 30 │ ~ 4.16MiB 154k m3u8 │ avc1.4d400c mp4a.40.5
133 mp4 426x240 30 │ 2.35MiB 87k https │ avc1.4d4015 87k video only 240p, mp4_dash
92 mp4 426x240 30 │ ~ 5.70MiB 211k m3u8 │ avc1.4d4015 mp4a.40.5
134 mp4 640x360 30 │ 4.13MiB 153k https │ avc1.4d401e 153k video only 360p, mp4_dash
93 mp4 640x360 30 │ ~11.41MiB 421k m3u8 │ avc1.4d401e mp4a.40.2
18 mp4 640x360 30 2 │ ≈ 7.64MiB 282k https │ avc1.42001E mp4a.40.2 44k 360p
135 mp4 854x480 30 │ 6.09MiB 225k https │ avc1.4d401f 225k video only 480p, mp4_dash
94 mp4 854x480 30 │ ~15.17MiB 561k m3u8 │ avc1.4d401f mp4a.40.2
136 mp4 1280x720 30 │ 11.09MiB 410k https │ avc1.4d401f 410k video only 720p, mp4_dash
95 mp4 1280x720 30 │ ~24.57MiB 908k m3u8 │ avc1.4d401f mp4a.40.2
137 mp4 1920x1080 30 │ 39.45MiB 1458k https │ avc1.640028 1458k video only 1080p, mp4_dash
96 mp4 1920x1080 30 │ ~73.64MiB 2721k m3u8 │ avc1.640028 mp4a.40.2
Как скачивать 720p (формат единым файлом/потоком):
$ yt-dlp -f 95 'https://youtu.be/eUyr9MJnj4w' --extractor-arg "youtube:player_client=mediaconnect"
Как воспроизводить 720p (формат единым файлом/потоком):
$ mpv --ytdl-format=95 'https://youtu.be/eUyr9MJnj4w' --ytdl-raw-options=extractor-arg="youtube:player_client=mediaconnect"
Кроме того:
profile-cond=path:match('youtu%.?be') ~= nil или profile-cond=path:find('youtu%.?be') (1 (mpv.io)).ytdl-raw-options=extractor-arg="youtube:player_client=mediaconnect" и ytdl-format=95/best.--alias 95f '-f 95 --extractor-arg="youtube:player_client=mediaconnect"'. Теперь, чтобы скачать, пишем yt-dlp --95f 'https://youtu.be/eUyr9MJnj4w'.
Для чего все это надо?
Я живу в деревне в частном доме. В доме протянута обычная сеть на витой паре. И есть сосед-приятель,который хотел бы ко мне подключиться. Но расстояние между нашими домами около 450м,что больше официально допустимого для витой пары. Да еще проблемы грозозащиты,неизбежные для любых медных проводов.
Возникла мысль попытаться использовать оптический кабель,тем более что он дешево продается на Озоне,например вот: https://www.ozon.ru/product/kabel-opticheskiy-oksk-2a-1-5-kn-2-volokna-buhta-500m-1056605179/ Девять с хвостиком тыс за бухту 500м. Там же есть и медиаконвертеры,разные и за весьма разную цену: https://www.ozon.ru/category/mediakonvertery/ Идея в том,чтобы купить кабель,отнести его туда где могут приварить разъемы,после чего протянуть между домами(протянуть тут легко,ничего не мешает). Но сам я никогда оптические сети не строил,только пару раз видел как это специальные люди делали. Я только «медными» сетями занимался,причем довольно много.
Поэтому вопрос: будет ли работать этот дешевый кабель с Озона с предлагаемыми там же медиаконвертерами,и если да то с какими именно? А также интересно,почему на тех конверторах два гнезда под оптические кабели,подписанных как TX и RX? У них прием и передача отдельно и им два волокна надо? Вроде там где я видел(на старой работе лет двадцать назад) - работало по одному волокну,хотя могу и ошибаться,я особо не вникал за ненадобностью в то время.
Вобщем - просьба к тем кто имеет имеет практический опыт в оптических сетях прокомментировать вышеизложенную идею на предмет реализуемости и цены. Да,какая-то дикая скорость в гигабиты не требуется,обычных 100мбит будет более чем достаточно. Это же для личного некоммерческого применения. Нужен максимально дешевый эдакий «удлинитель», работающий на несколько сотен метров и не боящийся наводок от молний.
Собственно хочу понять как подхватывать вторичную фс при загрузке из iso, в качестве примера взят mageia2:
grub.cfg такой:
menuentry "MageiaLive-2 x86_64-DVD.iso" {
## https://forum.mxlinux.org/viewtopic.php?p=343499&sid=8ead07b227700eb06d6b8eaae592b58d#p343499
probe -s ruuid -u $root
search --no-floppy --fs-uuid $ruuid --set=root
set isofile='/isoimage/Mageia-2-LiveCD-GNOME-x86_64-CD.iso'
loopback loop0 $isofile
probe -s isolabel -l loop0
probe -s isouuid -u loop0
linux (loop0)/boot/vmlinuz root=mgalive:LABEL=ISOIMAGE ro isofrom=$ruuid:$isofile looptype=squashfs loop=/loopbacks/distrib-lzma.sqfs lang=ru rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0
initrd (loop0)/boot/cdrom/initrd.gz Где ISOIMAGE это метка тома ISO по умолчанию от grub2-mkrescue -o ../grub.iso .
Собственно, загрузчик этой конфигурацией подхватывается, но вылетает при попытке загрузиться с loopbacks/distrib-lzma.sqfs:
SQUASHFS error: squashfs_read_data failed to read block 0x0
SQUASHFS error: unable to read squashfs_super_block
mount /dev/loop0: can't read superblock
dracut Warning: /sysroot has no proper rootfs layout, ignoring and removing offending mount hook
dracut Warning: Can't mount root filesystem
losetup: failed to setup loop device: No such file or directory
mount /dev/loop0: can't read superblock
dracut Warning: /sysroot has no proper rootfs layout, ignoring and removing offending mount hookЧто тут можно сделать ? Очень желательны и другие примеры :)
Здравствуйте мои юные кали-хакеры и любители оставаться анонимными. С утра, ковыряя VDS (пользуюсь услугами ру-провайдера), [ДАННЫЕ УДАЛЕНЫ] запрос, и [ДАННЫЕ УДАЛЕНЫ] дамп диска [ДАННЫЕ УДАЛЕНЫ].
А теперь скрипт, который из кастомного, т.е. созданного и настроенного вами chroot'а создаёт initramfs образ, готовый к загрузке и работе в tmpfs.
С ним вы можете на любой системе прямо «на лету» свичнуться в tmpfs, хоть прямо сейчас, на своём компьютере. Предварительно установив в chroot любой дистрибутив по желанию и настроив его под себя. А потом скриптом упаковать его в initramfs образ и свичнуться, да.
Для создания минимального (от слова «маленький», а не «огрызок») образа потребуется squashfs-tools. Чтобы свичнуться «на лету» нужен kexec-tools. Установите их. В ядре должны быть включены опции: CONFIG_OVERLAY_FS=y, CONFIG_SQUASHFS=y и CONFIG_SQUASHFS_XZ=y. [личное мнение: ZSTD получается размером больше, чем XZ]
Например. Хотите генту?
# mkdir gentoo_chroot/
# cd gentoo_chroot/
# wget https://bouncer.gentoo.org/fetch/root/all/releases/amd64/autobuilds/20200519T155804Z/stage3-amd64-20200519T155804Z.tar.xz
# tar xf stage3-amd64-*.tar.xz
# rm stage3-amd64-*.tar.xz
# cd ..На этом этапе мы получили ванильную генту в gentoo_chroot/. Рекомендую её настроить, хотя бы сделать chroot gentoo_chroot/ /bin/bash и установить passwd для root, иначе в систему вы не войдёте. Я не знаю, что это за особенность такая, не давать установить пароль если его нет. В моём CRUX когда пароль на root отсутствует и ты логинишься первый раз (в tty или в ssh по ключу), оно просто предлагает установить пароль. Какая тут может быть дыра в безопасности на свежеустановленной системе? Не знаю...
Предлагаю так же в gentoo_chroot/ скопировать модули и фирмварь для корректной работы текущего ядра и железа.
# cp -a /lib/modules gentoo_chroot/lib/modules
# cp -a /lib/firmware gentoo_chroot/lib/firmwareНу и создадим образ наконец.
# ./mkchrootrd gentoo_chroot/ ~/gentoo_initrdУсё. У нас теперь целая настоящая гента в gentoo_initrd файлике упакована. Давайте загрузимся же в неё скорее с текущим ядром.
# eval $(cat /proc/cmdline | cut -f 1 -d \ )
# kexec -l $BOOT_IMAGE --initrd=gentoo_initrd --reuse-cmdline
# kexec -eЕсли вы не хотите делать kexec по каким-то причинам, то положите этот же образ в свой /boot, а в параметрах загрузки укажите initrd /gentoo_initrd. Перезагрузитесь и получите тот-же результат.
Ура! Гента загрузилась. Тоже самое можно проделать с любым дистрибутивом, просто установите его, настройте как вам угодно, а затем скриптом создайте initramfs образ. Я уж взял для примера Gentoo, не стал лишний раз приводить в пример CRUX.
Жмём Reset чтобы сбросить всё и загрузиться в свою систему с морально устаревшего M.2 NVMe накопителя обратно.
Перевёл свою VDS на работу в tmpfs. Диск /dev/vda отформатировал в NTFS. Рекомендую всем. 👍👍👍👍👍👍
Скрипт:
#!/bin/bash
#
# Author: Sp00f1ng <sp00f1ng@sp00f1ng.com>
# License: Public Domain
#
################################################################################
#
# mkchrootrd chroot_directory/ [initrd_image]
#
################################################################################
#
# Depends on: squashfs-tools
# Optional: kexec-tools
# Kernel:
#
# File systems --->
# <*> Overlay filesystem support
# [*] Miscellaneous filesystems --->
# <*> SquashFS 4.0 - Squashed file system support
# [*] Include support for XZ compressed file systems
#
################################################################################
#
# Example usage:
#
# mkdir gentoo_chroot/
# cd gentoo_chroot/
# wget https://bouncer.gentoo.org/fetch/root/all/releases/amd64/autobuilds/20200519T155804Z/stage3-amd64-20200519T155804Z.tar.xz
# tar xf stage3-amd64-*.tar.xz
# rm stage3-amd64-*.tar.xz
#
# [.. do something else with gentoo_chroot/ like additional configuration ...]
# [ cp -a /lib/modules ./lib/modules ]
# [ cp -a /lib/firmware ./lib/firmware ]
#
# cd ../
#
# ./mkchrootrd gentoo_chroot/ ~/gentoo_initrd
#
# eval $(cat /proc/cmdline | cut -f 1 -d \ )
# kexec -l $BOOT_IMAGE --initrd=gentoo_initrd --reuse-cmdline
# kexec -e
#
# Have fun and happy hacking day 1 <3 <3 7 !
panic() {
if [ -e "$TMP" ]; then
rm -rf $TMP 2>/dev/null
fi
exit ${1:1}
}
got_help() {
grep ^\# "$0"
}
got_cmdline() {
while [ "$1" ]; do
if [ ! -n "$CHROOT_DIR" ]; then
CHROOT_DIR="$1"
shift
continue
fi
if [ ! -n "$INITRD_IMG" ]; then
INITRD_IMG="$1"
shift
continue
fi
shift
done
}
cp_bin() {
local src="$1"
local dst="$2"
local dep=""
if [ "$dst" = "" ]; then
dst="$src"
fi
if [ -e "$TMP$dst" ]; then
return
fi
install -D -m 0755 "$src" "$TMP$dst"
for dep in $(ldd "$src" 2>/dev/null | grep -o '/.* '); do
cp_bin "$dep"
done
}
mk_env() {
for dir in proc sys dev run mnt overlay; do
install -d $TMP/$dir
done
for dev in console tty tty1 null; do
cp -a "/dev/$dev" "$TMP/dev/$dev"
done
for bin in sh switch_root mount umount mkdir rmdir; do
cp_bin "$(which $bin)"
done
touch $TMP/init
chmod +x $TMP/init
cat > $TMP/init << EOF
#!/bin/sh
mount -t proc none /proc
echo "0" > /proc/sys/kernel/printk
mount -t sysfs none /sys
mount -t devtmpfs devtmpfs /dev
mount -t tmpfs none /run
mount -t tmpfs tmpfs /overlay
lowerdir="/lower"
upperdir="/overlay/upper"
workdir="/overlay/work"
mkdir -p \$lowerdir
mkdir -p \$upperdir
mkdir -p \$workdir
mount -t squashfs -o ro /root.sqfs \$lowerdir
mount -t overlay -o ro,lowerdir="\$lowerdir",upperdir="\$upperdir",workdir="\$workdir" overlay /mnt
umount /proc
umount /sys
umount /dev
umount /run
exec switch_root /mnt /sbin/init
EOF
}
main() {
CHROOT_DIR=""
INITRD_IMG=""
got_cmdline "$@"
if [ ! -n "$CHROOT_DIR" ] || [ ! -n "$INITRD_IMG" ]; then
got_help
panic 0
fi
if [ ! -d "$CHROOT_DIR" ]; then
echo "'$CHROOT_DIR' is not directory."
panic 1
fi
if [ ! -x "$(which mksquashfs)" ]; then
echo "'mksquashfs' squashfs-tools not found."
panic 1
fi
mk_env
mksquashfs $CHROOT_DIR $TMP/root.sqfs \
-b 1048576 -comp xz -Xdict-size 100%
cd $TMP
echo "Building Initial RAM Disk [$INITRD_IMG]"
find . -print0 | cpio --null --create --format=newc --verbose > "$INITRD_IMG"
echo "Done [$INITRD_IMG]"
}
trap "panic" INT HUP QUIT TERM EXIT
readonly MKCHROOTRD_COMMAND="$0"
readonly MKCHROOTRD_VERSION="1.0"
TMP=$(mktemp -d)
main "$@"
# EOFДистрибутив в котором пытаюсь это сделать FEDORA 16. Описалово везде вроде бы простейшее( вот например http://slicks.name/ubuntu/ustanovit-grub2-na-usb-pri-pomoshhi-ubuntu-linux.html) но, при установке лично моя Федора, говорит, что это плохая идея, файлы заливаются, но флешка не загрузочная.
Неужели дело в Ubunte? и надо именно Live CD Убунтовский? Хочется использовать при загрузке ISO образы и не только линуксовые, а всякие.
Стоит задача - есть удаленный репозиторий, который изначально использовался как основной (при push/pull-е). Но канал связи медленный и скорость не устраивала, к примеру clone «с нуля» сейчас занимает часов 20, большие коммиты тоже напрягают. Задался вопросом «подъема» локального зеркала, на который будут push-ить локальные разработчики, и который периодически будет синхронизироваться с удаленным. На удаленке в этот репозиторий почти никто не коммитит, и задержки с обновлением коммитов «от нас» должны устроить.
Есть решение делать
git clone --bare <url>И периодически пушить то что в локальном зеркале обновилось:
git push origin --mirrorНо тогда потеряются все коммиты в удаленном репозитории. Коммиты не «от нас» туда редки но не хотелось бы их потерять, если вдруг появятся. Кроме того первое время, как поднимем зеркало, наверняка многие по старинке будут коммитить в удаленный.
Можно периодически делать
git remote updateХотелось бы чтобы можно было делать merge изменений. Чтобы не терялись коммиты ни на одном из источников.
P.S. Не подумайте я не админю всю инфраструктуру, я разработчик, от наших админов переделки будет добиться будет сложно (перенести этот репозиторий к нам), хотелось бы своими силами развернуть зеркало.
P.P.S. Как правильно mirror'ить GIT репозиторий? я читал, как там мерджить коммиты я не понял т.к. после clone --bare pull вроде бы не доступен.
Привет, ЛОР!
По-моему, было бы очень полезно иметь утилиту, работающую как grep, но предназначенную для поиска чисел в пределах некоторого интервала от заданного значения. Например, если мы запускаем numgrep 1234 file.txt, то утилита вычленяет в каждой строке файла всё, что можно прочитать как число, сравнивает каждое из чисел с 1234, и если модуль разности не более 0.5, то печатает всю найденную строку. Такими числами могли бы быть, например, 1234.1, 1233.99, 1.2344e3. По умолчанию можно было бы в качестве доверительного интервала брать 0.5 от последней значащей цифры искомого числа, т.е. для 1234.5 было бы не +/-0.5, а +/-0.05, ну и, конечно, должна быть возможность задать интервал явно.
Вроде бы идея лежит на поверхности и не особо сложна в реализации (особенно если не сильно париться о скорости работы), но я не нашёл ничего готового на эту тему.
Как обеспечить конфиденциальность закрытого ключа электронной подписи, чтобы к нему технически не имел доступ удостоверяющий центр, а только владелец сертификата электронной подписи? Есть прецеденты применения закона, когда физлица получают сертификат ЭП, сгенерированный удостоверяющим центром на основе специального файла-запроса CSR, генерирующемуся на стороне физического лица — клиента удостоверяющего центра и подписанного закрытым ключом, который есть только у физлица? Ведь такая схема успешно работает для получения SSL-сертификата для работы веб-сайта по https-протоколу; почему-то это не применяется, по крайней мере широко, для ЭП, хотя по существу сертификат ЭП — технически такой же сертификат, как SSL-сертификат. Есть еще какие-то варианты, кроме указанного мной, то есть использующего преимущества ассиметричной криптографии? Линукс тут притом, что посоветуйте, пожалуйста, чем можно сгенерировать такой файл запроса, кроме КриптоАРМ, например под Debian 12 AMD64?
| ← предыдущие | следующие → |