Параллельное выполнение команд с одного читаемого файла

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

Сделать это можно с помощью утилиты pee, входящей в состав пакета программ moreutils. Для установки в Ubuntu используем apt install moreutils.

Сделать это можно так:

dd if=test | pee "dd of=newtest" "sha512sum".

Результаты следующие:

Последовательное выполнение

Тут пришлось делать скрипт, т.к. time не хотел никак выполнять несколько команд. 
cat ./sc
#!/bin/bash
if=test of=newtest
sha512sum test

time ./sc 678d36fc5a1d14b23dcd04740604a643f2d3159167af1211ab779ac10394ac443a06feabee9d826fd715bce84e0d13ea75bc85fe990e340e775c1d9521c8dac9 test

real 0m24.453s
user 0m23.885s
sys 0m0.548s

[свернуть]

Параллельное выполнение

time dd if=test | pee "dd of=newtest" "sha512sum"
1228276+0 records in
1228276+0 records out
628877312 bytes (629 MB, 600 MiB) copied, 14.766 s, 42.6 MB/s
1228276+0 records in
1228276+0 records out
628877312 bytes (629 MB, 600 MiB) copied, 14.4783 s, 43.4 MB/s
678d36fc5a1d14b23dcd04740604a643f2d3159167af1211ab779ac10394ac443a06feabee9d826fd715bce84e0d13ea75bc85fe990e340e775c1d9521c8dac9 -

real 0m14.779s
user 0m12.009s
sys 0m22.671s

[свернуть]

Также можно сделать и с архивом:

tar cf - test | cat | pee "dd of=archive.tar" "sha512sum"

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

где:

test - имя архивируемого файла/директории

archive.tar - имя конечного архива

Для создания сжатого архива, например, lz4:

tar cf - test | lz4 -z| cat | pee "dd of=archive.tar.lz4" "sha512sum"

Как мы видим, параллельное выполнение значительно быстрее, особенно при нескольких задачах, нежели последовательное, и при работе с большими файлами это просто необходимость.

(330) 347-7766

При попытке установить браузер тор через torbrowser-launcher выплёвывается куча ошибок:

Текст ошибки

Unhandled Error Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/twisted/web/_newclient.py", line 929, in dispatcher return func(*args, **kwargs) File "/usr/lib/python2.7/dist-packages/twisted/web/_newclient.py", line 1497, in _finishResponse_WAITING self._giveUp(Failure(reason)) File "/usr/lib/python2.7/dist-packages/twisted/web/_newclient.py", line 1550, in _giveUp self._disconnectParser(reason) File "/usr/lib/python2.7/dist-packages/twisted/web/_newclient.py", line 1538, in _disconnectParser parser.connectionLost(reason) -— —- File "/usr/lib/python2.7/dist-packages/twisted/web/_newclient.py", line 550, in connectionLost self.response._bodyDataFinished() File "/usr/lib/python2.7/dist-packages/twisted/web/_newclient.py", line 929, in dispatcher return func(*args, **kwargs) File "/usr/lib/python2.7/dist-packages/twisted/web/_newclient.py", line 1185, in _bodyDataFinished_CONNECTED self._bodyProtocol.connectionLost(reason) File "/usr/lib/python2.7/dist-packages/torbrowser_launcher/launcher.py", line 329, in connectionLost self.all_done(reason) File "/usr/lib/python2.7/dist-packages/torbrowser_launcher/launcher.py", line 346, in response_finished self.run_task() File "/usr/lib/python2.7/dist-packages/torbrowser_launcher/launcher.py", line 276, in run_task self.run_task() File "/usr/lib/python2.7/dist-packages/torbrowser_launcher/launcher.py", line 282, in run_task self.verify() File "/usr/lib/python2.7/dist-packages/torbrowser_launcher/launcher.py", line 491, in verify self.run_task() File "/usr/lib/python2.7/dist-packages/torbrowser_launcher/launcher.py", line 286, in run_task self.extract() File "/usr/lib/python2.7/dist-packages/torbrowser_launcher/launcher.py", line 531, in extract self.run_task() File "/usr/lib/python2.7/dist-packages/torbrowser_launcher/launcher.py", line 290, in run_task self.run() File "/usr/lib/python2.7/dist-packages/torbrowser_launcher/launcher.py", line 547, in run if not self.check_min_version(): File "/usr/lib/python2.7/dist-packages/torbrowser_launcher/launcher.py", line 535, in check_min_version for line in open(self.common.paths['tbb']['versions']).readlines(): exceptions.IOError: [Errno 2] No such file or directory: '/home/user/.local/share/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/TorBrowser/Docs/sources/versions

[свернуть]

Но и при попытке добавить репозиторий

add-apt-repository ppa:webupd8team/tor-browser

вываливается ошибка 404. Это происходит потому, что в данном репозитории ещё нет пакетов для нашей свежей версии убунты, поэтому смотрим, для каких наиболее свежих релизов есть пакеты:

Ага, zesty есть, следовательно, делаем следующее:

    1. Добавляем сам репозиторий sudo add-apt-repository ppa:webupd8team/tor-browser
    2. Редактируем файл /etc/apt/sources.list.d/webupd8team-ubuntu-tor-browser-artful.list и меняем artful на zesty
    3. Обновляем индексы пакетов apt update
    4. Устанавливаем сам браузер тор apt install tor-browser

Готово! Тор запускается и прекрасно работает!

Настройка nut в Ubuntu 14.04 на автоотключение сервера и нюансы

В интернете полно инфы по настройке nut, но не рассказаны одни из важных нюансов, что да как происходит, о них я распишу по ходу установки и настройки на примере ИБП Ippon Back Power Pro 600 через USB. Перейдем. Все команды выполняется под root'ом.

1) Устанавливаем сам nut. apt install nut

Важно: в Ubuntu 14.04 (Trusty) сервис nut называется как nut-server, поэтому работать нужно с этим именем.

2) Настраиваем конфиги. Советую не смотреть и просто копировать, а то глаза на лоб вылезут, если вы никогда этого не делали 🙂

2.05) /etc/nut/nut.conf

MODE=none заменить на MODE=standalone

2.1) /etc/nut/ups.conf

Переходим в конец файла и прописываем:

[ups]
driver = blazer_usb
port = auto
offdelay = 100
ondelay = 1
desc = "Ippon 600W" - тут важно использовать простые двойные кавычки.

[ups] - название ИБП (можно писать любое, главное английскими буквами и важно его запомнить)

driver = blazer_usb и port = auto - их не трогаем, это драйвер, который нужно использовать и порт (заранее узнаем нужный драйвер по этой ссылке).

offdelay = 100 и
ondelay = 1 - о них я расскажу в конце

2.2) /etc/nut/upsd.conf

Найдем здесь линию LISTEN 127.0.0.1 3493 и раскомментируем её (или можно вставить в конец файла). Это настройка указывает, где и на каком порту nut сервер будет "слушать". Рекомендую разрешать доступ только с локалхоста.

2.3) /etc/nut/upsd.users

Настройка юзера. Прописываем:

[upsmon]
password = pass
actions = SET
instcmds = ALL
upsmon master

[upsmon] - имя юзера, password - его пароль. На остальное внимание не обращаем, при желании, можете погуглить.

2.4) /etc/nut/upsmon.conf

MONITOR ups@127.0.0.1 1 upsmon pass master
MINSUPPLIES 1
NOTIFYCMD /sbin/upssched
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/nut/killpower
NOTIFYMSG ONLINE "UPS %s on line power"
NOTIFYMSG ONBATT "UPS %s on battery"
NOTIFYMSG LOWBATT "UPS %s battery is low"
NOTIFYMSG FSD "UPS %s: forced shutdown in progress"
NOTIFYMSG COMMOK "Communications with UPS %s established"
NOTIFYMSG COMMBAD "Communications with UPS %s lost"
NOTIFYMSG SHUTDOWN "Auto logout and shutdown proceeding"
NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced"
NOTIFYMSG NOCOMM "UPS %s is unavailable"
NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible"
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
NOTIFYFLAG FSD SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT SYSLOG+WALL+EXEC
NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC
NOTIFYFLAG NOPARENT SYSLOG+WALL+EXEC
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

Тут MONITOR ups@127.0.0.1 1 upsmon pass master

где

ups@127.0.0.1 - ups - имя бесперебойника (из пункта 2.1), 127.0.0.1 - адрес сервера (из пункта 2.2).

upsmon - имя юзера, pass - пароль юзера (из пункта 2.3)

2.4) /etc/nut/upssched.conf

CMDSCRIPT /etc/nut/cmd.sh
PIPEFN /tmp/upspipe
LOCKFN /tmp/upslock
AT COMMBAD * EXECUTE commbad
AT COMMOK * EXECUTE commok
AT NOCOMM * EXECUTE nocomm
AT ONBATT * EXECUTE powerout
AT ONBATT * START-TIMER shutdownnow 90
AT LOWBATT * EXECUTE shutdowncritical
AT ONLINE * CANCEL-TIMER shutdownnow
AT ONLINE * EXECUTE powerup

где AT ONBATT * START-TIMER shutdownnow 90 - запускаем таймер и ждем 90 секунд, если в течении 90-а секунд не появится питание в сети, то посылается сигнал завершения работы. Об этом чуть далее.

2.5) /etc/nut/cmd.sh

Открываем файл и пишем:

#!/bin/sh
case $1 in
commbad)
logger "UPS communications failure"
;;
commok)
logger "UPS communications restored"
;;
nocomm)
logger "UPS communications cannot be established"
;;
powerout)
logger "UPS on battery. Shutdown in 90 seconds...."
upscmd -u upsmon -p pass ups@127.0.0.1 shutdown.return
;;
shutdownnow)
logger "UPS has been on battery for 120 seconds. Starting orderly shutdown"
sudo poweroff
;;
shutdowncritical)
logger "UPS battery level CRITICAL. Shutting down NOW!!!!"
upsmon -c fsd
;;
powerup)
logger "UPS on line. Shutdown aborted."
upscmd -u upsmon -p pass ups@127.0.0.1 shutdown.stop
;;
*)
logger "Unrecognized command: $1"
;;
esac

где

logger "UPS on battery. Shutdown in 90 seconds...."
upscmd -u upsmon -p pass ups@127.0.0.1 shutdown.return
;;

где -u и -p - имя и пароль юзера (из пункта 2.3)

ups@127.0.0.1 - об этом было сказано в пункте 2.4.

logger "UPS on line. Shutdown aborted."
upscmd -u upsmon -p pass ups@127.0.0.1 shutdown.stop
;;

тут также

shutdown.return - запуск таймера, настроенного в пункте 2.4

shutdown.stop - соответственно, остановка таймера (при подачи напряжения, если время таймера не истекло).

2.5) chmod 777 /etc/nut/cmd.sh

2.6) Нюанс по поводу того, что сервер не выключался при подачи команды shutdownnow - у юзера nut просто нет прав на завершение работы, решаем это быстрым костылем (заранее я прописал в конфиге выше команду sudo poweroff). Открываем /etc/sudoers (sudo должен быть установлен заранее! apt install sudo) и прописываем:

nut ALL=(ALL:ALL) NOPASSWD: ALL

2.7) Перезапускаем демон и получаем инфу:

upsc ups@127.0.0.1

Получить должны примерно это:

Теперь перезагружаем сервер и тестируем работу.

Нюансы касательно принципа работы автоотключения ИБП:

1) При отключении электричества (пропадание напряжения на входе ИБП) nut получает информацию и запускает таймер, (в нашем случае это 90 секунд) и если в течении этого времени напряжение не появится, то выполняется команда sudo poweroff от пользователя nut, которая безопасно отключает питание сервера.

2) Теперь касательно offdelay = 100 и ondelay = 1.

offdelay - время в секундах, через которое ИБП отключается (в т.ч. отключает питание от батареи). Если в течении 100 секунд (в данном случае) не появится напряжение, то ИБП отключается.

ondelay - время в минутах, через которое ИБП включится после отключения (после offdelay). Как работает - если отключится ИБП и через 5 секунд появится напряжение в сети, то ИБП будет отключен и будет ждать 1 минуту (в данном случае), через минуту он включится (будет заметен характерный "щелк" реле) при этом, если: напряжение в сети все еще отсутствует, то питание от батареи возобновлено не будет. Если напряжение появится в сети, то ИБП автоматически включится (будет характерный длинный "писк") и подаст напряжение на сервер.

На этом всё, конфиги и настройка взяты отсюда, однако, о важных нюансах выше не было ничего сказано в интернете, как и что работает. Вообще, настройка nut слишком усложнена и явно не стоит такого заморачивания.

707-949-8543

Решил ты такой установить вайбер на свежую ось, (702) 574-5795 и начинаешь накатывать, но вот, ведь, незадача:

# dpkg -i viber.deb
Selecting previously unselected package viber.
(Reading database ... 157446 files and directories currently installed.)
Preparing to unpack viber.deb ...
chown: cannot access '/home/user/Documents/ViberDownloads': No such file or directory
Unpacking viber (7.0.0.1035) ...

dpkg: dependency problems prevent configuration of viber:
viber depends on libssl1.0.0; however:
Package libssl1.0.0 is not installed.
viber depends on gstreamer1.0-plugins-ugly; however:
Package gstreamer1.0-plugins-ugly is not installed.
viber depends on gstreamer1.0-pulseaudio; however:
Package gstreamer1.0-pulseaudio is not installed.
viber depends on gstreamer1.0-libav; however:
Package gstreamer1.0-libav is not installed.

dpkg: error processing package viber (--install):
dependency problems - leaving unconfigured
Processing triggers for desktop-file-utils (0.23-1) ...
Processing triggers for mime-support (3.60) ...
Processing triggers for hicolor-icon-theme (0.15-1) ...
Errors were encountered while processing:
viber

Пробуем вручную, поочередно установить все зависимости

apt install libssl1.0.0 gstreamer1.0-plugins-ugly gstreamer1.0-pulseaudio gstreamer1.0-libav

и выясняется, что пакет libssl1.0.0 был выпилен. Несмотря на то, что давно уже вышла новая версия этой библиотеки, вайбер насмерть привязан именно к старой версии и не работает. Поэтому, качаем пакет от предыдущей оси:

wget 870-935-3475

dpkg -i libssl1.0.0_1.0.1t-1+deb8u8_amd64.deb

и, наконец apt -f install

 

6292238238

Для этого я установил одинаковым методом две копии ОС Ubuntu Xenial, i386 версию и x86_64 версию.

Одинаково запустил пару браузеров, открыл страницу яндекса (так как на ней довольно много элементов).

Firefox i386:

Firefox x86_64:

Chromium i386:

Chromium x86_64:

Из данного эксперемента следует, что 32-х битные программы действительно потребляют меньший объем ОЗУ.

Как отключить Flash Player в браузере Maxthon

Браузер Maxthon хранит плагины в директории с файлами программы в папке Core\plugins. Для отключение флеша необходимо удалить (или переместить) файл pepflashplayer.dll, который находится по пути ниже, полный путь при стандартной установки на 64-х битную систему  Windows выглядит так:

C:\Program Files (x86)\Maxthon5\Core\plugins

После удаления файла и следующем запуске флеш больше не будет работать.

(323) 787-2564

После выхода десятой версии ownCloud из репозитория пропали owncloud-deps и сама owncloud, остались лишь "базовые" файлы - owncloud-files, в результате чего не были созданы конфигурационные файлы apache и не были установлены необходимые модули php.

Перед началось удостоверьтесь, что установлен lamp: apt install lamp^ (MySQL и др. внешние БД использовать не обязательно).

Все команды выполняются под рутом!

1) Подключаем репозиторий и устанавливаем owncloud-files.

1.1) wget -nv /download.owncloud.org/download/repositories/production/Ubuntu_16.04/Release.key -O Release.key

1.2) apt-key add - < Release.key

1.3) echo 'deb /download.owncloud.org/download/repositories/production/Ubuntu_16.04/ /' > /etc/apt/sources.list.d/owncloud.list

1.4) apt-get update

1.5) apt-get install owncloud-files

2) Устанавливаем зависимости ownCloud

Переходим на /download.owncloud.org/download/repositories/9.0/Ubuntu_16.04/all

Тут нам нужно найти файл owncloud-deps-php с нужной версией php, в моем случае это был файл owncloud-deps-php7.0_9.0.11-1.1_all.deb

2.1) wget /download.owncloud.org/download/repositories/9.0/Ubuntu_16.04/all/owncloud-deps-php7.0_9.0.11-1.1_all.deb - качаем конфигуратор от предыдущей версии (все работает отлично)

2.2) dpkg -i owncloud-deps-php7.0_9.0.11-1.1_all.deb

2.3) apt -f install - исправляем завимости

И вуаля - ownCloud 10 настроен и работает! Можно приступать к настройке.

(310) 292-3037

Кто пытался установить LXC контейнер с арчем, тот столкнулся с проблемой отсутствия менеджера пакетов. Все вроде бы просто, но бинарники есть только для trusty. Их мы и возьмем.

1) Добавляем репу и получаем ошибку, которую мы игнорируем: add-apt-repository ppa:thopiekar/pacman

2) Редактируем /etc/apt/sources.list.d/thopiekar-ubuntu-pacman-xenial.list и меняем xenial на trusty

3) После обновления списка пакетов, получаем ошибку из-за неизвестного ключа. Добавляем его. apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D51DB14E9FFECCF3

4) Обновляем список пакетов, и устанавливаем нужный софт:  apt install pacman-pm arch-install-scripts

5) Конфигурируем пакман: /etc/pacman.conf

SigLevel = Never

Инфу о репах копируем с хоста. Кому охото вручную писать?

[core]

Include = /etc/pacman.d/mirrorlist

[extra]

Include = /etc/pacman.d/mirrorlist

[community]

Include = /etc/pacman.d/mirrorlist

Создаем папку

mkdir /etc/pacman.d

В /etc/pacman.d/mirrorlist пишем (рекомндую посмотреть репозитории на сайте арча и выбрать наиболее близкий для вас сервер)

Server = /mirror5.bastelfreak.org/archlinux/$repo/os/$arch

И, наконец, устанавливаем контейнер.

lxc-create -t archlinux -n new0