В качестве примера будет использован образ Ubuntu 16.04: подготовка рабочего окружения, настройка необходимых параметров, сборка и загрузка образа в облачный сервис.

Также будут рассмотрены необходимые шаги для подготовки образа с полной совместимостью со всеми дополнительными возможностями сервиса «Виртуальное приватное облако».

В качестве инструмента для сборки образа мы будем использовать diskimage-builder. Это набор компонентов для подготовки образов операционных систем, файловых систем, RAM-дисков с открытым исходным кодом, поддерживаемый сообществом OpenStack.

Инструмент поддерживает создание образов большинства распространенных дистрибутивов GNU/Linux:

Centos
Debian
Fedora
RHEL
Ubuntu
Gentoo
OpenSUSE

По умолчанию diskimage-builder подготавливает образ cloud-версии операционной системы, поэтому в образе будут присутствовать пакеты cloud-init и cloud-utils, необходимые для автоматической настройки системы в облаке.

Создание образа Ubuntu 16.04
Мы будем готовить образ на машине с ОС Ubuntu 14.04.

Для начала установим необходимые зависимости:

sudo apt update
sudo apt -y install python-pip curl

Затем установим diskimage-builder:

sudo pip install diskimage-builder

Создадим базовые директории для работы:

mkdir -p ~/diskimage-builder/{images,elements}

Для настройки diskimage-builder нам необходимо указать несколько дополнительных параметров, значение которых хранится непосредственно в переменных окружения командной оболочки (таким образом, вы можете указывать их в командной строке):

ARCH="amd64" — архитектура образа.

BASE_ELEMENTS="ubuntu bootloader cloud-init-datasources" — здесь мы укажем используемые элементы diskimage-builder. Элементы представляют собой набор bash-скриптов, которые выполняют все рутинные действия по подготовке и изменению образа. Наиболее важным для нас является элемент ubuntu, который скачает и распакует стандартный официальный образ дистрибутива, проведет установку требуемых пакетов и обновления системы до актуального состояния внутри образа при помощи утилиты chroot, и соберет все обратно в образ, готовый к использованию. Элемент bootloader устанавливает загрузчик (в нашем случае GRUB2) в подготавливаемый образ системы, а cloud-init-datasources передаёт список источников данных для утилиты cloud-init, которая необходима для первоначальной настройки операционной системы при запуске.

DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, Ec2" — источники данных для элемента cloud-init-datasources.

DIB_RELEASE="xenial" — версия операционной системы, на базе которой мы будем создавать образ.

IMAGE_PATH="~/diskimage-builder/images/ubuntu-16.04" — имя и путь для образа.

Сборка образа осуществляется с помощью команды:

disk-image-create vm $BASE_ELEMENTS -t raw -o $IMAGE_PATH

После ключа -t указываем нужный формат образа. Поддерживаются образы: qcow2, tar, vhd, docker, raw.

Перед непосредственной сборкой образа вам скорее всего понадобится внести дополнительные настройки в систему, например:

установить дополнительные пакеты в систему;
отключить механизм predictable_interface_naming, который переименовывает привычные имена интерфейсов eth0, eth1,… в имена вида enp0s3, ens3 и т.д;
отключить создание пользователя «ubuntu» и разрешить доступ пользователю «root» по протоколу SSH;
регенирировать SSH-ключи для каждой созданной из данного образа виртуальной машины;
изменить предустановленную временную зону.

Для этого нам потребуется создать дополнительный элемент в директории ~/diskimage-builder/elements.

Создадим директории:

mkdir -p ~/diskimage-builder/elements/ubuntu-16-custom/{install.d,post-install.d,finalise.d}

Внутри директории ~/diskimage-builder/elements/ubuntu-16-custom создадим файл README.rst с описанием нового элемента:

================
ubuntu-16-custom
================

Customize Ubuntu 16.04 (Xenial)

В директории ~/diskimage-builder/elements/ubuntu-16-custom/install.d создадим скрипт 50-install-additional-packages:

#!/bin/bash

packages="python2.7
python
python-minimal"

apt -y install $packages

Скрипты в директории install.d выполняются при сборке образа во время установки основных пакетов. Созданный нами скрипт 50-install-additional-packages установит в систему python версии 2.7, который все еще необходим для работы многих приложений. По умолчанию в образе Ubuntu 16.04 присутствует только python версии 3.5.

Вы также можете дополнить этот список необходимыми вам пакетами, которые потребуется установить в образ.

Далее в директории ~/diskimage-builder/elements/ubuntu-16-custom/post-install.d необходимо создать скрипт 50-configure-system для изменения конфигурации системы:

#!/bin/bash

# Permit password auth via SSH
echo 'ssh_pwauth: true' >> /etc/cloud/cloud.cfg.d/50_remote_access.cfg
# Generate new keys in first boot
echo 'ssh_deletekeys: true' >> /etc/cloud/cloud.cfg.d/50_remote_access.cfg
# Don’t disable root access via SSH
echo 'disable_root: false' >> /etc/cloud/cloud.cfg.d/50_remote_access.cfg
# Don’t create "ubuntu" user
echo 'users: []' >> /etc/cloud/cloud.cfg.d/50_remote_access.cfg
# Change default timezone to MSK
echo 'timezone: Europe/Moscow' >> /etc/cloud/cloud.cfg.d/50_timezone.cfg
# Change PermitRootLogin value to "yes"
sed -i 's/PermitRootLogin .*/PermitRootLogin yes/g' /etc/ssh/sshd_config
# Set root password to empty
passwd -d root

Скрипты в директории post-install.d выполняются сразу после скриптов в директории install.d.

Также нам потребуется изменить настройки GRUB для добавления параметра запуска «net.ifnames=0», который сохранит имена интерфейсов в привычном формате ethN.

Добавим скрипт 50-configure-grub в директории ~/diskimage-builder/elements/ubuntu-16-custom/finalise.d:

#!/bin/bash

sed -i 's/\(^GRUB_CMDLINE_LINUX.*\)"$/\1 net.ifnames=0"/' /etc/default/grub

update-grub

Скрипты в директории finalise.d выполняются после всех основных этапов подготовки образа.

После создания описанных скриптов нам необходимо изменить их атрибуты, для этого выполним команду chmod:

chmod 0755 ~/diskimage-builder/elements/ubuntu-16-custom/*d/*

Теперь перед созданием образа нам необходимо указать путь для нашего нового элемента. Это можно сделать при помощи параметра ELEMENTS_PATH.

Чтобы не указывать параметры каждый раз напрямую в командной строке, в директории ~/diskimage-builder/ создадим скрипт build-ubuntu-16.04, который задаст параметры diskimage-builder и выполнит сборку образа:

#!/bin/bash

export ARCH="amd64"
export BASE_ELEMENTS="bootloader cloud-init-datasources ubuntu ubuntu-16-custom"
export DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, Ec2"
export DIB_RELEASE="xenial"
export ELEMENTS_PATH="./elements/:/usr/share/diskimage-builder/elements/"
export IMAGE_PATH="./images/ubuntu-16.04"

disk-image-create vm $BASE_ELEMENTS -t raw -o $IMAGE_PATH

Изменим атрибуты этого файла:

chmod 0755 ~/diskimage-builder/build-ubuntu-16.04

После этого должна получится вот такая иерархия файлов:

$tree -p ~/diskimage-builder
/home/user/diskimage-builder
├── [-rwxr-xr-x] build-ubuntu-16.04
├── [drwxr-xr-x] elements
│ └── [drwxr-xr-x] ubuntu-16-custom
│ ├── [drwxr-xr-x] finalise.d
│ │ └── [-rwxr-xr-x] 50-configure-grub
│ ├── [drwxr-xr-x] install.d
│ │ └── [-rwxr-xr-x] 50-install-additional-packages
│ ├── [drwxr-xr-x] post-install.d
│ │ └── [-rwxr-xr-x] 50-configure-cloud-init
│ └── [-rw-r--r--] README.rst
└── [drwxr-xr-x] images

Запустим скрипт build-ubuntu-16.04:

cd ~/diskimage-builder
sudo ./build-ubuntu-16.04

Утилита sudo при вызове нужна для того, чтобы предложение ввести пароль не появилось посередине процесса подготовки образа. Данное поведение объясняется тем, что некоторые предустановленные элементы diskimage-builder содержат вызов sudo (например, скрипт 01-ccache от элемента base, который выполняется при сборке большинства дистрибутивов).

По окончании работы нашего скрипта новый образ будет находиться в директории ~/diskimage-builder/images/ubuntu-16.04.raw.

Вы можете использовать созданный образ в сервисе Selectel «Виртуальное приватное облако», загрузив его через веб-интерфейс панели VPC, либо через glance API.

Обратите внимание, что пароль для root был удален на этапе сборки образа, поэтому доступ к виртуальной машине по SSH изначально будет возможен только по ключу. Вы можете добавить ключ SSH при создании машины в панели VPC. Доступ к серверу возможен и через виртуальную консоль no-VNC в панели управления, в этом случае вам не потребуется вводить пароль root, если он не был установлен.
Пароль root устанавливается стандартным способом с помощью утилиты passwd.

Если вы попытаетесь использовать образ, созданный при помощи описанных выше процедур, в нашем сервисе «Виртуальное приватное облако» (VPC), то столкнётесь с рядом ограничений. Для вас не будут доступны следующие возможности VPC:

установка исходного пароля, сгенерированного сервисом VPC;
смена пароля root из веб-панели VPC;
смена пароля root с помощью nova API;
смена интерфейса для маршрута по умолчанию из веб-панели VPC;
автоматическое изменение настроек сетевых интерфейсов внутри системы, в том случае, если они были изменены в панели управления сервером;

В следующем разделе мы покажем, как сделать полностью совместимый с VPC образ.

Создание образа для сервиса «Виртуальное приватное облако»

Чтобы создаваемый образ был полностью совместим с сервисом VPC, на этапе сборки потребуется добавить дополнительные свойства свойств для образа и установить в систему дополнительные пакеты.

Добавим еще один элемент ubuntu-16-selectel, для этого создадим директорию:

mkdir -p ~/diskimage-builder/elements/ubuntu-16-selectel/

Внутри данной директории добавим описание элемента в файле README.rst:

====================
ubuntu-16-selectel
====================

Build ubuntu image for Virtual Private Cloud

Создадим требуемые директории для нового элемента:

mkdir -p ~/diskimage-builder/elements/ubuntu-16-selectel/{pre-install.d,install.d,post-install.d}

Изменим список репозиториев скриптом ~/diskimage-builder/elements/ubuntu-16-selectel/pre-install.d/50-add-mirrors:

#!/bin/bash

# Add key for Selectel OpenStack repository
apt-key adv --fetch-keys http://repo.os.selectel.org/selectel-openstack.key

cat <<EOF > /etc/apt/sources.list
## Selectel OpenStack repository
deb http://repo.os.selectel.org xenial main

## Selectel mirrors
deb http://mirror.selectel.ru/ubuntu xenial main restricted universe multiverse
deb http://mirror.selectel.ru/ubuntu xenial-updates main restricted universe multiverse
deb http://mirror.selectel.ru/ubuntu xenial-backports main restricted universe multiverse

## Security updates
deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
EOF

Добавим дополнительные пакеты скриптом ~/diskimage-builder/elements/ubuntu-16-selectel/install.d/50-add-selectel-packages:

#!/bin/bash

packages="crontab-randomizer
fstrim-blocks
qemu-guest-agent
set-root-pw"

apt -y install $packages

Будут установлены следующие утилиты:

crontab-randomizer — простой скрипт, который рандомизирует временные интервалы в /etc/crontab, далее мы добавим вызов данного скрипта при первом запуске системы;

fstrim-blocks — обертка для предустановленной утилиты fstrim, позволяет проводить TRIM файловой системы на быстрых дисках поблочно через небольшие интервалы, при установке добавит вызов в cron.weekly;

qemu-guest-agent — утилита, которая позволит передавать команды QMP для управления системой в виртуальную машину, в нашем случае данная утилита нужна для смены пароля виртуальной машины через панель VPC и nova API;

set-root-pw — скрипт для изначальной установки в виртуальной машине пароля, полученного из метаданных OpenStack, далее мы также добавим вызов этого скрипта при первом запуске системы;

Также во время сборки образа пакет cloud-init будет автоматически обновлен на версию, которая находится в зеркале Selectel OpenStack. Эта версия содержит патчи, которые обеспечивают консистентность настроек сети между виртуальной машиной и сервисом VPC.

Автоматическое обновление пакетов при сборке образа происходит при помощи предустановленного скрипта 00-up-to-date, во время стадии install.d.

Далее нам понадобится добавить дополнительные конфигурационные файлы для cloud-init, создадим в директории ~/diskimage-builder/elements/ubuntu-16-selectel/post-install.d скрипт 50-configure-cloud-init:

#!/bin/bash

# Prevent cloud-init to change custom apt mirrors
echo 'apt_preserve_sources_list: true' > /etc/cloud/cloud.cfg.d/50_selectel_mirror.cfg
echo 'system_info:' >> /etc/cloud/cloud.cfg.d/50_selectel_mirror.cfg
echo '- arches: [i386, amd64]' >> /etc/cloud/cloud.cfg.d/50_selectel_mirror.cfg
echo 'search:' >> /etc/cloud/cloud.cfg.d/50_selectel_mirror.cfg
echo 'primary:' >> /etc/cloud/cloud.cfg.d/50_selectel_mirror.cfg
echo '- http://mirror.selectel.ru/ubuntu' >> /etc/cloud/cloud.cfg.d/50_selectel_mirror.cfg
echo 'failsafe:' >> /etc/cloud/cloud.cfg.d/50_selectel_mirror.cfg
echo '- http://archive.ubuntu.com/ubuntu/' >> /etc/cloud/cloud.cfg.d/50_selectel_mirror.cfg

# Prevent cloud-init to disable EC2-style metadata
echo 'disable_ec2_metadata: false' > /etc/cloud/cloud.cfg.d/50_enable_ec2.cfg

# Perform some commands in boot time
# 'runcmd' only runs during the first boot
echo 'runcmd:' > /etc/cloud/cloud.cfg.d/50_first_boot_routines.cfg
echo '- set-root-pw 2> /dev/null' >> /etc/cloud/cloud.cfg.d/50_first_boot_routines.cfg
echo '- crontab-randomizer' >> /etc/cloud/cloud.cfg.d/50_first_boot_routines.cfg

Также рекомендуется удалить предустановленный скрипт /etc/cron.weekly/fstrim в случае использования fstrim-blocks, так как предустановленный вариант не содержит параметров поблочного запуска, что повлечет дополнительную нагрузку на систему при запуске fstrim .

Удалим данный файл простым скриптом ~/diskimage-builder/elements/ubuntu-16-selectel/post-install.d/51-remove-fstrim-weekly:

#!/bin/bash

rm -f /etc/cron.weekly/fstrim

Изменим атрибуты новых скриптов:

chmod 755 ~/diskimage-builder/elements/ubuntu-16-selectel/*d/*

Добавим новый элемент ubuntu-16-selectel в скрипт ~/diskimage-builder/build-ubuntu-16.04:

#!/bin/bash

export ARCH="amd64"
export BASE_ELEMENTS="bootloader cloud-init-datasources ubuntu ubuntu-16-custom ubuntu-16-selectel"
export DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, Ec2"
export DIB_RELEASE="xenial"
export ELEMENTS_PATH="./elements/:/usr/share/diskimage-builder/elements/"
export IMAGE_PATH="./images/ubuntu-16.04"

disk-image-create vm $BASE_ELEMENTS -t raw -o $IMAGE_PATH

Иерархия файлов должна иметь такой вид:

$ tree -p diskimage-builder
diskimage-builder
├── [-rw-r--r--] build-ubuntu-16.04
└── [drwxr-xr-x] elements
├── [drwxr-xr-x] ubuntu-16-custom
│ ├── [drwxr-xr-x] finalise.d
│ │ └── [-rwxr-xr-x] 50-configure-grub
│ ├── [drwxr-xr-x] install.d
│ │ └── [-rwxr-xr-x] 50-install-additional-packages
│ ├── [drwxr-xr-x] post-install.d
│ │ └── [-rwxr-xr-x] 50-configure-system
│ └── [-rw-r--r--] README.rst
└── [drwxr-xr-x] ubuntu-16-selectel
├── [drwxr-xr-x] install.d
│ └── [-rwxr-xr-x] 50-add-selectel-packages
├── [drwxr-xr-x] post-install.d
│ └── [-rwxr-xr-x] 50-configure-cloud-init
├── [drwxr-xr-x] pre-install.d
│ └── [-rwxr-xr-x] 50-add-selectel-openstack-mirror
└── [-rw-r--r--] README.rst

Запустим сборку образа:

cd ~/diskimage-builder
sudo ./build-ubuntu-16.04

Для загрузки образа со всеми необходимыми свойствами вам потребуется утилита glance и RC-файл доступа к проекту (его можно скачать в нашей панели управления; все необходимые инструкции опубликованы там же) https://support.selectel.ru/vpc/access/.

Команда для загрузки будет выглядеть так:

glance image-create --name Ubuntu-16.04-VPC \
--disk-format raw \
--container-format bare \
--property hw_disk_bus=scsi \
--property hw_scsi_model=virtio-scsi \
--property x_sel_image_owner=Selectel \
--property hw_qemu_guest_agent=yes \
--file ~/diskimage-builder/images/ubuntu-16.04.raw \
--progress

При загрузке будут добавлены свойства:

hw_qemu_guest_agent=yes — необходимо для поддержки механизма смены пароля сервера через панель VPC или через nova API; данное свойство будет работать только в том случае, если в образе присутствует утилита qemu-guest-agent не ниже версии 2.3 (в Ubuntu 16.04 используется версия 2.5);
x_sel_image_owner=Selectel — необходимо для поддержки отображения пароля в панели VPC;
hw_disk_bus=scsi, hw_scsi_model=virtio-scsi — данные свойства разрешат использование более современной и производительной шины virtio-scsi, одно из преимуществ которой это возможность использования TRIM.

После загрузки образ будет отображаться на вкладке «Образы» в вашем проекте VPC с именем Ubuntu-16.04-VPC.

При первом запуске сервера пароль для пользователя root будет сгенерирован и установлен автоматически. Он будет отображаться на вкладке «Консоль», там же при необходимости можно сгененировать новый пароль.

Помимо этого вам не придется производить настройки сетевых интерфейсов на сервере вручную, если вы изменили их в панели управления на вкладке «Порты». Чтобы cloud-init перенастроил сетевые интерфейсы, потребуется произвести перезагрузку сервера по питанию. После этого будут сгенерированы новые метаданные OpenStack c новыми настройками сети.

Вы можете запретить утилите cloud-init изменять настройки сети при каждой перезагрузке сервера. Для этого в установленной системе добавьте файл /etc/cloud/cloud.cfg.d/99_disable_network_config.cfg:

network:
config: disabled

В ближайшем будущем мы добавим возможность запрета автоматической перенастройки сети через веб-интерфейс панели VPC без необходимости редактирования конфигурации системы.

Заключение

В этой статье мы рассмотрели базовые возможности diskimage-builder, изучили способы добавления своих скриптов для изменения конфигурации образа, основные этапы сборки и пример загрузки готового образа в облачное окружение.

I wanted to put together a guide for new owners of 12th Generation Dell servers. Over the course of owning few 12th Generation Dell Servers (Rx20), I have come across few common issues encountered during firmware upgrades and I wanted to share my advice on overcoming them.

iDRAC Firmware

It's very important to observe caution while upgrading iDRAC Firmwares to prevent issues like thisthisthis and this. When these 12th Generation servers were shipped, the iDRAC and LifeCycle controller had different firmware. In Late 2014, Dell has decided to integrate the iDRAC and LifeCycle Controller firmwares into a single package called "Dell iDRAC with LifeCycle Controller" and the firmware is now common across iDRAC 7 and iDRAC8. The partition layout for the iDRAC eMMC was changed, due to which upgrades across legacy firmwares and the latest firmwares were failing, which was causing iDRAC to be permanently bricked with no resolution except for a motherboard replacement as of now. 2.10.10.10,A00 was the first firmware release for Dell iDRAC with LifeCycle Controller.

  1. If your iDRAC version is higher than 2.10.10.10, then you could directly upgrade to the latest version of the iDRAC firmware without running into any issues. As of writing, 2.61.60.60 is the latest iDRAC firmware.

  2. If your iDRAC version is lower then 2.10.10.10, DON'T UPGRADE TO THE LATEST VERSION OF THE iDRAC. UPGRADE YOUR FIRMWARE TO 1.66.65,A00 (LAST STANDALONE FIRMWARE) AND THEN UPGRADE TO 2.10.10.10,A00 (FIRST RELEASE OF COMMON FIRMWARE) AFTER WHICH YOU COULD DIRECTLY UPGRADE TO THE LATEST FIRMWARE AVAILABLE.

Power Supply Firmware

If you google for "dell psu bricked", you will come across many posts about people bricking their Dell server Power supplies during firmware upgrades. 12th Generation servers included firmwares for power supplies which can be upgraded just like any other components. However, the upgrade process was flawed and this resulted in several power supply bricks. More info here.

Dell no longer provides PSU firmware upgrades in Dell SUU ISO files and you will have to upgrade the firmware manually. I would personally recommend upgrading the firmware only if you are facing any issues with the PSU.

  1. Never run the power supply upgrade if you have 2 power supplies installed in the server which belong to the same manufacturer. Always remove one power supply and upgrade it one at a time. Although Dell doesn't explicitly state this as required, it's better to upgrade one at a time to prevent both PSUs getting bricked due to a faulty firmware.

  2. The server would power off for a period of upto 15 minutes for the power supply firmware upgrade to complete. Don't unplug the power supply or switch on the server.

  3. Once the firmware upgrade for the power supply completes, the server will automatically boot.

Avoid using iDRAC Virtual console for mounting SUU ISO

If you remotely mount a SUU ISO containing the firmware upgrades and boot it using iDRAC Virtual media, bear in mind that any updates to the iDRAC itself will kill the virtual media connection thereby possibly causing damage. A NIC update would also kill the connection if you decide to use the network LOM port for iDRAC instead of the dedicated port. Always create a bootable CD/USB drive and boot off it to upgrade your firmware.

NGINX великолепен! Вот только его документация по ограничению скорости обработки запросов показалась мне, как бы это сказать, несколько ограниченной. Поэтому я решил написать это руководство по ограничению скорости обработки запросов (rate-liming) и шейпингу трафика (traffic shaping) в NGINX.


Мы собираемся:


  • описать директивы NGINX,
  • разобраться с accept/reject-логикой NGINX,
  • визуализировать обработку всплесков трафика на различных настройках.

Зачастую, в силу того, что информация в сети распространяется не мгновенно, привязанные к серверу домены начинают работать не сразу. Чтобы не тратить время впустую, ожидая обновления кеша DNS, желательно сразу проверить настройку вашего DNS-сервера и убедиться, что по истечении 72 часов (это максимальное время обновления глобального кеша DNS) ваш домен заработает.

Первичная диагностика


Whois


Начать диагностику следует с запроса whois:
[root@dns ~]# whois firstvds.ru 
% By submitting a query to RIPN's Whois Service
% you agree to abide by the following terms of use:
% http://www.ripn.net/about/servpol.html#3.2 (in Russian)
% http://www.ripn.net/about/en/servpol.html#3.2 (in English).

domain: FIRSTVDS.RU
nserver: ns1.firstvds.ru. 82.146.43.2
nserver: ns2.firstvds.ru. 94.250.248.160
state: REGISTERED, DELEGATED, VERIFIED
org: CJSC "Pervyj"
registrar: REGTIME-REG-RIPN
admin-contact: http://whois.webnames.ru
created: 2002.08.07
paid-till: 2014.08.08
free-date: 2014.09.08
source: TCI

Last updated on 2014.03.18 03:36:35 MSK​

В данном примере мы видим, что домен проделегирован на сервера имен ns1.firstvds.ru. и ns2.firstvds.ru. с указанием IP-адресов (дочерние NS-сервера всегда прописываются с указанием IP). Это корректный вывод whois и примерно так должен выглядеть ответ whois для зарегистрированного и проделегированного домена. Исключение составляет IP, он указывается только для дочерних NS-серверов.

Определение

DNS (Domain Name System, «система доменных имён») — компьютерная распределённая система для получения информации о доменах. Основная область применения данной системы — преобразование имени хоста в IP-адрес и предоставления данных о маршрутизации почты. Хост — это любой компьютер или сервер, подключенный к локальной сети или интернету.

Принцип работы

Схематичное представление процесса определения определения IP-адреса по вводимому имени домена
Работа DNS достаточно проста, но из-за незнания её основ возникает основная масса проблем и вопросов при переносе существующего доменного имени и регистрации нового.

Вступление

В серверной среде работа с командной строкой занимает много времени. Часто используется оболочка bash – командная оболочка по умолчанию большинства дистрибутивов.

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

К счастью, bash-оболочка имеет некоторые довольно хорошо разработанные функции истории. Умение продуктивно использовать и управлять историей в bash позволяет тратить меньше времени на ввод команд, и  тем самым увеличивает объем выполненной работы. Как известно, среди разработчиков популярен так называемый принцип DRY (Don’t Repeat Yourself). Продуктивное использование истории в bash помогает работать с информацией согласно данному принципу.

Это руководство демонстрирует все функции на Linux Ubuntu 12.04, но почти все современные дистрибутивы Linux будут работать подобным образом.

Подкатегории

В этом разделе содержатся статьи с сайта habrahabr.ru
Сделано чтоб не терять интересные статьи, потому что их снимают с публикаций иногда...