Best mount options for Windows/FAT32, NFS, CDROM, USB

00:41 Рубрика: Linux

mount

This page REALLY is just for me to remember. When mounting a FAT32 partition, I prefer the options as in the following line found in /etc/fstab

/dev/hda1 /disks/C vfat rw,noatime,nosuid,nodev,noexec,nouser,async,iocharset=utf8,umask=0 0 0

This mounts the drive automatically at boot time and pretty much gives all users the ability to read/write to it. If I don't want the drive to be mounted at boot time but I want normal users to be able to mount it later, then I would add "noauto,user" instead of "auto,nouser" (auto is implicit in the above fstab entry). The "iocharset=utf8" option is important if you have filenames with international characters. This will make them show up appropriately (doesn't seem to be an issue with the reiserfs or ext3 as far as I have seen).

When mounting an NFS volume, I prefer

machine:directory localdirectory nfs noauto,noatime,user,rw,nosuid,hard,intr,sync 0 0

This DOESN'T automatically mount the volume a boot time, but it allows users to mount whenever they need to. The "hard,intr,sync" options are the important ones... I have had problems with "soft" and "async" while using NFS (the machine has locked up many times while using that).

For CDROMs, I like to have

/dev/cdrom /media/cdrom0 iso9660 ro,user,noauto 0 0

Floppies seem to work best using

/dev/fd0 /media/floppy0 auto rw,noatime,user,noauto 0 0

See this link for instructions on how to get your USB devices working in Linux

For a ReiserFS the following seems to work well

/dev/hdd1 /disks/hdd1 reiserfs rw,noatime 0 0

(c)

Далее

Еще несколько полезных плагинов jQuery

23:42 Рубрика: jQuery

jTextTranslate

Два последних моих поста с обзорами плагинов jQuery (1 и 2) были восприняты на Хабре довольно хорошо. Надо сказать, что подобные статьи на английском языке появляются все чаще и чаще. Однако их содержание довольно быстро приедается. Галереи картинок, слайдеры, опять галереи картинок, многочисленные динамические меню и опять слайдеры. Мне не хочется описывать очередную порцию подобных плагинов. Поэтому сегодня я расскажу не о двадцати-тридцати как обычно, а только о семи важных на мой взгляд плагинах, о которых очень хотелось рассказать. Лучше меньше, да лучше.



Заметки к изображениям




Плагин jQuery-Notes позволяет делать заметки к изображениям (непосредственно на них самих), которые становятся видны в момент наведения курсора на эти изображения.
Посмотреть в действии


Временные информационные блоки




Плагин Growl позволит вам организовать на сайте систему оповещения пользователя, в стиле mac-приложения Growl.
Посмотреть в действии


Обтекание блочных элементов не только по горизонтали, но и по вертикали




Посмотреть в действии


Микрогалерея изображений




Упс! Я же не хотел рассказывать о галереях сегодня… Но об этой все-таки расскажу. Эта галерея отличается от остальных тем, что может занимать меньше места на вашей странице, чем среднестатистическое изображение.
Посмотреть в действии


Сколько букв, сколько слов!




Простенький плагин, позволяет вам создавать текстовые области с подсчетом количества символов и слов, а так же ограничивать это количество.
Посмотреть в действии


Графики и диаграммы на все случаи жизни




Много графиков и диаграмм, некоторые из которых могут реагировать на действия пользователя.
Посмотреть в действии


Перевод прямо на сайте




Плагин jTextTranslate поможет перевести необходимый кусок текста на сайте на один из множества доступных языков. Как он это делает? использует Google Language API.
Посмотреть в действии

(c)

Далее

Setting up drupal multisite on localhost (with Apache Alias)

17:47 Рубрика: Drupal

In this blog post I am going to explain about setting up drupal multisite with Apache Alias and it is a continuation of previous blog post where i explained about using single drupal installation to host more than one site with quiz module branches (quiz 3.x and quiz 4.x) as example.

more

Псевдографика в консоли Unix/Linux. Немного больше User Friendly чем вы могли себе позволить

21:57 Рубрика: Linux

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


Наверняка многие задумывались, запуская make && make install во FreeBSD или apt-get install, например в Debian, как же хорошо было бы использовать подобные диалоги конфигурирования. Они неоправданно забыты и практически вообще не используются в пользовательских скриптах. Очень и очень зря.

Исправить это может замечательная утилита dialog.
Она присутствует во FreeBSD седьмой, восьмой ветки, а в Debian, например, можно сделать apt-get install dialog. Вообще-то, это разные программы.
Во FreeBSD немного попроще версия:

$ dialog

dialog version 0.3, by Savio Lam (lam836@cs.cuhk.hk).
  patched to version 0.4 by Stuart Herbert (S.Herbert@shef.ac.uk)
  Changes Copyright © 1995 by Andrey A. Chernov, Moscow, Russia
  patched by Anatoly A. Orehovsky (tolik@mpeks.tomsk.su)

* Display dialog boxes from shell scripts *

Usage: dialog --clear
       dialog --create-rc <file>
       dialog [--title <title>] [--clear] [--hline <line>] [--hfile <file>]\
              <Box options>

Box options:

  --yesno     <text> <height> <width> [yes|no]
  --msgbox    <text> <height> <width>
  --prgbox    "<command line>" <height> <width>
  --infobox   <text> <height> <width>
  --inputbox  <text> <height> <width> [<init string>]
  --textbox   <file> <height> <width>
  --menu      <text> <height> <width> <menu height> <tag1> <item1>...
  --checklist <text> <height> <width> <list height> <tag1> <item1> <status1>...
  --radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>...
  --ftree     <file> <FS> <text> <height> <width> <menu height>
  --tree      <FS> <text> <height> <width> <menu height> <item1>...


В Linux-версии возможностей побольше:

$ dialog
cdialog (ComeOn Dialog!) version 1.1-20080316
Copyright 2000-2006,2007 Thomas E. Dickey
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

* Display dialog boxes from shell scripts *

Usage: dialog <options> { --and-widget <options> }
where options are "common" options, followed by "box" options

Special options:
  [--create-rc "file"]
Common options:
  [--ascii-lines] [--aspect <ratio>] [--backtitle <backtitle>]
  [--begin <y> <x>] [--cancel-label <str>] [--clear] [--colors]
  [--cr-wrap] [--default-item <str>] [--defaultno] [--exit-label <str>]
  [--extra-button] [--extra-label <str>] [--help-button]
  [--help-label <str>] [--help-status] [--ignore] [--input-fd <fd>]
  [--insecure] [--item-help] [--keep-tite] [--keep-window]
  [--max-input <n>] [--no-cancel] [--no-collapse] [--no-kill]
  [--no-label <str>] [--no-lines] [--no-ok] [--no-shadow] [--nook]
  [--ok-label <str>] [--output-fd <fd>] [--print-maxsize] [--print-size]
  [--print-version] [--separate-output] [--separate-widget <str>]
  [--shadow] [--single-quoted] [--size-err] [--sleep <secs>] [--stderr]
  [--stdout] [--tab-correct] [--tab-len <n>] [--timeout <secs>]
  [--title <title>] [--trace <file>] [--trim] [--version] [--visit-items]
  [--yes-label <str>]
Box options:
  --calendar     <text> <height> <width> <day> <month> <year>
  --checklist    <text> <height> <width> <list height> <tag1> <item1> <status1>...
  --dselect      <directory> <height> <width>
  --editbox      <file> <height> <width>
  --form         <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>...
  --fselect      <filepath> <height> <width>
  --gauge        <text> <height> <width> [<percent>]
  --infobox      <text> <height> <width>
  --inputbox     <text> <height> <width> [<init>]
  --inputmenu    <text> <height> <width> <menu height> <tag1> <item1>...
  --menu         <text> <height> <width> <menu height> <tag1> <item1>...
  --mixedform    <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1> <itype>...
  --mixedgauge   <text> <height> <width> <percent> <tag1> <item1>...
  --msgbox       <text> <height> <width>
  --passwordbox  <text> <height> <width> [<init>]
  --passwordform <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>...
  --pause        <text> <height> <width> <seconds>
  --progressbox  <height> <width>
  --radiolist    <text> <height> <width> <list height> <tag1> <item1> <status1>...
  --tailbox      <file> <height> <width>
  --tailboxbg    <file> <height> <width>
  --textbox      <file> <height> <width>
  --timebox      <text> <height> <width> <hour> <minute> <second>
  --yesno        <text> <height> <width>



Собственно уже из списка опций понятно, что эта программа позволит сделать, однако для наглядности я продемонстрирую пример.
Бэкап файлов и принудительный сброс на диск дампа выбранной базы (или всех) MySQL:

cat ./xbackup.sh
#!/bin/sh

SRC="/usr/home/dev/"
    SITE="${SRC}_Web/"
    PROJECT="${SRC}_Project/"

# куда будем складывать бэкапы
DST="/usr/home/share/BACKUP/"

# реквизиты для Mysql
SQLLOGIN="root"
SQLPASS="TopSecretPassword"
SQLHOST="localhost"

/* --------------------------------------------------------------------------------------------------------- */
# именовать файлы дампов и архивов будем по дате
DATE=`date "+%Y.%m.%d_%H-%M-%S"`
DSRC=""
# переменная для сохранения выбранного типа бэкапа (база или сайт)
backupType=0

# вызываемая программа для создания диалога
DIALOG=dialog
# временный файл
tempfile=`mktemp /tmp/bkp.XXXXXX`
trap "rm -f $tempfile" 0 1 2 5 15

# функция для вывода информационного окна
InfoDialog() {
    ${DIALOG} --msgbox "$1" 5 70
}

# упаковка файлов из выбранной директории
BackupFiles() {
    if [ ! -d ${2} ]then
        
mkdir -p ${2}
    fi
    
tar -c --gzip -f "${2}${DATE}.tar.gz" "${1}"
    InfoDialog "OK -> ${2}${DATE}.tar.gz"
}

# сохранения дампа базы в файл
BackupMySQL() {
    case ${1} in
        "All_Database")
            mysqldump -R -E --triggers -u"${SQLLOGIN}" -p"${SQLPASS}" --all-databases > "${tempfile}"
            ;;
        "")
            InfoDialog "Backup has been canceled"
            exit
            ;;
        *)
            mysqldump -R -E --triggers -u"${SQLLOGIN}" -p"${SQLPASS}" ${DBase} > "${tempfile}"
            ;;
    esac
    
cp "${tempfile}" "${DST}${1}-${DATE}.sql"
    # компрессия gzip, отключено за ненадобностью — распаковывать неудобно
    echo tar -c --gzip -f "${2}${DATE}.dump" "${tempfile}"
    InfoDialog "OK -> ${2}${DATE}.dump"
}

# выбор базы данных из списка существующих на сервере
ChooseDatabase() {
    # получаем листинг баз
    DBases=` echo "SHOW DATABASES" | mysql -u"${SQLLOGIN}" -p"${SQLPASS}" `
    # хитро обеспечиваем опцию All_Database
    List="All_${DBases}"
    # выводим диалог выбора базы из списка
    $DIALOG  --title "Please choose a Database " --tree "FS" "List of existing databases" 14 78 7 ${List} 2> ${tempfile}

    case $? in
    0)
        # выбор сделан
        DBase=`cat ${tempfile}`
        BackupMySQL ${DBase}
        ;;
    1|255)
        # диалог прерван (ескейп например)
        InfoDialog "Backup has been canceled"
        exit
        ;;
    esac
}

# выбор папки с сайтом (реализованвыбор нужного  из денвероподобной структуры папок с сайтами)
ChooseDomain() {
    Paths=`ls ${1}`
    List=""
    isEmpty=true
    
for dName in ${Paths}
    do
        # выводим только папки внутри которых есть корен сайта или поддомен www (структура реализована совсем как в денвере)
        if [ -d "${1}${dName}/www" ] || [ -d "${1}${dName}/htdocs" ]then
            
List="${List} ${dName}"
            isEmpty=false
        
fi
    done


    # таким образом проверяем что выбран корень сайта и пора всетаки паковать его, иначе выводим список подпапок
    if ${isEmpty}then
        
Count=`echo ${SRC} | wc -c | tr -d ' '`
        DSRC=`echo ${1} | awk "{ print substr($ 1, ${Count}) }"`
        return 0;
    fi

    # собстно вывод список папок внутри выбранной
    $DIALOG  --title "Please choose a path " --tree "FS" "List of existing domains" 14 78 7 ${List} 2> ${tempfile}

    case $? in
    0)
        DName=`cat ${tempfile}`
        ChooseDomain "${1}${DName}/"
        ;;
    1|255)
        InfoDialog "Backup has been canceled"
        exit
        ;;
    esac

}

ProcessBackup() {
    case $1 in
        Site)
             ChooseDomain ${SITE}
             BackupFiles "${SRC}${DSRC}" "${DST}${DSRC}"
            ;;
        MySQL)
            ChooseDatabase
            ;;
        *)
            ;;
    esac
}

TypeDialog() {
    ${DIALOG} --title "Choose backup type:" --menu "This is backup types" 12 50 4 \
                                            "Site" "backup web-site" \
                                            "MySQL" "Mysql database" 2> ${tempfile}

    case $? in
    0)
        ProcessBackup `cat ${tempfile}`
        TypeDialog
        ;;
    1|255)
        InfoDialog "Backup has been canceled"
        exit
        ;;
    esac

}

TypeDialog

 



Выглядит это вот так:
Основное меню
Выбор сайта для бэкпап
Выбор базы для бэкапа
База успечно сдампилась


Вот и все. Теперь при работе скрипта можно любоваться интерактивными «окошечками». Таким же образом легко реализовать выполнение любых консольных команд, а сочетая это с запуском putty из командной строки с авторизацией по ключу, можно дать красивый консольный интерфейс для, например, рестарта апачи на дев-сервере(конечно через sudo с жесткими ограничениями), всем разработчикам в команде, даже незнакомым с *nix системами.
Уверен, кому-то изложенные знания пригодятся для того чтобы сделать консоль своего сервера «более User Friendly».

P.S. В процессе написания наткнулся на хорошие примеры http://www.oszone.net/2833/, кое-что оттуда сразу внедрил.

(c)

Далее

Оптимизация jQery

10:17 Рубрика: jQuery

Доклад с coffee'n'code (дополненная)

Open ftp:// links with nautilus

09:31 Рубрика: Linux

You can change the associations in gconf-editor. Expand desktop -> gnome -> url-handlers and find the entry for FTP and change the command to your preferences.

(c)

Download MSI Flash Player Installer

11:25 Рубрика: Ацкий одмин

Here

Автоматическая установка программ в домене Windows

11:21 Рубрика: Ацкий одмин

Автор

Иванов Илья, http://bozza.ru, апрель 2010

Вступление

Если в домене Windows установлен WSUS, админ рад и спокоен - дескать, все, обновления ставятся на автомате, трафик снизился, бегать по компам не надо и пр. В принципе, все осталость то же самое, но ведь не все используют в работе Microsoft Outlook или Internet Explorer (хотя 8-ка очень неплоха). Есть много людей, привыкших работать с почтовиком The Bat!, броузером Opera или Mozilla. Если встает вопрос об обновлениях - либо это головняк админу в виде беготни к каждому компьютеру для обновления всем, скажем, Opera, либо юзеры должны сидеть под админами (пускай и локальными, не доменными).

Естественно, ни первый, ни второй способы - не выход. Значит, надо иметь возможность автоматически устанавливать программы на рабочих станциях, причем желательно делать это до того, как пользователь вошел в систему - ведь если он вошел, он уже не захочет перезагружать машину и т.п. Надо ставить пользователя перед фактом - программа, его любимая Opera, уже обновлена и админа не колбасит, что версия 10.10 почему-то нравится меньше, чем предыдущая. Просто вышло обновление, и его надо применить. Без вариантов.

Самый распространенный вариант ответа на вопрос - КАК? - Конечно, через Active Directory! - скажет вам любой специалист или просто сисадмин. А как через AD? - спросите вы. А вам скажут - ?! Вы не знаете, как через AD? Да там же просто, через policy! - но больше вам скорее сего ничего не скажут, потому что для большинства советчиков этот вопрос такой же неясный, как и для вас. И вам ничего не останется, как гуглить до потери пульса, потому что найти огромный фолиант на тему "как развернуть office 2007" в сети корпорации не проблема, а вот просто и в двух словах - редко что найдете. Не без гордости могу сказать, что данная статья как раз одна из немногих кратких и "без наворотов", попадавшихся мне.

Установка программ из MSI

Все изложенное далее относится к работе с инсталляционными пакетами типа MSI (расширение .msi). Файлы MSI есть (или их можно извлечь) для многих программ (Adobe Acrobat, The Bat, Opera, Firefox и пр.).

Предположим, мы хотим автоматически установить (а по мере выхода обновлений, устанавливать обновления) броузер Firefox. Файл msi для Firefox можно взять здесь (в новом окне).

Настройку шаблона .adm я пропущу, т.к. далеко не всегда это нужно, а еще чаще этот шаблон фиг найдешь. В итоге - дефолтные настройки (либо, если будем ставить поверх старой версии - настройки будут сохранены). Шаблон .adm нам не нужен.

Распределяем права доступа

Предполагаю, что все учетные записи компьютеров (кроме контроллеров домена) находятся в OU "OU Office Computers".

Примечание 1:

Почему лучше не использовать исходное размещение компьютеров (Computers - Компьютеры домена в оснастке Active Directory Users and Computers)? Мне удобнее в дальнейшем управлять политиками для групп компьютеров. К тому же, когда я посещал курсы Microsoft, я видел, что на контроллерах доменов в тестовых системах и в "боевых", настроенных специалистами Microsoft, используются практически только отдельно созданные OU, а не базовые. Я для себя решил повторять опыт специалистов. Пока мне от этого только удобнее. Естественно, ИМХО.

Примечание 2:

Не всем пользователям нужен Firefox (как не всем нужен The Bat, Opera и пр.). Поэтому создадим в "OU Office Computers" отдельную группу компьютеров, на которые будет установлен Firefox. Для ясности назовем группу GFirefoxComputers. Отмечу, что это будет именно группа, а не вложенное OU!

Расшариваем какую-либо папку на сервере (на рисунке это SoftwareDistibution, а не Mozilla Firefox, как может показаться) и даем группе GFirefoxComputers доступ на чтение, админу - полный доступ (не компьютеру админа, а пользователю - все-таки вы должны иметь возможность по сети заливать на шару файлы ;)).

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

Копируем Firefox MSI в расшаренную папку на сервере

Политика правит миром! 

На контроллере домена запускаем редактор групповой политики GPMC.MSC:

Редактор групповой политики GPMC

... и создаем связанную только с нашим OU "OU Office Computers" групповую политику под названием "Firefox 3.6.3 rus":

... редактируем нашу политику "Firefox 3.6.3 rus":

Готовим дистрибутив Firefox для развертывания в сети

В разделе "User Configuration" -> "Software settings" -> "Software Installation" щелкаем правой мышкой и создаем новый объект для установки - наш будущий инсталлятор Firefox.

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

Выбираем "Assigned" (Назначенный):

На этом работа с веткой "Software Installation" закончена.

Готовый пакет Firefox 3.6.3 для автоматической установки на компьютеры домена

Закрываем все открытые окна на сервере (если не помешает другим задачам, естественно), Пуск -> Выполнить -> gpupdate /force

Установка на рабочих станциях

Далее достаточно просто перезагрузить рабочие станции, чтобы автоматически установился Firefox ДО того, как появится окно для ввода логина/пароля. Иными словами, пользователь будет не в силах чего-то не установить, забыть и пр. Поэтому этот способ так хорош. Вы удаленно решаете, что будет установлено / обновлено на рабочих станциях.

Windows XP бывает не с первой перезагрузки "принимает" нове политики, поэтому можно подойти к юзеру, выполнить команду "gpupdate /force" (не обязательно под админом) и перезагрузить его компьютер.

Обязательно проверьте установку на своем / тестовом компьютере ДО того, как юзеры придут следующим утром, включат компьютеры... а вдруг косяк? Поэтому хотя бы первый раз сначала испытайте на себе.

Дополнительно

Теперь на любой новый компьютер, введенный в состав подразделения OU Office Computers будет установлена последняя версия броузера Firefox. Вам даже не придется ничего делать. Просто и очень полезно. Таким же образом можно устанавливать практически любой софт, включая Adobe Reader, Adobe Flash Player (которые в обычной ситуации требуют административных прав для установки), The Bat... да мало ли софта у вас в локальной сети, поддерживать который в актуальном состоянии одна из обязанностей системного администратора.

Нюанс: если вы уже установили какой-либо пакет, в нашем случае Firefox 3.6.3 rus, а через некоторое время вам потребуется его обновить (т.к. рано или поздно выйдет новая версия броузера), сначала удалите политику по установке Firefox 3.6.3, после чего создайте новую. Потом "gpudate /force" и вперед!

(c)

Далее

RightJS - Правая JavaScript библиотека

10:34 Рубрика: Web Development

RightJS создан для server-side разработчиков работающих с динамическими языками и представляет собой простую но хорошо структурированную систему, где все небоходимое всегда быстро доступно и легко изменяемо.

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

быстрый старт

Как прижать footer к низу страницы

10:30 Рубрика: Web Development

В этой статье я продемонстрирую один из способов как прижать footer к низу страницы.
Существует много способов это сделать, но большинство из них используют либо дополнительные хаки, либо дополнительное, не нужное количество html тегов. Этот метод для размещения footer внизу страницы имеет ряд преймуществ над другими методами. Во-первых, используется всего лишь 15 строк css и минимальное количество html тегов. Во-вторых, css код полностью валидный и корректно работает IE5++, Firefox, Safari, Opera.

Далее