Windows service restart grant

22 January 2015

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

sc sdshow AutoSshTunnel
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

whoami /all
.. SID: S-1-5-21-579577735-976627999-3980285884-1140
Pattern: (A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)

sc sdset AutoSshTunnel D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A
;;RPWPDTLO;;;S-1-5-21-579577735-976627999-3980285884-1140)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
[SC] SetServiceObjectSecurity SUCCESS

Heroku power

27 November 2014

   Задался я значит целью снова изучить работу облачной платформы для приложений - Heroku. И.. как же тут всё хорошо! И удобная консольная утилита для работы, и удобная вэб-морда для управления приложением, и десятки подключаемых модулей баз данных, логирования, статистики, безопастности и прочего.. 

   Из минусов обычно утверждают что у них там всё дорого, но в платный сегмент пока не спешу. А вот повозится с настройками автоматизации grunt'а пришлось. Стандартный buildPack не хотел запускать grunt'овские задачи. Кто-то показывал варианты форсированного запуска через путь в node_modules, но после пяти падений с огромными логами у меня сложилось впечатление что такой запуск grunt'а влечет за собой неконтролируемый запуск серверных задач. Благо есть решение в виде другого buildPack'а! Heroku-buildpack-nodejs-grunt. Теперь всё завелось как по маслу.

   Но разрабатывать на одной машине, тем более из под консоли, не очень то удобно. По этому начал изучать способы клонировать приложение. Окей, всё есть в стандартных решениях. Клон через стандартные утилиты. Вот только нужно настроить правильно соединение и аутентификацию с ssh сервером. А вот тут начинаются windows-грабли. Под окнами, где нет стандартных решений ssh'а, к текущему времени оказалось несколько оных: установленный в комплекте с git'ом, установленный cygwin'ом и конечно же putty! И какой из них запускается - ещё тот пазл. И далеко не все из них правильно видят путь к домашней папке пользователя, что бы вычитать настройки в .ssh/confing. Но благо можно задать настройки через главный файл настроек.. 

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

cygrunsrv -I AutoSshTunnel -p c:\cygwin64\bin\sutossh.exe -a "-M 20000 -R 7557:127.0.0.1:22 user@dest.hostname.com" -e AUTOSSH_NTSERVICE=yes

   И коль пошли консольные комманды - три случая использования команды 'find', облегчающие жизнь. Раньше мучился, выборочно выкачивал каждый архив из подпапок, собирал их, а потом на другой машине так же руками по файлу распаковывал. Жуть. Теперь же пара команд - и дело сделано. Спасибо askUbuntu! В добавок нашел волшебный аргумент '-atime', помогающий вычищать мусор, который не использовали к примеру уже два дня.

find -maxdepth 2 -name "*.zip" | zip masters.zip -@
find -maxdepth 2 -name '*.zip' -exec sh -c 'echo unzip -d "${1%.*}" "$1"' _ {} \;
find -maxdepth 1 -atime +2 -exec rm -rf {} \;
find -maxdepth 1 -type f -not -name "removed.conf" -name "*.conf" -exec sh -c 'sed "s/cms1-dev/cms2-stage/g" $1 > $1.tmp && mv $1.tmp $1' _ {} \;
find `pwd` -maxdepth 2 -name "done" -atime +2 -exec sh -c 'echo "${1%/done}" && echo "${1%/done}.zip"' _ {} \;


instagram ]

Ещё одна попытка readonly

16 November 2014

   Raspberry "съедает" уже третью флешку.. Карта была microSD на 32Гб с адаптером. Не надежная техника пошла нынче, всего 1000 циклов перезаписи согласно исследованию на Хабре.. При чем вроде бы даже настроил всю систему работать с read-only-fs, но видимо не полностью. В этот раз раздобыл флешку по древней, полноформатную и менее ёмкую, а так же новый мануал как сделать систему с данными в памяти. И так, поехали.

   Вкратце: выключаем swap, удаляем проверки на время при загрузке, устанавливаем unionfs-fuse, делаем скрипт для его монтирования, правим fstab, создаём дополнительные папки для гибридной работы с unionfs. Папки var и etc мигрируют в память, что бы система могла работать, думая что в них можно писать. Получаем файловую систему без записи, но с рабочими журналами и сервисами. Так же рекомендуют установить busybox-syslogd, что бы уменьшить количество журналов и система вдруг не встала по отсутствию памяти.

   Самая хитрость тут - сделать режим для правильной работы установщика пакетов. В комментариях ко второй статье привели хороший скрипт, чутку мною допиленный для папки mnt:

#!/bin/bash

# remount root rw
mount -o remount,rw /

# prapare target paths
mkdir -p /chroot
mkdir -p /chroot/{bin,boot,dev,etc,home,lib,opt,proc,root,run,sbin,sys,tmp,usr,var,mnt}

# mount special filesystems
mount -t proc proc /chroot/proc
mount --rbind /sys /chroot/sys
mount --rbind /dev /chroot/dev

# bind rw directories
for f in {etc,var}; do mount --rbind /${f}_org /chroot/$f; done

# bind remaining directories
for f in {bin,boot,home,lib,opt,root,run,sbin,tmp,usr,mnt}; do mount --rbind /$f /chroot/$f; done

# chroot
echo "Note: /boot is still mounted read-only, remount to read-write if needed."
echo -e "\e[33mYou are now in read-write chroot. Use CTRL+D when done to exit chroot and mount read-only again.\e[39m"
chroot /chroot /usr/bin/env PS1="(rw) \u@\h:\w\$ " sudo -u pi RWMODE="yes" /bin/bash -l

# unmount mounts
for f in /chroot/{bin,boot,dev,etc,home,lib,opt,proc,root,run,sbin,sys,tmp,usr,var,mnt}; do
umount -l $f
done

sleep 1

# remount read-only again
echo -e "\e[32mChroot left, re-mounting read-only again.\e[39m"
mount -o remount,ro /

   Так же захотелось подсветки файлов при работе в режиме редактирования, по этому в скрипте выше нет аттрибута "--noprofile" из оригинала. В добавок в ".bashrc" добавились строчки для индикации режима записи. Очень надеюсь что такой подход позволит текущей флешке прожить дольше предшественников..

if [ "$RWMODE" = "yes" ]; then
   PS1="(rw) \u@\h:\w\$ "
fi

   И под завершение - велосипеды! С новыми колёсами закручивать на горку за Жисой через 51ую стало вполне себе обычным делом. Осилить бы ещё подъем от Автовокзала до Жисы.. Но там какой-то адовый градиент. Зато красивый закат.


instagram ]

NodeJs unit testing

25 September 2014

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

   Блокировка через redis. Правильные флаги, и всякое такое:


© Oleksiy Tishyn 2018