Поднимаем FTP сервер на CentOS 7

Пошаговый гайд, аналог статьи про TFTP

0) Отключаем SELinux если раньше это не сделали и перезагружаем сервер (если уверены что он нам не нужен или не умеем с ним работать). Если без отключения для заливки файлов должны помочь строки “setsebool -P ftp_home_dir on” и “setsebool -P allow_ftpd_full_access on”

sudo vi /etc/selinux/config
SELINUX=disabled
1) Устанавливаем сервер, кладем в папку по умолчанию /var/ftp необходимые файлы
sudo yum -y install vsftpd
cp test_file /var/ftp/
2) Добавляем сервис FTP как разрешенный в файрволл и перезагружаем его (мягко для применения правил без разрыва существующих коннектов)
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
3) Запускаем FTP сервис, смотрим его состояние, добавляем сервис в автозагрузку
sudo systemctl start vsftpd
sudo systemctl status vsftpd
sudo systemctl enable vsftpd
4) Проверяем работу сервиса через обычный браузер
ftp://192.168.1.22/

Удаление

sudo firewall-cmd --permanent --remove-service=ftp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
sudo yum -y remove vsftpd

Ruby HTTP get/post

Simple get

Простая функция для отправки http get.

def get(request)
request = CGI::escape(request)
uri = URI("http://#{$server}/#{request}")
Net::HTTP.get(uri)
end

Get with header

Пример запроса с header. Обращаю внимание, что в старой версии ruby 1.9.3 обязательно нужно к uri применить метод .request_uri, в новых не обязательно.

Читать дальше

Linux: использование yum в CentOS (обновление, установка, удаление приложений)

Аналог статьи про Ubuntu, Gentoo.

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

Обновление всех приложений (сразу и обновляем данные из репозиториев о пакетах и ставим эти пакеты)

sudo yum update

Обновление конкретного приложения

sudo yum update certbot

Список всех приложений

sudo yum list installed

Список установленных приложений

sudo yum list installed

Поиск приложения

yum search python36

Просмотр информации о приложении

yum info python36u-pip

Удаление ненужных приложений

sudo yum autoremove

Удаление конкретного приложения

sudo yum -y remove vsftpd
Проблемы

Если ни одно из приложений при обновлении не устанавливается с ошибкой невозможности аллоцировать память – скорей всего память утекла, поможет перезагрузка.

Читать дальше

Заметки по MacBook и MacOS

  • Заклеил логотип Apple на ноуте крутым стикером Omne tulit punctum, qui miscuit utile dulci. Ноут прекрасный и я его всем рекомендую, но конкретно эта реклама Apple из моего кармана мне не нравится.
  • Если залипают клавиши на клавиатуре butterfly – возьмите трубку пылесоса и под полным напором прочистите клавиши.


Читать дальше

Ruby: генератор списка выходных на год

Простейший генератор списка выходных на год.

Что можно кастомизировать (жирным в коде):

  • В переменной cur_date указываем дату отчета
  • В счетчике можно подкрутить количество дней с 365 до любого количества
  • Строку вывода можно заменить генерацией INSERT в какую то SQL таблицу (закоменчено)
#bin/generate_vacation_list.rb

require 'time'

cur_date = Date.new(2019,1,1)
counter = 0
while counter < 365
 puts "#{cur_date}" if cur_date.saturday?


Читать дальше

Отзыв HP spectre x360 16гб RAM 512гб SSD

Брал топовый Spectre x360 13-ae003ur с 16гб RAM, 1024гб SSD и разрешением UHD 3840×2160. Очень хотел convertible и выбирал его довольно тщательно, полагался во многом на оценку топовых блогеров – Spectre x360 признавался во многих обзорах уже два года лучшим с точки зрения цены-качества convertible.


Читать дальше

Ruby: работа с текстом

 String Class

Индексы

Строка в ruby является объектом класса String.  По индексу строки, по аналогии с индексом массива, можно извлекать, изменять и удалять данные из строки. Причем обращения по индексу идет через те же квадратные скобки, что и для массива.

Обращаясь к строке можно извлечь например первые 6 элементов или последний символ на основе индекса строки, по типу того, как мы извлекаем элементы array:

str[start, lenght]
str[0,6] - извлекаем первые 6 элементов, где 0 - первый символ, 6 - сколько символов от первого
str[7..10] - извлекаем с 7го по 10ый символы используя range
str[-1] - извлекаем последний символ из строки
str[-6,6] - извлекаем с конца строки шесть последний символов
str[-6..-1] - извлекаем с конца строки шесть последний символов используя range

Кроме получения данных по индексу можно эти данные и менять/удалять/добавлять:

str[0,6] = "new_first_6_char" - заменяем первые 6 элементов на новые
str[0,6] = "" - удаляем
str[16,0] = "the end" - добавляем в конец строки данные (16 символ последний)
str[-1,0] = "the end" - добавляем в конец строки данные (более корректный способ)
Методы

Почти все в ruby является объектом.

Читать дальше

Установка и использование Dante в качестве сервера Socks5 на Ubuntu 16

В свете огромной вероятности блокировки telegram в ближайшее время возник вопрос в установке и использовании Dante в качестве сервера Socks5 на Ubuntu 16.

Большая часть инфы нагло взята из офф. доки и отсюда.

 

Ставим

Cтавим из пакета т.к. в репозитории старая версия, которая плохо работает при необходимости авторизации (подробнее в ссылке выше).

Читать дальше

Ruby: работа с ФС (файлами и папками)

ФАЙЛЫ

дока

Прежде всего нужно обозначить, что закрытие файла крайне необходимый процесс:
1) открытый файл может быть заблокирован файловой системой для других скриптов
2) при открытии создается file descriptor, их количество ограничено файловой системой, хотя и обычно значение ограничения довольно большое
3) могут произойти race conditions, когда несколько процессов пытаются прочитать/записать один и тот же ресурс (в данном случае файл) в один момент времени

Чтение и вывод

# вывод контента (первой строки)
File.open("test.txt") do |file| # открытие файла
 puts file.gets # вывод контента (первой строки)
end # автоматическое закрытие по завершению метода Open, про необходимость закрытия теория выше

# Вывод всех строк
File.open("test.txt").each do |line|
 puts line
end

# Кладем строки файла в array, где каждая новая строка является отдельным элементом массива.


Читать дальше

Автоматизация

Автоматизация – замена ручной работы программой на основе алгоритма.

 

Плюсы

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

 

Что не автоматизировать

Автоматизация не является ответом на все задачи:

  • в сфере творчества
  • задача появляется слишком редко
  • ресурсы (человеческие, временные, материальные), которые необходимы для автоматизации задачи, слишком велики и не сравнимы с преимуществами ее автоматизации

 

Принимаем решение

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

Читать дальше