полезное




заглянуть

ЖЖ консоль
http://www.livejournal.com/admin/console/
редактировать теги
http://www.livejournal.com/account/settings/tags/
редактировать записи
http://www.livejournal.com/editjournal.bml?journal=
форматирует html код
http://www.elliotswan.com/postable/
http://www.webengineer.pro/test/ent.php
http://xtoolza.info/q/htmlconverter/
http://htmlconvert.net/
все спецсимволы
https://unicode-table.com/ru/
http://www.webremeslo.ru/spravka/spravka2.html
URL Decoder/Encoder
http://meyerweb.com/eric/tools/dencoder/
Base64-онлайн декодировщик
http://base64.ru/
http://foxtools.ru/Base64
онлайн переводчик
https://www.onlinedoctranslator.com/
редактор уравнений ЛаТеХ
http://ru.numberempire.com/texequationeditor/equationeditor.php
http://tex.s2cms.ru/
https://www.wolframalpha.com/
https://www.codecogs.com/latex/eqneditor.php
https://www.latex4technics.com/
разместить код и записи
https://pastebin.com/
https://gist.github.com/
http://mathbin.net/
https://codeshare.io/
http://telegra.ph/
простой и безопасный сервис обмена зашифрованными файлами
https://send.firefox.com/
таблица названий цветов
http://www.falsefriends.ru/english-colors.htm
Таблица символов кодирования URL
http://web-developer.name/urlcode/
Транслит онлайн
http://translit-online.ru/
http://web-boss.info/service/yandex-translit-online
IP Калькулятор
http://www.subnet-calculator.com/cidr.php
http://opennet.ru/ipcalc.shtml
http://ip-calculator.ru/
http://netcalc.ru/index.php
http://www.networkcenter.info/calcs/ipcalc
http://www.ispreview.ru/ipcalc.html
картинка
CHMOD калькулятор
http://chmod-calculator.com/
http://wb0.ru/chmod.php
http://wwhois.ru/chmod.php
http://admin-gu.ru/chmod-calculator
Практическая таблица сетевых масок
http://ts.psc.ru/CISCO/netmask.htm
порты TCP/IP
cat /etc/services
Список портов TCP и UDP
узнать свой внешний ip
curl ipinfo.io/ip
время UNIX
https://time.is/ru/Unix
date +%s
определить движок сайта
https://builtwith.com/
узнать о себе
https://browserleaks.com
http://ifconfig.me/
просмотр сайтов как в мобильнике
http://google.com/gwt/n?u=ubuntu.ru
https://googleweblight.com/?lite_url=http://flibusta.is
Winamp в браузере
https://jordaneldredge.com/projects/winamp2-js/
https://github.com/captbaritone/winamp2-js
звукозапись
https://musiclab.chromeexperiments.com/Song-Maker/
Paint в браузере
http://jspaint.ml/
https://www.pixlr.com/editor/
линукс в браузере
https://distrotest.net/
https://bellard.org/jslinux/
https://copy.sh/v86/
https://atrosinenko.github.io/qemujs-demo/
https://www.os-js.org/
Коды плееров ТВ каналов
http://tvplayercode.com/index.php
телек
радио
плагины для хрома
подборка для android
Произношение английских слов онлайн
http://www.lovelylanguage.ru/pronunciation/words
https://translate.google.ru/?hl=ru
Подборка полезных сервисов
Полезные сервисы в интернете

Изменить пароль iDRAC с помощью OpenManage


https://gist.github.com/andrewspiers/10225981
racadm getconfig -g idRacInfo
racadm getconfig -g cfgUserAdmin -i 2


https://www.dell.com/community/Blades/Changing-root-user-password-from-calvin-CLI/td-p/3820129
Чтобы добавить нового пользователя в iDRAC6, выполните следующие действия:
1 Установите имя пользователя.
2 Установите пароль.
3 Установите для входа в систему права пользователя iDRAC6.
4 Включите пользователя.

racadm config -g cfgUserAdmin -o cfgUserAdminUserName -i 2 пользователь
racadm config -g cfgUserAdmin -o cfgUserAdminPassword -i 2 пароль
racadm config -g cfgUserAdmin -o cfgUserAdminPrivilege -i 2 0x000001ff
racadm config -g cfgUserAdmin -o cfgUserAdminPrivilege -i 2 0x00000001 (это только на чтение)
racadm config -g cfgUserAdmin -o cfgUserAdminEnable -i 2 1
racadm getconfig -u пользователь
racadm getconfig –g cfgUserAdmin –i 2

racadm getconfig -g idRacInfo
racadm config -g cfgUserAdmin -o cfgUserAdminPassword -i 2 пароль

В DRAC 4 первый слот индекса является корневым по умолчанию. В DRAC 5 и 6 индекс 1 является администратором , индекс 2 является корневым .
iDRAC 4:
racadm getconfig -g cfgUserAdmin -i 1

iDRAC 5 и 6:
racadm getconfig -g cfgUserAdmin -i 2


Изменение пароля для входа в систему по умолчанию с помощью RACADM
racadm set iDRAC.Users..Password

Dell PowerEdge: что такое имя пользователя и пароль по умолчанию для iDRAC?

сброс пароля с восстановлением «заводских настроек по умолчанию», выполнив команду racadm:
racadm racresetcfg -all

Сброс настроек внутреннего контроллера удаленного доступа Dell (iDRAC) на сервере PowerEdge

Poetry: быстрая публикация на PyPI


Как опубликовать консольную утилиту на PyPI за 1 минуту

Разработав консольную утилиту, вы решаетесь опубликовать её на PyPI. Ну правда, что может быть лучше, чем сделать её доступной через pip install? Погуглив, что для этого надо, вы, возможно, наткнётесь на единственный найденный мной пост по теме, который мало того что от 2014 года, так ещё и требует от вас создать кучу папок и файлов для совершенно ненужных (вам) вещей.



Как же решить эту задачу без лишней головной боли в 2019 году? Я уже задавался этим вопросом и поэтому, прочитав тонну документации, создал для вас этот туториал. Вот пошаговая инструкция.



1. Создайте аккаунт на PyPI (ссылка для регистрации)



2. Создайте точку входа в приложение (например, файл entry.py со следующим содержимым)



def main():
    print("It's alive!")


3. Установите poetry



curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
source $HOME/.poetry/env


(poetry можно установить и по-другому, например, pip install --user poetry — прим. перев.)



4. Создайте окружение



cd myproject # Перейдите в папку проекта, который будем паковать
poetry init


5. Настройте консольную команду (для этого добавьте следующие строки в появившийся файл pyproject.toml)



[tool.poetry.scripts]
APPLICATION-NAME = 'entry:main'


APPLICATION-NAME надо поменять на имя консольной команды.



6. Опубликуйте утилиту! (используйте имя пользователя и пароль из шага 1)



poetry publish --username PYPI_USERNAME --password PYPI_PASS --build


Готово! Теперь другому человеку для установки достаточно всего двух команд:



$ sudo pip install PROJECT-NAME
$ APPLICATION-NAME


Где PROJECT-NAME — это имя, которое вы дали проекту на шаге 4, а APPLICATION-NAMEэто имя команды из шага 5.






Обновление версии



Всякий раз, когда вы хотите обновить модуль, просто измените номер версии в файле pyproject.toml:



version = "0.1.0"


И повторите шаг 6:



poetry publish --username PYPI_USERNAME --password PYPI_PASS --build





Бонус: настраиваем Travis для авто-публикации



Добавьте следующие строки в файл .travis.yml



language: python
dist: xenial
before_install:
  - curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
  - source $HOME/.poetry/env
install:
  - poetry install
script:
  - poetry build
deploy:
  - provider: script
    skip_cleanup: true
    script: poetry publish --username $PYPI_USER --password $PYPI_PASS
    on:
      branch: master
      python: '3.7'
      tags: true


И установите переменные окружения PYPI_USER и PYPI_PASS на travis-ci.com. После этого можно будет публиковать пакет с помощью команд:



git tag -a v1.2 # Replace version number with yours
git push --tags

Poetry: новый менеджер зависимостей в Python
В последнее время в экосистеме Python часто стали появляться инструменты для управления зависимостями. Оно понятно, стандартный pip уже не отвечает современным требованиям: неудобная работа с зависимостями, много ручной работы при подготовке пакетов, проблемы при установке и обновлении и много чего другого.</p>

С недавних пор я начал использовать новый менеджер под названием Poetry. Именно о нём сегодня пойдёт речь.


Функциональные возможности Poetry:



  • Управление зависимостями через toml файл (прощай, requirements.txt)

  • Автоматическое создание изолированного виртуального окружения Python (теперь не нужно для этого вызывать virtualenv)

  • Удобное создание пакетов (отныне не нужно копипастить создавать setup.py каждый раз)

  • poetry.lock файл для фиксирования версий зависимостей


А особенно радует тандем при работе с pyenv. О pyenv я писал три года назад.




Установка


Исходный код проекта лежит на github. Для установки необходимо выполнить команду:






curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python

Если установка прошла успешно, то убедиться в этом можно вызвав:


$ poetry --version
Poetry 0.12.8

Стартуем!


Создаём новый проект my-demo-project:


$ poetry new my-demo-project

Заходим в папку:


$ cd my-demo-project/
~/my-demo-project$ ls
README.rst my_demo_project pyproject.toml tests

Poetry автоматически создал все необходимые файлы для будущего пакета, но наибольший интерес представляет файл с названием pyproject.toml, этот файл можно рассматривать как продвинутую альтернативу старичку requirements.txt. Взглянем на содержимое:


[tool.poetry]
name = "my-demo-project"
version = "0.1.0"
description = ""
authors = ["Your Name you@example.com"]

[tool.poetry.dependencies]
python = "^3.6"

[tool.poetry.dev-dependencies]
pytest = "^3.0"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

Формат файла TOML. Раздел tool.poetry предназначен для описания проекта: название, версия, краткая информация о проекте и т.д. Далее следует tool.poetry.dependencies, именно здесь будут указаны все production зависимости. Их можно указать вручную (привет, requirements.txt), но мы так делать не будем (привет, npm!). Раздел tool.poetry.dev-dependencies предназначен для зависимостей во время разработки (привет, pytest, tox!)


Добавляем зависимости


Давайте добавим к проекту зависимость в виде Luigi.


~/my-demo-project$ poetry add luigi==2.8.0

Creating virtualenv my-demo-project-py3.6 in /home/user/.cache/pypoetry/virtualenvs
Updating dependencies
Resolving dependencies... (24.1s)

Package operations: 12 installs, 0 updates, 0 removals

Writing lock file
  - Installing docutils (0.14)
  - Installing lockfile (0.12.2)
  - Installing six (1.11.0)
  - Installing atomicwrites (1.2.1)
  - Installing attrs (18.2.0)
  - Installing more-itertools (4.3.0)
  - Installing pluggy (0.8.0)
  - Installing py (1.7.0)
  - Installing python-daemon (2.1.2)
  - Installing tornado (4.5.3)
  - Installing luigi (2.8.0)
  - Installing pytest (3.10.1)

Обратите внимание, что Poetry автоматически создал виртуальное окружение через virtualenv при добавлении пакета (т.к. ранее оно не было создано). Все окружения находятся по пути ~/.cache/pypoetry/virtualenvs


Если снова открыть pyproject.toml, то можно увидеть новую запись в разделе зависимостей:


[tool.poetry.dependencies]
python = "^3.6"
luigi = "=2.8.0"

Всю "грязную" работу за нас делает Poetry. Чтобы добавить зависимость для разработки достаточно указать флаг —dev:


$ poetry add tox --dev

Using version ^3.5 for tox
Updating dependencies
Resolving dependencies... (6.3s)
Package operations: 4 installs, 0 updates, 0 removals

Writing lock file
  - Installing filelock (3.0.10)
  - Installing toml (0.10.0)
  - Installing virtualenv (16.1.0)
  - Installing tox (3.5.3)

Смотрим содержимое pyproject.toml ещё раз:


[tool.poetry.dev-dependencies]
pytest = "^3.0"
tox = "^3.5"

Чтобы удалить зависимость нужно выполнить:


~/my-demo-project$ poetry remove luigi

Сборка пакета


Отныне забудьте про головную боль с ручным созданием setup.py, прописыванием туда всех зависимостей и запоминанием команд для сборки через pip. Всё стало в разы проще. Чтобы собрать python пакет выполните:


~/my-demo-project$ poetry build

Building my-demo-project (0.1.0)
 - Building sdist
 - Built my-demo-project-0.1.0.tar.gz
 - Building wheel
 - Built my_demo_project-0.1.0-py3-none-any.whl

В папке dist будут сформированы пакеты. Чтобы поделиться своим творением с другими разработчиками, например через pypi, выполните:


~/my-demo-project$ poetry publish

Окружение


Для активации виртуального окружения необходимо выполнить команду:


~/my-demo-project$ poetry shell

Вывод


Проект Poetry появился 28 февраля 2018 года, последняя версия 0.12.8. Инструмент молодой, но перспективный и быстроразвивающийся. Уже сейчас он на голову выше старичка pip и по функциональным возможностям и по удобству использования. Советую вам его попробовать и поделиться мнением в комментариях к этой статье. За более подробной информацией об инструменте советую заглянуть на сайт с документацией.



https://pypi.org/project/poetry/
https://poetry.eustace.io/docs/
Goodbye Virtual Environments?

Монтирование LVM томов (CentOS)




заглянуть
Задача:
добраться до данных в этих разделах с родительской машины.

Дано:
виртуальная машина на LVM-разделе /dev/mapper/vol-centos1
внутри неё имеются разделы /boot, / и swap, причем / и swap на LVM

root@debian:~# fdisk -l /dev/sda
Disk /dev/sda: 6 GiB, 6442450944 bytes, 12582912 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000c434c

Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 12582911 10483712 5G 8e Linux LVM

диск обычный
root@debian:~# parted /dev/sda1 print
Model: Unknown (unknown)
Disk /dev/sda1: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number Start End Size File system Flags
1 0,00B 1074MB 1074MB xfs

диск с LVM
root@debian:~# parted /dev/sda2 print
Error: /dev/sda2: unrecognised disk label
Model: Unknown (unknown)
Disk /dev/sda2: 5368MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

Если вы попытаетесь смонтировать LVM так же, как вы это делаете с другими стандартными разделами Linux, у вас ничего не получится.

root@debian:~# mount /dev/sda2 /mnt
mount: /mnt: unknown filesystem type 'LVM2_member'.

Чтобы смонтировать раздел, сначала определите группу томов, содержащуюся в /dev/sda2:

root@debian:~# lvm pvscan
PV /dev/sda2 VG centos lvm2 [<5,00 GiB / 0 free]
Total: 1 [<5,00 GiB] / in use: 1 [<5,00 GiB] / in no VG: 0 [0 ]

root@debian:~# vgscan
Reading volume groups from cache.
Found volume group "centos" using metadata type lvm2

root@debian:~# lvscan
inactive '/dev/centos/swap' [616,00 MiB] inherit
inactive '/dev/centos/root' [4,39 GiB] inherit

root@debian:~# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <5,00g 0

root@debian:~# lvdisplay /dev/centos
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID wjDWlO-4ipJ-8w3g-xx7v-AvaS-lk8s-duwIiG
LV Write Access read/write
LV Creation host, time localhost, 2018-08-12 11:47:26 +0000
LV Status available
# open 0
LV Size 616,00 MiB
Current LE 154
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:0

--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID c2DUKp-zXmb-ecIO-R26b-m477-3NXc-6dPwz8
LV Write Access read/write
LV Creation host, time localhost, 2018-08-12 11:47:26 +0000
LV Status available
# open 0
LV Size 4,39 GiB
Current LE 1125
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:1


необходимо активировать LVM-тома, что бы добраться до них
root@debian:~# lvm vgchange -a y
2 logical volume(s) in volume group "centos" now active

проверяю
root@debian:~# ls /dev/mapper/
centos-root centos-swap control

swap мне не нужен, монтирую /dev/centos/root
root@debian:~# mount /dev/centos/root /mnt

после работы нужно не забыть отмонтировать
root@debian:~# umount /dev/centos/root

деактивируем LVM-тома
root@debian:~# lvm vgchange -a n centos
0 logical volume(s) in volume group "centos" now active
root@debian:~# ls /dev/mapper/
control

https://habr.com/ru/post/127690/

Как увеличить размер программного RAID-массива в Linux





Объемы данных в современных системах растут с каждым днем и тот объем, который еще вчера считался достаточным, сегодня уже не способен удовлетворить текущие требования. Также дешевеют носители данных, особенно это касается твердотельных накопителей, что рано или поздно поставит администратора перед необходимостью апгрейда дисковой подсистемы. Но как быть, если вы используете программный RAID в Linux? В этой статье мы рассмотрим наиболее часто встречающийся сценарий с заменой дисков на более емкие и расширением объема массива.


Несмотря на то, что в качестве примера мы использовали Debian 9 все нижеизложенное будет справедливо для любого базирующегося на Debian дистрибутиве, а с небольшими поправками (там, где касается установки загрузчика) для любой Linux-системы.


По условиям задачи в нашем распоряжении есть виртуальная машина, в которой на двух дисках собраны два RAID1 для корневого раздела и подкачки, диски являются загрузочными. Мы специально выбрали такую конфигурацию, чтобы охватить все возможные сценарии и показать общие принципы работы с программным RAID при его расширении. При этом используемая конфигурация не является оптимальной или рекомендуемой, мы создали ее сугубо в образовательных целях.


Итак, у нас в системе используются два виртуальных жестких диска объемом 20 ГБ которые мы хотим заменить на новые виртуальные диски объемом в 30 ГБ желательно без существенного простоя системы.


Прежде всего ознакомимся с текущей конфигурацией дисковой подсистемы. Будет очень полезно выполнить перезагрузку и войдя в BIOS уточнить с какого именно физического диска мы загружаемся.


mdadm-extending-001.png


В нашем случае это первый физический диск. Теперь загрузимся в систему и выполним команду:


lsblk

ее вывод позволяет в удобном виде увидеть структуру текущей дисковой подсистемы.


mdadm-extending-002.pngКак можно увидеть, в нашем случае на двух физических жестких дисках sda и sdb расположены два программных массива raid1: md0 с корневой файловой системой и md1 с разделом подкачки объемом 16,8 ГБ и 3,2 ГБ соответственно.


Следующим шагом нам нужно посмотреть разметку на физических дисках, это можно сделать при помощи утилиты fdisk, но лучше использовать ее аналог с псевдографическим интерфейсом - cfdisk. Запустим ее с указанием интересующего нас диска:


cfdisk /dev/sda

mdadm-extending-003.pngЗдесь мы видим, что диск имеет таблицу разделов MBR (Label: dos в шапке) и содержит первичный раздел sda1 объемом 16,8 ГБ типа fd Linux RAID, а также логический раздел sda2, в котором находится еще один раздел типа fd Linux RAID размером 3,2 ГБ - sda5.


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


mdadm -f /dev/md0 /dev/sdb1
mdadm -f /dev/md1 /dev/sdb5

mdadm-extending-004.pngТеперь можно выключить сервер и физически заменить старый жесткий диск на новый. После этого загрузимся и выполним команду:


fdisk -l

mdadm-extending-005.pngКак видим в системе появился новый неразмеченный диск sdb объемом 30 ГБ. Теперь следует разметить его:


cfdisk /dev/sdb

Первым шагом указываем тип таблицы разделов, так как у нас уже используется MBR, то выбираем dos.


mdadm-extending-006.pngТеперь нам нужно создать аналогичную по структуре sda разметку, но с новыми разделами разделов. Единственное условие - они не должны быть меньше уже имеющихся. В нашем случае мы создадим первичный раздел объемом 26 ГБ и укажем для него тип Linux raid autodetect (fd) используя для этого кнопку Type утилиты.


mdadm-extending-007.pngЗатем запишем изменения кнопкой Write. На оставшемся месте создадим расширенный раздел (extended) и внутри его еще один раздел Linux raid autodetect (fd). В итоге у вас должна получиться разметка аналогичная по структуре sda, но с новыми размерами разделов.


Теперь добавим вновь созданные разделы в массивы:


mdadm --add /dev/md0 /dev/sdb1
mdadm --add /dev/md1 /dev/sdb5

mdadm-extending-008.pngПосле чего убедимся, что начался процесс ресинхронизации:


cat /proc/mdstat

mdadm-extending-009.pngИ обязательно дождемся ее окончания. Система в это время будет доступной, но может испытывать проблемы с производительностью из-за повышенной нагрузки на дисковую подсистему, поэтому желательно запланировать данный процесс на нерабочее время. После успешной ресинхронизации вывод команды будет выглядеть следующим образом:


mdadm-extending-010.pngВроде бы все хорошо, но не забываем про загрузчик, на новом диске его нет. Поэтому выполним:


dpkg-reconfigure grub-pc

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


mdadm-extending-011.pngПерезагружаем систему, выбрав в BIOS в качестве загрузочного устройства новый жесткий диск. Если все было сделано правильно, то вы загрузитесь уже с нового жесткого диска. Теперь нужно пометить sda как сбойный и исключить его из массива:


mdadm -f /dev/md0 /dev/sda1
mdadm -f /dev/md1 /dev/sda5

Выключаем сервер, физически заменяем диск на новый, загружаемся. Проверяем дисковую конфигурацию:


mdadm-extending-012.pngКак видим, теперь у нас в системе появился новый неразмеченный диск sda, но так как нам уже не нужно создавать разделы с отличным от sdb размером, то просто скопируем разметку с одного диска на второй, для этого используем еще одну утилиту sfdisk:


sfdisk -d /dev/sdb | sfdisk /dev/sda

mdadm-extending-013.pngПри выполнении данной операции важно не перепутать диски местами, иначе вы скопируете разметку с пустого диска на диск с данными, что приведет к их утере. Первым следует указать диск источник, вторым - целевой диск. Плюс данной операции - вместе с разметкой скопируется также загрузчик.


Снова добавим разделы в массив:


mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda5

Дождемся окончания ресинхронизации:


mdadm-extending-014.pngПерезагрузимся несколько раз и убедимся, что загрузка возможна с обоих физических дисков. Теперь снова выполним команду:


lsblk 

и внимательно изучим вывод:


mdadm-extending-015.pngНесмотря на то, что мы увеличили размер sda1/sdb1 и sda5/sdb5 размеры массивов md0 и md1 остались неизменными. Но если мы вспомним, что программный RAID в Linux строится поверх разделов, то все станет на свои места. Это аналогично тому, что если бы мы заменили жесткий диск в системе на более емкий, но перенесли раздел без изменения размера.


Что делать? Расширить объем массива, для этого выполните команды:


mdadm --grow /dev/md0 --size=max
mdadm --grow /dev/md1 --size=max

Что у нас получилось?


mdadm-extending-016.png


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


df -h

mdadm-extending-017.pngИз ее вывода видно, что размер файловой системы не изменился и нам по-прежнему доступно около 17 ГБ. Но здесь нет никакой ошибки, если мы вспомним, что программный RAID является для системы аналогом диска, который содержит раздел с файловой системы, то поймем, что несмотря на то, что мы увеличили размер диска, нам следует также увеличить размер раздела с данными. Для этого выполним:


resize2fs /dev/md0

mdadm-extending-018.pngВот теперь можно считать процесс расширения массива законченным, мы расширили все необходимые разделы и теперь можем использовать все доступное пространство новых дисков. Сам процесс может показаться несколько сложным, но если представить всю эту систему как матрешку, когда одни разделы вкладываются в другие - то все станет на свои места и система вновь станет стройной и логичной.


А в заключение не будет лишним напомнить, что все проведенные нами операции несут потенциальный риск полной потери данных, поэтому перед тем, как выполнять указанные в статье действия создайте полную резервную копию вашей системы.



https://interface31.ru/tech_it/2019/04/kak-uvelichit-razmer-programmnogo-raid-massiva-v-linux.html

переустановка удаленного системного приложения под android


Рассказываю, как я достал нужные файлы из прошивки и записал их в планшет. Авось кому пригодится, там есть несколько не вполне прямолинейных моментов.

1) Распаковываю файл прошивки T285XXU0APE1_T285OXE0APC1_T285XXU0APF1_HOME.tar.md5 . Естественно, tar-ом

tar xvf T285XXU0APE1_T285OXE0APC1_T285XXU0APF1_HOME.tar.md5

2) получается куча файлов, в частности нужный мне system.img . Этот system.img не является еще образом диска, он пожат некоей технологией под названием sparse image file. Его нужно распаковать командой

simg2img system.img system.raw

программа simg2img в моем дистрибутиве (debian testing) находится в пакете android-sdk-libsparse-util

3) полученный образ system.raw все еще нельзя смонтировать, потому что что у него обрезан конец - незначащие последние блоки данных. Нужно добить файл пустыми блоками до двух гигабайт. Возможно, для этого существует более элегантное решение, но я поступил в лоб, использовав dd

dd if=/dev/zero of=sys.raw count=524300 bs=4096
dd if=system.raw of=sys.raw conv=notrunc

Необходимые числа можно посмотреть в dumpe2fs и/или в ругани dmesg при попытке подмонтировать system.raw

4) теперь можно смонтировать образ диска куда-нибудь в файловую систему, бо это обычный ext4

sudo mount -o loop sys.raw /mnt/01/

5) для перемещения файлов на их место в планшете надо использовать adb. Для того пользоваться adb нужно разрешить его в настройках планшета. Я не буду это описывать, поскольку все разрешения у меня стоят уже очень давно и подробностей я уже не помню. Документации на эту тему вагон.

6) По какой-то причине файлы нельзя записать прямо на их место в /system/priv-app/. Нужно сначала записать их в пользовательское пространство, чтобы затем шеллом под adb переместить их на место. Нет, и после перемонтирования /system тоже нельзя.

adb push /mnt/01/priv-app/VpnDialogs/ /sdcard

7) теперь запускаем шелл и перемонтируем /system для записи
adb shell
>su
>mount -oremount,rw /system

8) Теперь можно копировать. Из под той же сессии adb shell
cp -r /sdcard/VpnDialogs /system/priv-app/

9) После копирования пермишены по какой-то трансцедентной причине портятся. Поэтому нужно файл за файлом их восстановить.
>chmod 755 /system/priv-app/Vpn/Dialogs/
>chmod 755 /system/priv-app/Vpn/Dialogs/arm/
>chmod 744 /system/priv-app/Vpn/Dialogs/*.apk
>chmod 744 /system/priv-app/Vpn/Dialogs/arm/*.odex

10) перемонтировать /system обратно в ro мне было лень, тем более что он все равно туда сбросится при перезагрузке.

11) Обратите внимание, что приложение должно быть извлечено из того же самого образа, который был прошит. Приложения в /priv-app вроде как подписаны, и приложение из другой сборки может не заработать.

http://lj.rossia.org/users/lqp/623571.html

просмотр и конвертация .webp




заглянуть
для просмотра изображений с расширением .webp годится imagemagik или gthumb, нужно установить libwebp

sudo apt-get install webp
display example.webp

конвертация
cwebp -q 90 example.jpeg -o example.webp
dwebp example.webp -o example.png

конвертировать все файлы .webp в папке
for i in `find . -iname "*.webp"`; do dwebp $i -o $i.png; rm $i; done

переименовать все файлы с .webp в папке
find . -type f | sed 'p;s:.webp.:.:' | xargs -n2 mv

https://itsfoss.com/webp-ubuntu-linux/
https://lisakov.com/blog/renaming-find-sed-xargs-mv/

Как включить подсистему Linux в Windows Server 2016




посмотреть

http://winitpro.ru/index.php/2017/12/27/kak-vklyuchit-windows-subsystem-for-linux-v-windows-server-2016/
https://docs.microsoft.com/ru-ru/windows/wsl/install-on-server
https://habr.com/ru/post/347078/

systeminfo | Select-String "^OS Name","^OS Version"

Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1804 -OutFile ~/Ubuntu.zip -UseBasicParsing

Expand-Archive ~/Ubuntu.zip ~/Ubuntu

Remove-Item Ubuntu.zip

Ubuntu.exe

cmd.exe /c dir

export PATH=$PATH:/mnt/c/Windows/System32

$userenv = [System.Environment]::GetEnvironmentVariable("Path", "User")
[System.Environment]::SetEnvironmentVariable("PATH", $userenv + "C:\Users\Administrator\Ubuntu", "User")

$notepad.exe "C:\temp\test.txt"
$notepad.exe C:\\temp\\test.txt


прочее
Kali в Windows-подсистеме для Linux
Installing Kali Linux as a Windows 10 Subsystem for Linux
lxrun /install

git clone https://github.com/RoliSoft/WSL-Distribution-Switcher.git
cd WSL-Distribution-Switcher
python get-prebuilt.py kalilinux/kali-linux-docker
python install.py rootfs_kalilinux_kali-linux-docker_latest.tar.gz
lxrun /setdefaultuser root

http://winitpro.ru/index.php/2017/12/27/kak-vklyuchit-windows-subsystem-for-linux-v-windows-server-2016/
https://docs.microsoft.com/ru-ru/windows/wsl/install-on-server
https://habr.com/ru/post/347078/

полная статья тут

Тонкости управления компонентами Windows




глянуть
http://www.outsidethebox.ms/12922/#ua
переменная %ua%, соответствует моей рабочей папке.
В командной строке
:: Задайте путь к рабочей папке (избегайте кириллицы и пробелов в пути)
set ua=C:\unattend
:: Создайте папку
md %ua%

В PowerShell
# Задайте путь к рабочей папке (избегайте кириллицы и пробелов в пути)
$env:ua = "C:\unattend"
# Создайте папку
md $env:ua

Отображение сведений о компонентах
DISM /online /get-features /format:table >%userprofile%\desktop\features.txt
DISM /online /get-featureinfo /featurename:NetFx3

Эквивалентные команды PowerShell
Get-WindowsOptionalFeature -Online | ft >$env:userprofile\desktop\features.txt
Get-WindowsOptionalFeature -Online -FeatureName NetFX3



Отключение и удаление компонентов в образе
Скопируйте на локальный диск файл install.wim из папки sources установочного диска и последовательно выполняйте перечисленные ниже команды.

Подключите образ:
DISM /Mount-Image /Imagefile:%ua%\wim\install.wim /index:1 /MountDir:C:\mount\

Проверьте состояние компонента Hyper-V (он должен быть включен):
DISM /Image:%ua%\mount /Get-FeatureInfo /FeatureName:Microsoft-Hyper-V-All

Удалите компонент Hyper-V:
DISM /Image:%ua%\mount /Disable-Feature /FeatureName:Microsoft-Hyper-V-All /Remove

Сохраните изменения в образе:
DISM /Unmount-Image /MountDir:%ua%:\mount /Commit

Эквивалентные команды PowerShell
Mount-WindowsImage -ImagePath $env:ua\wim\install.wim -Index 1 -Path $env:ua\mount
Disable-WindowsOptionalFeature -Path $env:ua\mount -FeatureName Microsoft-Hyper-V-All
Get-WindowsOptionalFeature -Path $env:ua\mount -FeatureName Microsoft-Hyper-V-All
Dismount-WindowsImage -Path $env:ua\mount -Save



Включение и восстановление компонентов в образе

Подключите образ с удаленным компонентом Hyper-V:
Mount-WindowsImage -ImagePath $env:ua\wim\install.wim -index 1 -Path C:\mount

Посмотрите список всех удаленных компонентов. В PowerShell это делается элементарно:
Get-WindowsOptionalFeature -Path $env:ua\mount | where state -like *removed

Восстановите компонент Hyper-V, указывая путь к чистому WIM-образу в качестве источника файлов:
Enable-WindowsOptionalFeature -Path $env:ua\mount -FeatureName Microsoft-Hyper-V-All -Source $env:ua\wim\install-clean.wim:1

Убедитесь в том, что компонент включен:
Get-WindowsOptionalFeature -Path $env:ua\mount -FeatureName Microsoft-Hyper-V-All

Отключите образы:
Dismount-WindowsImage -Path $env:ua\mount -Save
Dismount-WindowsImage -Path $env:ua\mount-clean -Discard

Добавление компонента .NET Framework 3.5 в образ
Mount-WindowsImage -Imagepath C:\wim\install.wim -Index 1 -Path C:\mount
Enable-WindowsOptionalFeature -Path C:\mount -FeatureName NetFx3 -Source Х:\sources\sxs -LimitAccess
Dismount-WindowsImage -Path C:\mount -Save

Управление компонентами работающей системы
# Проверка состояния компонента
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
# Удаление компонента
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All -Remove
# Восстановление компонента из чистого WIM-образа
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All -Source C:\wim\install-clean.wim:1

Компонент .NET Framework 3.5 включается так:
Enable-WindowsOptionalFeature -Online -FeatureName NetFx3 -Source Х:\sources\sxs -LimitAccess

Сколько места можно сэкономить удалением компонентов
Get-WindowsOptionalFeature -Online | where state -eq 'disabled'| ft

полная статья тут