Восстановление блога

После долгого времени сопровождающейся моей ленью, а так же ожидания освобождения “угнанного” домена, блог всё же будет восстановлен, но не в полном объёме.

В данный момент блог находится в аварийно-восстановительном состоянии: индексация никакой, оформление стоковое, многие старые статьи
остались “за бортом”. И нет, это не потому что они у меня не сохранились. Просто по прошествию времени я взглянул на них трезво и… понял что часть устарела, а часть - не нужна вовсе. Так же я всё еще не знаю как быть со статьями группы “Уроки во Bukkit”: сами статьи устарели, а нужно ли писать новые/обновленные - не знаю. С того времени многое поменялось и подобных статей на русском уже предостаточно (как мне показалось). Это, собственно, решать вам - читателям. Пока что комментариев в блоге нет (но они будут), то свои мысли на этот счет можно излить мне в личку в VK.

Classloader: динамичкеская загрузка классов

Вот вам простой вопрос: как идентифицируются классы в JVM? Правильный ответ: по полному имени класса, состоящее из имени пакета и собственного имени класса. Из этого напрашивается вывод, что в программе не может существовать два класса с одинаковыми полными именами. Однако, это не так. Как и в начальной школе, где нас учили правилу “на ноль делить нельзя”, а потом в старших классах рассказали про бесконечность, так и в Java есть “маленькая ложь”.

В действительности, классы идентифицируются по имени пакета, собственного имени класса и… загрузчику, Classloader‘у. Таким образом, в программе могут существовать два класса с одинаковыми полными именами и не конфликтовать друг с другом.

Об этом и других вкусностях Classloader‘а мы сегодня и поговорим.

Read More

Шпаргалка по SSH

Ключи

Генерация ключа

ssh-keygen

Сменить пароль на ключ

ssh-keygen -p
  • ~/.ssh/id_rsa.pub - открытый ключ. Его копируют на сервера, куда нужно получить доступ;
  • ~/.ssh/id_rsa - закрытый ключ. Его нельзя никому показывать. В случае утечки - срочно менять ключ.

Копирование ключа на сервер

ssh-copy-id user@server

Если консоль будет ругаться на “неизвестный хост” (Warning: Permanently added the RSA host key for IP address 'x.x.x.x' to the list of known hosts.), то нужно создать файл ~/.ssh/config и прописать туда следующее:

UserKnownHostsFile ~/.ssh/known_hosts

Read More

Как отключить ping отклик на Linux

Для отключения пинга, из-под root‘а выполняем следующую команду:

echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all

Что бы обратно включить ping, меняем 1 на 0

echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all

Так же можно воспользоваться для этих целей iptables:

iptables -I INPUT -p icmp -j DROP

Но в отличии от “редактирования” файла icmp_echo_ignore_all, iptables позволяет запретить пинг только на определенном сетевом интерфейсе:

iptables -I INPUT -i eth0 -p icmp -j DROP

Источники:

Nginx и HTTP Auth basic

Редактируем файл /etc/nginx/nginx.conf и в секции location добавляем такие строки:

location / {
auth_basic "Hello! Enter password";
auth_basic_user_file /etc/nginx/nginx.htpasswd;
}
  • auth_basic - указываем на включение режима http авторизации;
  • auth_basic_user_file - указываем пусть к файлу с паролями.

Файл с паролями имеет следующий синтаксис:

# комментарий
логин1:пароль1
логин2:пароль2:комментарий

Пароли хранятся в зашифрованном виде. Nginx поддерживает три типа шифрования: стандартный crypt, апачевский метод и md5. Генерировать пароль можно либо через утилиту htpasswd из пакета Apache, либо через openssl.

Стандартный метод nginx:

openssl passwd -crypt PASSWORD

Метод Apache2:

openssl passwd -apr1 PASSWORD
htpasswd -c /etc/nginx/nginx.htpasswd admin

md5 метод:

openssl passwd -1 PASSWORD

Если необходимо на какой-то суб-директории отключить авторизацию, то вместо пригласительного текста пишем off:

location /api/ {
auth_basic off;
}

Источники:

Работа с файлами как с дисками

Для начала давайте создадим пустой файл, размером в 1 гибибайт

dd if=/dev/zero of=disk.dd bs=$((1*1024*1024)) count=1024

Теперь запишем в него таблицу разделов

parted disk.dd
parted> mktable msdos
parted> mkpart primary 0% 100%
parted> unit B
parted> print
Модель: (file)
Диск disk.dd: 1073741824B
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: msdos
Флаги диска:

Номер Начало Конец Размер Тип Файловая система Флаги
1 1048576B 1073741823B 1072693248B primary

Подготовим наш раздел из файлодиска к работе. Подключаем его как блочное устройство

losetup --offset 1048576 --find --show disk.dd
/dev/loop0

Отформатируем и смонтируем его

mkfs.ext4 /dev/loop0
sudo mount /dev/loop0 /mnt

По завершению работ, отключаем все устройства

sudo umount /mnt
losetup -d /dev/loop0

Работа с физическими носителями в VirtualBox

Заранее хочется предупредить, что работая с физическими носителями через виртуальную машину вы рискуете всё запороть. Все ваши действия производятся на ваш страх и риск. Я предупредил.

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

- Зачем это нужно?

Ответ простой, как и сам вопрос: работа в двух операционных системах, одна из которых находится на физическом носителе. Например LiveUSB или Linux, которая находится на соседнем разделе диска. Причин использовать этот механизм может быть много. Но перейдем же к исполнению нашей “хотелки”.

Для начала нам нужно узнать адрес, по которому можно будет напрямую обратиться к носителю. После чего запускаем команду по созданию некой “ссылки” на наш носитель.

Windows

C:\> wmic diskdrive list brief
Caption DeviceID Model Partitions Size
VBOX HARDDISK ATA Device \\.\PHYSICALDRIVE0 VBOX HARDDISK ATA Device 3 500105249280
C:\> VBoxManage internalcommands createrawvmdk -filename C:\mydrive.vmdk -rawdisk \\.\PHYSICALDRIVE0

Так же можно вместо целого диска, подключать только его разделы. Для этого добавьте параметр --partitions и через запятую перечислите номера разделов

C:\> VBoxManage internalcommands createrawvmdk -filename C:\mydrive.vmdk -rawdisk \\.\PHYSICALDRIVE0 -partitions 1,3

Linux

vboxmanage internalcommands createrawvmdk -filename /var/mydrive.vmdk -rawdisk /dev/sda

Обязательно добавить пользователя, от имени которого будет запускаться virtualbox, в группы vboxusers и disk

usermod -a -G vboxusers,disk $(whoami)

Далее подключаем нашу “ссылку” mydrive.vmdk к VM как обычный диск и работаем.

Конец эпохи CraftBukkit

Эта статья повествует о закате серверной платформы CraftBukkit, которая являлась лидером среди других серверных платформ под Minecraft. Ситуация с CraftBukkit является очень наглядной в вопросах авторских прав и честности перед общественностью. Но обо всём по порядку.

Read More