03 Апрель, 2015

Как распаковывать архивы разных форматов в Linux

На самом деле нет нужды заморачиваться вспоминая что сейчас нужно - tar zxf или tar jxf для конкретного случая (tar.gz и tar.bz).

Самый простой вариант это писать:

tar xf archivename

Утилита tar выберет нужный распаковщик автоматом.

Еще заодно напомню про команду file которая пытается определить тип указанного в аргументах файла. Очень полезная утилита на самом деле.

03 Апрель, 2015

Подменяем время на PHP

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

Так что самый безопасный способ это переопределение встроеных в PHP функций. Да, патчить и компилировать PHP мы не будем =)

Мы просто возьмем отсюда модуль PHP-TimeCop и установим его согласно приложенной инструкции.

После всех этих манипуляций нам остается только вызвать в начале скрипта вот такую функцию

$mytime = time()-86400;

timecop_freeze($mytime);

Таким образом мы зафиксировали в скрипте время ровно на сутки назад. Для удобства небольшой скрипт с этими двумя строчками можно подключать ко всем скриптам через директиву auto_prepend_file в .htaccess

11 Январь, 2015

Запускаем GUI-приложения в Docker

Предыстория такова - понадобился мне MySQL Workbench который в репозитории для Fedora Core 21 на момент написания статьи еще отсутствует. Сперва я попробовал накатить RPM-пакет от FC20, но он не смог установиться из-за неразрешенных зависимостей. Потом я взял в руки Docker и вот что получилось:

1) Создаем Dockerfile где описываем что мы хотим получить:

vim Dockerfile
FROM debian
RUN apt-get update
RUN apt-get install -qqy x11-apps mysql-workbench
ENV DISPLAY :0
CMD /usr/bin/mysql-workbench

2) Собираем наш контейнер с последним Debian и установленным MySQL-Workbench

docker build -t workbench - < Dockerfile

3) Объявляем для удобства переменную

XSOCK=/tmp/.X11-unix/X0

4) Запускаем контейнер и прокидываем в него сокет. Контейнер автоматически стартует MySQL-Workbench при запуске

docker run --privileged -v $XSOCK:$XSOCK workbench

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

MySQL Workbench running on Docker-container

23 Декабрь, 2014

Как зашифровать большие файлы?

В этом нам поможет утилита openssl.

Публикую 2 варианта т.к. первый опубликованный оказался с недостатком. Зашифровать большие файлы можно, но вот расшифровать можно только файлы размером менее 1.5 Gb. Такой вот неприятный сюрприз.

Вариант 1 (только для файлов менее 1.5Gb)

Для начала генерируем нашу пару ключей которая делится на приватную и публичную части. Публичной можно только шифровать файлы. Расшифровывать их надо с применением приватного ключа.

openssl req -x509 -nodes -newkey rsa:2048 -keyout private.pem -out public.pem

Шифруем наши файлики:

openssl smime -encrypt -aes256 -in file.tar.gz -binary -outform DEM -out file.tar.gz.ssl public.pem

Расшифровываем:

openssl smime -decrypt -in file.tar.gz.ssl -binary -inform DEM -inkey private.pem -out file.tar.gz

На целевой машине где файлы будут шифроваться есть смысл держать только публичный ключ. А закрытую часть ключа хранить в особо секретном месте =)

Вариант 2 (с явными ограничениями не столкнулся)

Генерируем текстовый ключ:

openssl rand -base64 32 -out key.txt

Шифруем файлы:

openssl enc -aes-256-cbc -salt -in file.tar.gz -out file.tar.gz.enc -pass file:./key.txt

Дешифруем файлы:

openssl enc -d -aes-256-cbc -in file.tar.gz.enc -out file.tar.gz -pass file:./key.txt

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

13 Сентябрь, 2014

Проверяем сайт на наличие битых ссылок

В этом деле нам поможет старый добрый wget:

wget --spider -o ~/site_ru.log -e robots=off -w 1 -r -p http://site.ru

Краткая расшифровка опций:

  • --spider, режим «паука», файлы при сканировании не сохраняются, сохраняются только заголовки ответа сервера

  • -o, указываем куда нам сохранять лог

  • -e robots=off, говорим что не хотим следовать правилам robots.txt (по умолчанию wget их учитывает)

  • -w, выставляем тайм-айт между запросами в 1 секунду (можно отключить если уверены в мощности хостинга)

  • -r, включаем рекурсивный обход сайта

  • -p, делаем все запросы для загрузки сайта включая подгрузку css,js и например изображений

Проверяем свой улов на наличие 404 ошибок - grep -B 2 '404' ~/site_ru.log

Кстати, сюда также попадут и ссылки у которых просто в теле адреса есть слово 404 (пример hamdeew.ru/page/bitriks-delaem-stranicu-404-pravilno)

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

Я нашел решение которое работает не на 100 процентов и оно довольно кривое (из-за некотрых особенностей wget), но тем не менее мне оно помогло отыскать битые ссылки на картинки и найти одну 404.

mkdir ~/test/

cd ~/test/

Директорию создаем т.к. метод довольно грязный - создает кучу пустых директорий в процессе работы.

wget -r -l 1 -H -p -o ~/test/site_ru_out.log --spider -e robots=off http://site.ru/

И затем прогоняем получившийся у нас site_ru_out.log грепом как и в первом случае + еще один прогон для проверки ссылок на несуществующие ресурсы:

grep -B 2 'failed' ~/site_ru.log

Надеюсь что вам этот способ помог. Удачи!

Новые записи →Home← Старые записи