Thursday, November 11, 2010

Building ubuntu 10.10 deb for glusterfs 3.1 with posix acl support for samba ntfs acl

Tips for compiling glusterfs 3.1 with posix acl support (for samba ntfs acl)


sudo apt-get build-dep glusterfs-server
mkdir glusterfs
cd glusterfs
wget http://download.gluster.com/pub/gluster/glusterfs/3.1/LATEST/glusterfs-3.1.0.tar.gz
tar -xpvf glusterfs-3.1.0.tar.gz
ln -s glusterfs-3.1.0.tar.gz glusterfs_3.1.0.orig.tar.gz
cd glusterfs-3.1.0
mkdir debian



create debian/control with content:

Source: glusterfs
Section: admin
Priority: optional
Maintainer: none
Build-Depends: cdbs, debhelper (>= 7), autotools-dev, bison, flex,
libfuse-dev (>= 2.6.5), libibverbs-dev (>= 1.0.4), help2man, python-central,
libdb-dev, attr
Standards-Version: 3.8.4
Homepage: http://www.gluster.org/docs/index.php/GlusterFS


Package: glusterfs
Version: 3.1.0-2
Architecture: amd64
Conflicts: glusterfs-server, glusterfs-client
Depends: ${misc:Depends}, ${shlibs:Depends}, python, fuse-utils (>= 2.7.4), lsb-base (>= 3.0-6)
Suggests:
Description: clustered file-system (client package)
GlusterFS is a clustered file-system capable of scaling to several
peta-bytes. It aggregates various storage bricks over Infiniband RDMA
or TCP/IP interconnect into one large parallel network file
system. GlusterFS is one of the most sophisticated file system in
terms of features and extensibility. It borrows a powerful concept
called Translators from GNU Hurd kernel. Much of the code in GlusterFS
is in userspace and easily manageable.
.
This package provides the FUSE based GlusterFS tool.



and debian/rules:


#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk

include /usr/share/cdbs/1/class/autotools.mk


DEB_PYTHON_SYSTEM=pycentral





and debian/changelog


glusterfs (3.1.0-2) unstable; urgency=low

* New upstream release.

-- anonymous <foo@example.com
> Thu, 12 Nov 2010 20:23:01 +0200




chmod +x debian/rules


Enable Posix ACL support:
sed -i 's/^#define DISABLE_POSIX_ACL//' xlators/mount/fuse/src/fuse-bridge.h


Insert to the extras/init.d/glusterd-Debian.in and extras/init.d/glusterd-Debian.in
after 
PID=`test -f $PIDFILE && cat $PIDFILE`
line
CONFIGFILE=/etc/glusterfs/glusterd.vol


sed -i '/PID=/{p;s/.*/CONFIGFILE=\/etc\/glusterfs\/glusterd.vol/;}' extras/init.d/glusterd-Debian.in
sed -i '/PID=/{p;s/.*/CONFIGFILE=\/etc\/glusterfs\/glusterd.vol/;}' extras/init.d/glusterd-Debian



debuild -us -uc


now we can install:


sudo dpkg -i ../glusterfs_3.1.0-2_amd64.deb


For enable server:
sudo update-rc.d glusterd defaults


and for internal nfs server and InfiniBand support:
sudo apt-get install nfs-common portmap libibverbs1


You can download latest binary deb file from the http://dl.dropbox.com/u/2296931/glusterfs/glusterfs_3.2.0-2_amd64.deb

Tested on Ubuntu 10.04 and Ubuntu 10.10


Automate all operations with bash script: 
http://dl.dropbox.com/u/2296931/glusterfs/mkdeb.sh

Monday, September 27, 2010

Извлекаем DNS подзону домена Active Directory

Имеется дерево доменов Active Directory с поддоменами. Необходимо извлечь вложенную зону subdomain1.subdomain2.example.com из домена example.com и создать отдельный DNS домен - subdomain1.subdomain2.example.com

Создаем файл extract-dns-zone.cmd:
set maindomain=example.com
set subdomain=subdomain1.subdomain2
set dcsrv=dc.example.com
del \\%dcsrv%\c$\WINDOWS\system32\dns\%maindomain%.txt
dnscmd %dcsrv% /zoneexport %maindomain% %maindomain%.txt
copy \\%dcsrv%\c$\WINDOWS\system32\dns\template.dns \\%dcsrv%\c$\WINDOWS\system32\dns\%subdomain%.%maindomain%.dns
findstr /i "%subdomain%" \\%dcsrv%\c$\WINDOWS\system32\dns\%maindomain%.txt >> \\%dcsrv%\c$\WINDOWS\system32\dns\%subdomain%.%maindomain%.dns
cscript replace.vbs \\%dcsrv%\c$\WINDOWS\system32\dns\%subdomain%.%maindomain%.dns ".%subdomain% " " "
cscript replace.vbs \\%dcsrv%\c$\WINDOWS\system32\dns\%subdomain%.%maindomain%.dns "%subdomain% " "@ "
dnscmd %dcsrv% /zoneadd %subdomain%.%maindomain% /primary /file %subdomain%.%maindomain%.dns /load
rem psexec.exe \\%dcsrv% dcdiag /test:registerindns /dnsdomain:%subdomain%.%maindomain%.dns



Поскольку в Windows нет штатной команды для замены текста в файле, создадим vbs скрипт replace.vbs:
Const ForReading = 1
Const ForWriting = 2

strFileName = Wscript.Arguments(0)
strOldText = Wscript.Arguments(1)
strNewText = Wscript.Arguments(2)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)

strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, strOldText, strNewText)

Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.WriteLine strNewText
objFile.Close



Файл extract-dns-zone.cmd импортирует всю зону example.com в файл, копирует шаблон пустой зоны subdomain2.subdomain2.example.com в новый файл и добавляет в него только строки, относящиеся к извлекаемому домену, затем на основе этого файла создает новую зону DNS. После создания зоны необходимо сдклать её интегрированной в AD и включить безопасный обновления. Старую подзону следует удалить и вместо неё создать делегированную зону.

Файл \\dc.example.com\c$\WINDOWS\system32\dns\template.dns:
;

@ IN SOA dc.example.com. hostmaster.example.com. (
2010060200 ; serial number
900 ; refresh
600 ; retry
86400 ; expire
3600 ) ; default TTL

;
; Zone NS records
;

@ NS dc.example.com.

Saturday, September 25, 2010

Заменяем файл-сервер Windows на сервер samba под Ubuntu Linux

Сначала необходимо настроить интеграцию учетных записей linux в домен Active Directory.

Ставим пакеты:
sudo apt-get install winbind krb5-user samba-common-bin
sudo service winbind stop

Создаем файл настройки /etc/samba/smb.conf:

[global]
workgroup = EXAMPLE
server string = %h server
wins server = 172.20.0.97 172.20.0.92
log file = /var/log/samba/%m.log
max log size = 1024
syslog = 0
realm = EXAMPLE.COM
security = ads

idmap backend = hash
idmap uid = 10000-4000000000
idmap gid = 10000-4000000000
winbind nss info = hash
idmap cache time = 1800
winbind refresh tickets = true
winbind cache time = 900
winbind offline logon = true
winbind expand groups = 2
winbind use default domain = No
template homedir = /home/%D/%U
template shell = /bin/bash
kerberos method = secrets and keytab


Добавляем в конце файла /usr/share/pam-configs/winbind
вместо
Session:
optional pam_winbind.so
строки
Session:
optional pam_winbind.so
required pam_mkhomedir.so umask=0022 skel=/etc/skel
Session-Initial:
required pam_mkhomedir.so umask=0022 skel=/etc/skel

Это позволит автоматически создавать каталог администратора, зашедшего на сервер по ssh

Включаем pam модуль:
sudo pam-auth-update
Отмечаем [*] Winbind NT/Active Directory authentication

Заменяем файл /etc/krb5.conf:

[libdefaults]
default_realm = EXAMPLE.COM
default_tgs_enctypes = RC4-HMAC DES-CBC-MD5 DES-CBC-CRC
default_tkt_enctypes = RC4-HMAC DES-CBC-MD5 DES-CBC-CRC
preferred_enctypes = RC4-HMAC DES-CBC-MD5 DES-CBC-CRC
dns_lookup_kdc = true
[realms]
EXAMPLE.COM = {
auth_to_local = RULE:[1:$0\$1](^EXAMPLE\.COM\\.*)s/^EXAMPLE\.COM/EXAMPLE/
auth_to_local = DEFAULT
}
[appdefaults]
pam = {
mappings = EXAMPLE\\(.*) $1@EXAMPLE.COM
forwardable = true
validate = true
}
httpd = {
mappings = EXAMPLE\\(.*) $1@EXAMPLE.COM
reverse_mappings = (.*)@EXAMPLE\.COM EXAMPLE\$1
}

Меняем строки файла /etc/nsswitch.conf:
passwd: compat winbind
group: compat winbind


Включаем в домен:
sudo net ads join -U Administrator

Запускаем winbind
sudo service winbind start

Проверяем работоспособность командой:
id EXAMPLE\\Administrator
При корректной работе будет выведен список групп пользователя EXAMPLE\Administrator.

Добавляем в файл /etc/ssh/ssh_config строки:
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes

Добавляем в файл /etc/ssh/sshd_config
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
AllowGroups EXAMPLE\netadmins admin root
Это позволит заходить по ssh на сервер членам группы EXAMPLE\netadmins

Разрешаем группе EXAMPLE\netadmins авторизовываться в правами root:
Через команду
sudo visudo
добавляем строку
%EXAMPLE\\netadmins ALL=(ALL) ALL

Интеграция сервера в домен закончена. Теперь участники группы EXAMPLE\netadmins могут заходить по ssh и пользоваться командой sudo.

Настраиваем файл-сервер samba

Устанавливаем пакеты:
sudo apt-get install samba attr acl


Добавляем в вышеприведенный /etc/samba/smb.conf

socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=24576 SO_SNDBUF=24576
load printers = no
printing = bsd
printcap name = /dev/null
disable spoolss = yes
# Enable recycle bin and file acl like on ntfs volume (xfs or ext3/ext4 filesystem needed full acl work only on samba >3.5)
map acl inherit = yes
acl group control = yes

[all]
path = /var/shares/all
read only = no
hide unreadable = no
vfs objects = recycle acl_xattr streams_xattr
inherit acls = yes
include = /etc/samba/recycle.conf
guest ok = no
veto files = /lost+found/

Создаем файл /etc/samba/recycle.conf
recycle:repository = .Корзина
recycle:keeptree = Yes
recycle:touch = Yes
recycle:versions = Yes
recycle:maxsize = 209715200
recycle:exclude = *.tmp|*.temp|*.o|*.obj|~$*|*.~??|*.TMP
recycle:excludedir = /tmp|/temp|/cache
recycle:noversions = *.doc|*.xls|*.ppt

На сервере отключается поддержка печати и включается расширенная настройка списка доступа на файловой системе, максимально приближеного к NTFS. Поддержка расширенных список доступа и потоков NTFS обеспечивается файловыми системами xfs, ext3, ext4. Монтировать том для ext3/ext4 необходимо с параметром noatime,acl,user_xattr. Для XFS монтировать с параметрами noatime, attr2.
Дополнительно используется vfs-модуль recycle. Он позволяет не удалять файлы а складывать их в каталог .Корзина.


Перенос файлов с Windows сервера.

Для переноса файлов с windows сервера на сервер samba можно использовать утилиту robocopy из Windows Server 2003 Resource Kit Tools
Например, для копирования файлов с сервера srv1 на сервер srv2 выполните команду:
robocopy \\srv1\all \\srv2\all /e /zb /copy:dats /xd DfsrPrivate /purge

На samba сервер нельзя скопировать информацию о владельце файла и протоколе аудита. Поэтому используется параметр /copy:dats. Параметр /xd указывает пропустить каталог DfsrPrivate.

Доступ к файловым ресурсам Windows с Linux при помощи autofs

Для доступа к файловым ресурсам Windows будем использовать autofs.

Необходимо установить пакеты autofs и smbclient
# apt-get install autofs smbclient

Создаем следующие файлы:

/etc/auto.master:
/var/autofs/cifs /etc/auto.cifs.top


/etc/auto.cifs.top:
* -fstype=autofs,-Dhost=& file:/etc/auto.cifs.sub

/etc/auto.cifs.sub:
* -fstype=cifs,credentials=/home/user1/domain-user.psw,uid=user1,codepage=866,iocharset=utf8 ://${host}/&

В последнем файле мы указываем параметры монтирования smb ресурса. В данном примере в файле /home/user1/domain-user.pws задана учетная запись для подключения к windows компьютерам.

/home/user1/domain-user.psw:
username=user1
password=user1pasword
domain=EXAMPLE

Создаем каталог куда будут монтироваться smb ресурсы.
# mkdir /var/autofs/cifs
# chown user1 /var/autofs/cifs

Перезапускаем autofs
# service autofs restart

Теперь мы можем подключать любой windows ресурс просто обратившись к папке /var/autofs/cifs/{имя сервера}/{имя шары}, например
# ls /var/autofs/vifs/fileserv1/share1

Tuesday, February 16, 2010

Настраиваем реплицируемый сервер WINS samba4wins на ubuntu linux

Добавляем репозиторий и устанавливаем samba4wins:
$ sudo add-apt-repository ppa:a.bono/samba4wins
$ sudo apt-get update
$ sudo apt-get install samba4wins-ldbtools samba4wins
WINS сервер готов и работает.

Добавим партнера по репликации:
sudo ldbedit -H /var/lib/samba4wins/private/wins_config.ldb -a
и добавляем строки:
dn: CN=WINSSERVER-02,CN=PARTNERS
objectClass: wreplPartner
address: 192.168.9.9
Здесь WINSSERVER-02 - имя сервера с которым настраивается репликация, 192.168.9.9 - его ip адрес.

На сервере WINSSERVER-02 добавляем наш WINS в качестве партнера.

Теперь командой
$ ldbsearch -H /var/lib/samba4wins/wins.ldb
можно вывести дамп всех записей нашего сервера. Количество записей можно узнать командой:
$ ldbsearch -H /var/lib/samba4wins/wins.ldb | grep ^name | wc -l

Протестировать работу WINS сервера можно командой
$ nmblookup -U winsservername -R 'SERRV1'
где winsservername - адрес нашего сервера, 'SERRV1' - имя сервера или рабочей станции, зарегистрировавшейся на WINS сервере.