Friday, January 18, 2013

Не запускается NFS Client for Windows

Столкнулся с проблемой: остановил NFS Client сервис и больше он не поднялся.
Выдает ошибку:
"The Client for NFS service on local computer started and then stopped. Some services stop automatically if they are not in use by other services or programs" 

Если запускать из Services for Network File System (NFS) тоже ругается:
unknown error 8004101d

В ивнет логе такая запись:
  Windows(R) failed a request to initialize the Network File System (NFS) redirector <[d:\w7rtm\base\fs\remotefs\nfs\client\nfsclient\service.c:199] : 0: The operation completed successfully.

Решение проблемы : открываем cmd.exe

C:\Windows\system32>sc stop NfsRdr

SERVICE_NAME: NfsRdr
        TYPE               : 2  FILE_SYSTEM_DRIVER
        STATE              : 1  STOPPED
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

C:\Windows\system32>nfsadmin client start

The service was started successfully.
Работает, ура

Saturday, January 12, 2013

Добавляем startup скрипты в MAC OS X

Понадобилось мне примонтировать жесткие сетевые диски в Мак оси. Делается это как и в Линукск командой mount. Усложним задачу - сделаем монтирование при загрузке системы. У меня MAC OS 10.6 (Snow Leopard).
В Линукс это делается просто - fstab. В MAC OS X нет fstab. Точнее файл есть, но не используется. Сделать просто shell script и поставить его при загрузке не так уж и тривиально.
Рассмотрим, как все сделать из консоли. Первым делом, пишем шелл скрипт:

cat mountdrv.sh
#!/bin/bash
mount -o soft,intr,rsize=8192,wsize=8192 192.168.0.11:/data/arch /usr/arch

Монтируем \\192.168.0.11\data\arch в /usr/arch
Даем права на запуск, 644, например.
chmod 644 mountdrv.sh

Далее нам надо поставить скрипт на загрузку. Для этого надо создать plist файл. Это проперти файл для системного агента launchctl. 


cat test1.plist




Что надо знать:
RunAtLoad когда грузить
ProgramArguments что грузить
UserNameroot кем грузить

Кладем файл в /Library/LaunchDaemons для буут скрипта, в /Library/LaunchAgents для логин скрипта. Для буут скрипта owner - root, для login скрипта   - user

Далее надо зарегистрировать скрипт командой launchctl load test1.plist

Перед эти надо дать нужные права файлу. Например с 777 работать не будет

root# ls -lt
-rwxrwxrwx  1 root  wheel  449 Jan 12 10:28 test1.plist
root#launchctl load test1.plist
launchctl: Dubious permissions on file (skipping): test1.plist nothing found to load
Работает только с 644.
root# chmod 644 test1.plist
root# ls -lt
-rw-r--r--  1 root  wheel  449 Jan 12 10:28 test1.plist
root#df -h

Filesystem                          Size   Used  Avail Capacity  Mounted on

192.168.0.11:/data/arch      20Ti  2.9Ti   17Ti    15%    /usr/arch

Что касается папок для launchctl , нашел такую справку
Applications that run on Startup:
/Library/StartupItems
plist items running on startup:
/Library/LaunchDaemons
/System/Library/LaunchDaemons
Applications that launch on User Login:
* First check your “Login Items” for that user account within the Account settings of System Preferences
~/Library/LaunchAgents
/Library/LaunchAgents/
/System/Library/LaunchAgents/

Если кто-то знает проще метод, дайте знать.

Sunday, December 30, 2012

А вы делаете code review?

Код надо писать хороший, это понятно даже мне, админу. Причин много. В принципе все может хорошо работать, но иногда бывают ляпы.
Кто-то в поисках ошибки в программе ставит messagebox-ы с непонятными фразами (иногда матерными). А иногда в textbox-ах появляются странные предложения (сам видел фразу, в программе сделанной для производства, что-то вроде "Контейнер полный и тут бегают крысы"). Даже, если такое появляется раз в год, это может навести панику или оставить плохой отпечаток.

Недавно ковырялся с FireBugo-ом и нашел в JS комментарии, которые не убрали (или не убирали, или оставили). Вроде все работает, но это показывает, что код скорее всего не просматривали перед релизом. Скрин взят с известного сайта. :)


Еда и сгоревший киоск

Вчера ночью у нас в районе сгорел киоск и среди обломков осталась еда. Люди разбирают все, что не сгорело - чай, сардельки в упаковке, конфеты. Среди людей были те, кто не похож на бомжей или нищих. Вроде нормальны люди. Убило то, как люди выбирали среди хлама и обгоревших упаковок то, что не расплавилось.

Saturday, December 1, 2012

Как я правил SWF файл.

После переезда сервера надо было поменять некоторые ссылки. В том числе и во одном флеш ролике. Это несложно, но надо иметь софт. А такой софт обычно стоит денег. Что же делать? 
Я использовал утлиту flasm. Она бесплатная и  есть в репозитороии Debiana. Даже в Lenny. Ставим
apt-get install flasm
Затем этой утлитой распаковываем swf
flasm -x test.swf
Получаем бинарник. Ссылка хранится теперь в файле plain текстом. Тут можно уже поменять  простым редактором.
Собираем назад
flasm -z test.swf



Flasm 1.62 build Apr 26 2008

(c) 2001 Opaque Industries, (c) 2002-2007 Igor Kogan, (c) 2005 Wang Zhen
All rights reserved. See LICENSE.TXT for terms of use.

Usage: flasm [command] filename

Commands:
   -d     Disassemble SWF file to the console
   -a     Assemble Flasm project (FLM)
   -u     Update SWF file, replace Flasm macros
   -b     Assemble actions to __bytecode__ instruction or byte sequence
   -z     Compress SWF with zLib
   -x     Decompress SWF



Ну или напишем скрипт, например на питоне (спасибо коллеге за идею):


#!/usr/bin/python

import os

OLD = 'https://192.168.1.27/test.cgi'
NEW = 'https://192.168.1.17/test.cgi'

assert len(OLD) == len(NEW)

with open('test.swf','rb') as f:
    d = f.read()

q=d.replace(OLD, NEW)

with open('test.modified.swf','wb') as f:
    f.write(q)



Monday, September 24, 2012

Linux: как стереть из папки файлы старше 24 часов

Сейчас поднимал маленький кеш сервер. Надо хранить билды, но те, что  не старше 24 часов. Как это сделать?

Сервак простой Apache (с LDAP - см. далее). Как идет синхронизация не так важно. Как стереть ненужные файлы? Можно сделать шелл-скрипт. Но это все делается одной строкой:

find /var/www/* -mmin +1440 -exec rm {} \;

Что делает эта команда?

Найти в  папке /var/www/ все файлы и директории, которые были изменены как минимум 1440 минут назад (сутки), и для каждой найденной исполнить удаление. {} означает имя найденного файла, а \; - конец команды. Без него не работало у меня.

Все можно найти на man find
  Measure  times  (for  -amin,  -atime,  -cmin, -ctime, -mmin, and
       -mtime) from the beginning of today rather than  from  24  hours
       ago.   This  option only affects tests which appear later on the
       command line.
-exec command {} + This variant of the -exec option runs the specified command on the selected files, but the command line is built by appending each selected file name at the end; the total number of invoca- tions of the command will be much less than the number of matched files. The command line is built in much the same way that xargs builds its command lines. Only one instance of '{}' is allowed within the command. The command is executed in the starting directory.


/var/www/  - папка моего Апача. А скрипт надо вставить в CRON.
crontab -e

и вставляем последней строчкой 

0 1 * * * find /var/www/* -mmin +1440 -exec rm {} \;

Все просто.