Оптимизация сетевой печати Иван Коробко Листинг. 1. Структура INF-файла [section] key1 = value1 ; comment key2 = value2 Листинг 2. Структура раздела [VERSION] [Version] Signature="signature-name" Class=class-name ClassGuid={nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn} CatalogFile=filename.cat DriverVer=mm/dd/yyyy[,w.x.y.z] Листинг 3. Раздел [Verison] для установки принтера [Version] Signature="$CHICAGO$" Class=Printer ClassGUID={4D36E979-E325-11CE-BFC1-08002BE10318} DriverVer=09/31/2008 file-list-section = dir[,subdir] Листинг 4. Раздел [DestinationDirs] [DestinationDirs] DefaultDestDir=66000 diskid = disk-description[,[tag-or-cab-file],[unused,path][,flags]] diskid = disk-description[,[tag-or-cab-file],[unused,path],[flags][,tag-file]] Листинг 5. Раздел [SourceDisksNames] [SourceDisksNames] 1 = "HP",,,"" filename = diskid[,[ subdir][, size]] Листинг 6. Раздел [SourceDisksFiles] [SourceDisksFiles] HP1200.ppd = 1 Листинг 7. Мультидрайверный INF-файл [Version] Signature="$Windows NT$" ClassGUID={4D36E979-E325-11CE-BFC1-08002BE10318} Class=Printer Provider="temp" [Manufacturer] %Company%=firm [firm] "Hewlett-Packard 1200" = HP1200.PPD,HP1200_PS_PPD "Hewlett-Packard 4100" = HP4100.PPD,HP4100_PS_PPD "Hewlett-Packard 2727" = HP2727.PPD,HP2727_PS_PPD [HP1200.PPD] CopyFiles=@HP1200.PPD,PSCRIPT_NT ; PPD-файл. DataSection=PSCRIPT_DATA ; раздел PSCRIPT DataFile=HP1200.PPD Include=NTPRINT.INF ; инсталляция NTPRINT.INF. Needs=PSCRIPT.OEM ; инсталляция PSCRIPT. [HP4100.PPD] CopyFiles=@HP4100.PPD,PSCRIPT_NT DataSection=PSCRIPT_DATA DataFile=HP4100.PPD Include=NTPRINT.INF Needs=PSCRIPT.OEM [HP2727.PPD] CopyFiles=@HP2727.PPD,PSCRIPT_NT DataSection=PSCRIPT_DATA DataFile=HP2727.PPD Include=NTPRINT.INF Needs=PSCRIPT.OEM [DestinationDirs] DefaultDestDir=66000 [SourceDisksNames.x86] 1 = "HP",,,"" [SourceDisksFiles.x86] HP1200.ppd = 1,,,,,,,11,3 HP4100.ppd = 1,,,,,,,11,3 HP2727.ppd = 1,,,,,,,11,3 [Strings] Company = "*Island Printers" ----------------------------------------------------------------------------------------------------------------- Обзор CMS Skeletonz Сергей Супрунов $ fetch http://effbot.org/downloads/Imaging-1.1.6.tar.gz $ tar xf Imaging-1.1.6.tar.gz $ cd Imaging-1.1.6 $ sudo python setup.py install $ fetch http://orangoo.com/skeletonz/uploads/skeletonz_beta.zip $ tar xzf skeletonz_beta.zip $ cd skeletonz_beta $ vi general_config.py # -*-coding: utf8 -*- $ iconv -f koi8-r -t utf-8 general_config.koi.py > general_config.py $ python launch_server.py $ nohup python launch_server.py &>skeletonz.log & # delegated -P80 MOUNT="/* http://localhost:14002/* PERMIT="http:localhost:*" ----------------------------------------------------------------------------------------------------------------- Lustre FS. Настраиваем и используем кластерную систему в промышленных масштабах Часть 1 Виталий Банковский tar -xzvf lustre-1.6.5.tar.gz cd lustre-1.6.5 ./configure make make install mkfs.lustre --mdt --mgs --fsname=webstorage /dev/sdb mount -t lustre /dev/sdb /mnt/mdt mkfs.lustre --ost --fsname=webstorage —mgsnode=mds.domain.com@tcp0 /dev/sdb mount -t lustre /dev/sdb /mnt/ost1 mount -t lustre mds.domain.com:/webstorage /mnt/lustre /dev/sdb /mnt/mdt lustre defaults 0 0 /dev/sdb /mnt/ost lustre defaults 0 0 mds.domain.com:/webstorage /mnt/lustre lustre defaults 0 0 ----------------------------------------------------------------------------------------------------------------- VMware Esxi – виртуализация уровня предприятия Виктор Карабедянц #vi /etc/inetd.conf #ps –aux | grep inetd #kill "имя полученного процесса" #inetd vicfg-cfgbackup.pl --server -s для создания бэкапа vicfg-cfgbackup.pl --server -l для восстановления ----------------------------------------------------------------------------------------------------------------- Создаём сервер сетевой установки Fedora/RHEL Андрей Маркелов # yum -y install tftp-server # chkconfig tftp on # service xinetd start # yum -y install syslinux # cp $(rpm -ql syslinux | grep pxelinux.0) /var/lib/tftpboot/ # mkdir /var/lib/tftpboot/{fedora9,rhel51} # cp /mnt/loop/RHEL_5.1/images/pxeboot/* /var/lib/tftpboot/rhel51/ # cp /mnt/loop/Fedora9/images/pxeboot/* /var/lib/tftpboot/fedora9/ # mkdir /var/lib/tftpboot/pxelinux.cfg # vi /var/lib/tftpboot/pxelinux.cfg/default default q display boot.msg prompt 1 timeout 100 label q localboot 0 label f kernel fedora9/vmlinuz append initrd=fedora9/initrd.img ks=http://192.168.0.100/f9.cfg label r kernel rhel51/vmlinuz append initrd=rhel51/initrd.img ks=http://192.168.0.100/rhel51.cfg label f2 kernel fedora9/vmlinuz append initrd=fedora9/initrd.img ks=http://192.168.0.100/f9_2.cfg # yum -y install dhcp # cp /usr/share/doc/dhcp-*/dhcpd.conf.sample /etc/dhcpd.conf filename "pxelinux.0"; next-server 192.168.0.100; ----------------------------------------------------------------------------------------------------------------- Технология борьбы со спамом DKIM Сергей Яремчук $ sudo apt-cache search dkim $ sudo apt-cache search milter $ sudo apt-get install dkim-filter $ openssl genrsa -out private.key 1024 $ openssl rsa -in private.key -pubout -out public.key $ dkim-genkey -d example.com -s example.com $ cat example.com.txt _domainkey.example.com IN TXT "v=DKIM1; g=*; k=rsa; p=MIGf......pQSA/wIDAQAB"; _asp._domainkey.example.com IN TXT "dkim=OPEN" $ sudo mv -f key.private /etc/postfix # Запись сообщений в syslog Syslog yes # Маска доступа для создаваемого сокета # UMask 002 # Путь к UNIX-сокету или адрес TCP-сокета inet:port[@host] # по умолчанию 127.0.0.1:8891 # Socket /var/run/dkim-milter/dkim.sock # В случае проблем с доступом можно запускать dkim-milter от имени определенного пользователя # UserID userid[:group] Background yes # Список доменов, перечисленный через запятую, возможно использование шаблона "*" Domain example.com # Как вариант указывается файл, в котором содержится список доменов по одному в строке # Domain /etc/postfix/dkim-domain.conf # Файл, содержащий закрытый ключ KeyFile /etc/postfix/key.private # Если есть, указываем и селектор # Selector 01.01.2008 # Если ключей несколько, заносим их перечень в файл, при его установке параметр KeyFile игнорируется # запись выглядит как отправитель:домен:полный путь к файлу закрытого ключа # *example.com:example.com:/etc/postfix/key.private # Если файл ключа не будет найден, проверяются файлы с окончанием ".pem" и ".private" # KeyList /etc/postfix/dkim-keys.conf # Перезапускать ли при ошибках AutoRestart no # Режим работы - s (signer, подпись) и v (verifier, проверка, по умолчанию) Mode sv # Подписывать ли сообщения, отправляемые из поддоменов, описанных в Domain SubDomains yes # Тайм-аут DNS DNSTimeout 5 # По умолчанию для подписи используется алгоритм rsa-sha256 # SignatureAlgorithm rsa-sha256 # Отключаем ASPD #UseASPDiscard no # Всегда добавлять заголовок Authentication-Results AlwaysAddARHeader yes # Статистика Statistics /var/log/dkim-filter/dkim-stats # Проверка необходимых заголовков сообщения RequiredHeaders yes # Что делать с письмами с неверной подписью: # accept (по умолчанию), discard, tempfail, reject. # On-BadSignature reject $ sudo /etc/init.d/dkim-filter start $ netstat -an | grep 8891 milter_default_action = accept milter_protocol = 2 smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891 smtpd_milters = unix:/var/run/dkim-milter/dkim.sock non_smtpd_milters = unix:/var/run/dkim-milter/dkim.sock $ sudo /etc/init.d/postfix restart $ host -t txt _domainkey.dk.elandsys.com $ host -t txt mail._domainkey.markley.org ----------------------------------------------------------------------------------------------------------------- Почтовый шлюз для MS Exchange 2007 на базе FreeBSD 7.0 + Postfix 2.4 Антон Сенько gw# cd /usr/ports/mail/postfix24 gw# make config # /usr/local/etc/postfix/main.cf myhostname = server.company.ru mydomain = company.ru myorigin = $mydomain mydestination = $myhostname mynetworks_style = host mynetworks = 192.168.1.1/32, 127.0.0.0/8 # /usr/local/etc/postfix/main.cf # Описываем виртуальный домен virtual_mailbox_domains = company.ru # Информацию о почтовых ящиках искать в LDAP (в нашем случае - AD) virtual_mailbox_maps = ldap:/usr/local/etc/postfix/ldap.cf # Описываем куда пересылать приходящую почту transport_maps = hash:/usr/local/etc/postfix/virtual_transport # /usr/local/etc/postfix/ldap.cf server_host = ldap://company.local server_port = 389 timeout = 60 search_base = DC=company,DC=local query_filter = (&(proxyAddresses=smtp:%s)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(|(objectClass=user)(objectClass=group)(objectClass=contact)(objectClass=publicFolder))) result_format = %s result_attribute = cn special_result_attribute = scope = sub bind = yes bind_dn = ldaplookup@company.local bind_pw = secret_password dereference = 0 domain = company.ru version=3 debuglevel = 0 # /usr/local/etc/postfix/virtual_transport company.ru smtp:[192.168.1.1] gw# postmap /usr/local/etc/postfix/virtual_transport # /etc/rc.conf postfix_enable="YES" # /usr/local/etc/postfix/sender_access /.*company\.local/i REJECT Sending to internet is forbidden # /usr/local/etc/postfix/main.cf smtpd_sender_restrictions = check_sender_access regexp:/usr/local/etc/postfix/sender_access gw# postfix start gw# cat /var/log/maillog [PS] C:\> New-SendConnector -Name 'Outbound' -Usage 'Internet' -AddressSpaces 'smtp:*;1' -DNSRoutingEnabled $false -SmartHosts '[192.168.1.10]' -SmartHostAuthMechanism 'None' -SourceTransportServers 'MX' [PS] C:\> Set-ReceiveConnector "Default MX" -permissiongroups: "ExchangeUsers, ExchangeServers, ExchangeLegacyServers, AnonymousUsers" ----------------------------------------------------------------------------------------------------------------- XFS от SGI: структура и алгоритмы Андрей Пешеходов /* * Комбинированный заголовок и структура, используемая общим кодом */ typedef struct xfs_btree_hdr { __be32 bb_magic; /* magic-номер, зависит от типа дерева и блока */ __be16 bb_level; /* уровень блока в дереве, 0 если лист */ __be16 bb_numrecs; /* текущее количество записей */ } xfs_btree_hdr_t; /* Внутренний узел дерева */ typedef struct xfs_btree_block { xfs_btree_hdr_t bb_h; /* заголовок */ union { /* указатели короткой формы */ struct { __be32 bb_leftsib; /* сосед слева */ __be32 bb_rightsib; /* сосед справа */ } s; /* указатели длинной формы */ struct { __be64 bb_leftsib; /* сосед слева */ __be64 bb_rightsib; /* сосед справа */ } l; } bb_u; } xfs_btree_block_t; typedef struct xfs_sb { __uint32_t sb_magicnum; /* magic-номер == XFS_SB_MAGIC ("XFSB") */ __uint32_t sb_blocksize; /* размер блока в байтах */ xfs_drfsbno_t sb_dblocks; /* количество блоков данных */ xfs_drfsbno_t sb_rblocks; /* количество realtime-блоков */ xfs_drtbno_t sb_rextents; /* количество realtime-экстентов */ uuid_t sb_uuid; /* идентификатор ФС */ xfs_dfsbno_t sb_logstart; /* стартовый блок журнала (если он встроенный) */ xfs_ino_t sb_rootino; /* номер корневого inode */ xfs_ino_t sb_rbmino; /* inode, описывающий realtime-bitmap */ xfs_ino_t sb_rsumino; /* inode, описывающий realtime-summary */ xfs_agblock_t sb_rextsize; /* размер realtime-экстента в блоках */ xfs_agblock_t sb_agblocks; /* размер AG */ xfs_agnumber_t sb_agcount; /* количество AG's */ xfs_extlen_t sb_rbmblocks; /* количество блоков в realtime-bitmap */ xfs_extlen_t sb_logblocks; /* количество блоков в журнале */ __uint16_t sb_versionnum; /* битовая маска флагов ФС: * 0x0010 – используются атрибуты * 0x0020 – используются inodes версии 2 * 0x0040 – используются квоты * 0x0080 – используется выравнивание пакетов inodes * 0x0100 – задействовано выравнивание области данных * 0x0200 – поле shared_vn имеет смысл * 0x1000 – включено отслеживание незаписываемых экстентов * 0x2000 – используются каталоги версии 2 */ __uint16_t sb_sectsize; /* размер сектора раздела в байтах */ __uint16_t sb_inodesize; /* размер inode в байтах */ __uint16_t sb_inopblock; /* количество inodes на блок */ char sb_fname[12]; /* имя ФС */ __uint8_t sb_blocklog; /* log2 от sb_blocksize */ __uint8_t sb_sectlog; /* log2 от sb_sectsize */ __uint8_t sb_inodelog; /* log2 от sb_inodesize */ __uint8_t sb_inopblog; /* log2 от sb_inopblock */ __uint8_t sb_agblklog; /* log2 от sb_agblocks */ __uint8_t sb_rextslog; /* log2 от sb_rextents */ __uint8_t sb_inprogress; /* работает mkfs, не монтировать */ __uint8_t sb_imax_pct; /* максимальный процент пространства ФС для inodes */ __uint64_t sb_icount; /* количество выделенных inodes */ __uint64_t sb_ifree; /* количество свободных inodes */ __uint64_t sb_fdblocks; /* количество свободных блоков данных */ __uint64_t sb_frextents; /* количество свободных realtime-экстентов */ xfs_ino_t sb_uquotino; /* inode квот-файла для пользователей */ xfs_ino_t sb_gquotino; /* inodes квот-файла для групп */ __uint16_t sb_qflags; /* флаги квот */ __uint8_t sb_flags; /* флаги */ __uint8_t sb_shared_vn; /* индикатор разделяемого номера версии */ xfs_extlen_t sb_inoalignmt; /* величина выравнивание пакета inodes в блоках */ __uint32_t sb_unit; __uint32_t sb_width; __uint8_t sb_dirblklog; __uint8_t sb_logsectlog; /* log2 от размера сектора журнала */ __uint16_t sb_logsectsize; /* размер сектора для журнала в байтах (если он вынесен на отделный раздел */ __uint32_t sb_logsunit; __uint32_t sb_features2; } xfs_sb_t; typedef struct xfs_agf { __be32 agf_magicnum; /* magic-номер = XFS_AGF_MAGIC ("XAGF") * __be32 agf_versionnum; /* версия заголовка == XFS_AGF_VERSION (1) */ __be32 agf_seqno; /* sequence number starting from 0 */ __be32 agf_length; /* размер AG в блоках. Все AG, кроме последней, имеют одинаковый размер, * определенный в поле agblocks суперблока */ /* Номера корневых блоков для двух деревьев свободных экстентов - * с сортировкой по номеру стартового блока и по длине */ __be32 agf_roots[XFS_BTNUM_AGF]; __be32 agf_spare0; /* зарезервировано */ /* Количества уровней для двух деревьев свободных экстентов – * с сортировкой по номеру стартового блока и по длине */ __be32 agf_levels[XFS_BTNUM_AGF]; __be32 agf_spare1; /* зарезервировано */ __be32 agf_flfirst; /* индекс первого активного элемента в AGFL-блоке */ __be32 agf_fllast; /* индекс последнего активного элемента в AGFL-блоке */ __be32 agf_flcount; /* количество активных элементов AGFL-блока */ __be32 agf_freeblks; /* всего свободных блоков */ __be32 agf_longest; /* размер самого большого свободного экстента */ } xfs_agf_t; typedef struct xfs_agi { __be32 agf_magicnum; /* magic-номер == XFS_AGI_MAGIC ("XAGI") */ __be32 agf_versionnum; /* версия заголовка XFS_AGI_VERSION (1) */ __be32 agf_seqno; /* sequence number starting from 0 */ __be32 agf_length; /* размер AG в блоках */ __be32 agi_count; /* количество выделенных inodes */ __be32 agi_root; /* корень дерева inodes */ __be32 agi_level; /* высота дерева inodes */ __be32 agi_freecount; /* количество свободных inodes */ __be32 agi_newino; /* номер последнего выделенного inode */ __be32 agi_dirino; /* не используется */ /* * Хэш-таблица inodes, которые были разлинкованы, * но все еще достижимы через ссылки в различных списках */ __be32 agi_unlinked[XFS_AGI_UNLINKED_BUCKETS]; } xfs_agi_t; typedef struct xfs_inobt_rec { __be32 ir_startino; /* номер первого inode в пакете */ __be32 ir_freecount; /* количество свободных inodes в пакете */ __be64 ir_free; /* битовая карта занятости inodes */ } xfs_inobt_rec_t; typedef struct xfs_dinode_core { __uint16_t di_magic; /* inode magic # = XFS_DINODE_MAGIC ("IN") */ __uint16_t di_mode; /* mode и тип файла */ __int8_t di_version; /* версия inode, 1 или 2 */ __int8_t di_format; /* формат потока данных */ __uint16_t di_onlink; /* количество ссылок на inodes версии 1 */ __uint32_t di_uid; /* user id владельца */ __uint32_t di_gid; /* group id владельца */ __uint32_t di_nlink; /* количество ссылок на inode версии 2 */ __uint16_t di_projid; /* project id владельца, только для IRIX */ __uint8_t di_pad[8]; /* не используется */ __uint16_t di_flushiter; /* инкрементируется при flusf */ xfs_timestamp_t di_atime; /* время последнего доступа */ xfs_timestamp_t di_mtime; /* время последнего изменения */ xfs_timestamp_t di_ctime; /* время создания/модификации inode */ xfs_fsize_t di_size; /* количество байт в файле */ xfs_drfsbno_t di_nblocks; /* количество использованных direct- и btree-блоков */ xfs_extlen_t di_extsize; /* basic/minimum размер экстента файла */ xfs_extnum_t di_nextents; /* количество экстентов в потоке данных */ xfs_aextnum_t di_anextents; /* количество экстентов в потоке атрибутов */ __uint8_t di_forkoff; /* смещение потока данных в inode, в 64-битных словах от начала u */ __int8_t di_aformat; /* формат потока атрибутов: * 1 – локальные атрибуты, * 2 – список экстентов, * 3 – корень дерева */ __uint32_t di_dmevmask; /* DMIG event mask */ __uint16_t di_dmstate; /* DMIG state info */ __uint16_t di_flags; /* флаги */ __uint32_t di_gen; /* номер поколения */ } xfs_dinode_core_t; typedef struct xfs_dinode { xfs_dinode_core_t di_core; /* ядро inode */ xfs_agino_t di_next_unlinked; /* Это объединение описывает поток данных (data-fork) */ union { xfs_bmdr_block_t di_bmbt; /* корень дерева */ xfs_bmbt_rec_32_t di_bmx[1]; /* список экстентов */ xfs_dir2_sf_t di_dir2sf; /* короткая форма каталога v2 */ char di_c[1]; /* локальное содержимое */ xfs_dev_t di_dev; /* устройство */ uuid_t di_muuid; /* точка монтирования */ char di_symlink[1]; /* символическая ссылка */ } di_u; /* Это объединение описывает поток атрибутов (attribite-fork) */ union { xfs_bmdr_block_t di_abmbt; /* корень дерева */ xfs_bmbt_rec_32_t di_abmx[1]; /* список экстентов */ xfs_attr_shortform_t di_attrsf; /* локальные атрибуты */ } di_a; } xfs_dinode_t; /* Значения для di_format */ typedef enum xfs_dinode_fmt { XFS_DINODE_FMT_DEV, /* специальный файл - di_dev */ XFS_DINODE_FMT_LOCAL, /* локальное содержимое (файл - di_c, короткий каталог - di_dir2sf, или symlink - di_symlink) */ XFS_DINODE_FMT_EXTENTS, /* список экстентов - di_bmx */ XFS_DINODE_FMT_BTREE, /* корень дерева - di_bmbt */ XFS_DINODE_FMT_UUID /* не используется */ } xfs_dinode_fmt_t; typedef struct xfs_bmbt_rec_32 { __uint32_t l0, l1, l2, l3; } xfs_bmbt_rec_32_t; typedef struct xfs_bmbt_rec_64 { __uint64_t l0, l1; } xfs_bmbt_rec_64_t; typedef struct xfs_attr_shortform { struct xfs_attr_sf_hdr { /* заголовок */ __be16 totsize; /* размер списка */ __u8 count; /* количество активных элементов */ } hdr; struct xfs_attr_sf_entry { __uint8_t namelen; /* длина имени атрибута */ __uint8_t valuelen; /* длина значения атрибута */ __uint8_t flags; /* биты флагов (см. xfs_attr_leaf.h) */ __uint8_t nameval[1]; /* объединенные строки имени и значения атрибута */ } list[1]; /* список переменной длины */ } xfs_attr_shortform_t; #define XFS_ATTR_LEAF_MAPSIZE 3 /* доступное количество free-слотов */ /* Формат free-карты */ typedef struct xfs_attr_leaf_map { __be16 base; /* база свободного региона */ __be16 size; /* длина свободного региона */ } xfs_attr_leaf_map_t; /* Заголовок листового блока */ typedef struct xfs_attr_leaf_hdr { xfs_da_blkinfo_t info; /* этот заголовок используется для построения * двусвязных списков блоков одного уровня (см. xfs_da_btree.h) */ __be16 count; /* количество активных leaf_entry */ __be16 usedbytes; /* количество байт в буфере */ __be16 firstused; /* первый используемый байт в массиве имен */ __u8 holes; /* != 0 если блок нуждается в упаковке */ __u8 pad1; xfs_attr_leaf_map_t freemap[XFS_ATTR_LEAF_MAPSIZE]; } xfs_attr_leaf_hdr_t; typedef struct xfs_da_blkinfo { __be32 forw; /* предыдущий блок в списке */ __be32 back; /* следующий блок в списке */ __be16 magic; /* тип блока */ __be16 pad; /* unused */ } xfs_da_blkinfo_t; #define XFS_DA_NODE_MAGIC 0xfebe /* внутренний узел */ #define XFS_ATTR_LEAF_MAGIC 0xfbee /* лист дерева атрибутов */ #define XFS_DIR2_LEAF1_MAGIC 0xd2f1 /* лист дерева одноблочной директории */ #define XFS_DIR2_LEAFN_MAGIC 0xd2ff /* лист дерева многоблочной директории */ typedef struct xfs_attr_leaf_entry { __be32 hashval; /* хэш имени атрибута */ __be16 nameidx; /* индекс атрибута в буфере данных */ __u8 flags; /* LOCAL/ROOT/SECURE/INCOMPLETE флаги */ __u8 pad2; /* unused pad byte */ } xfs_attr_leaf_entry_t; /* Локальный атрибут */ typedef struct xfs_attr_leaf_name_local { __be16 valuelen; /* дллина значения */ __u8 namelen; /* длина имени */ __u8 nameval[1]; /* объединенные строки имени и значения атрибута */ } xfs_attr_leaf_name_local_t; /* Удаленный атрибут */ typedef struct xfs_attr_leaf_name_remote { __be32 valueblk; /* номер блока, хранящего значение */ __be32 valuelen; /* длина значения */ __u8 namelen; /* длина имени */ __u8 name[1]; /* имя */ } xfs_attr_leaf_name_remote_t; typedef struct xfs_attr_leafblock { xfs_attr_leaf_hdr_t hdr; /* заголовок */ xfs_attr_leaf_entry_t entries[1]; /* индексы */ xfs_attr_leaf_name_local_t namelist; /* локальные атрибуты */ xfs_attr_leaf_name_remote_t valuelist; /* удаленные атрибуты */ } xfs_attr_leafblock_t; /* Формат номера inode */ typedef union { xfs_dir2_ino8_t i8; xfs_dir2_ino4_t i4; } xfs_dir2_inou_t; /* Заголовок каталога короткой формы */ typedef struct xfs_dir2_sf_hdr { __uint8_t count; /* количество элементов */ __uint8_t i8count; /* количество 64-битных номеров inodes */ xfs_dir2_inou_t parent; /* номер inode родительского каталога */ } xfs_dir2_sf_hdr_t; /* Элемент каталога короткой формы */ typedef struct xfs_dir2_sf_entry { __uint8_t namelen; /* длина имени */ xfs_dir2_sf_off_t offset; /* saved offset */ __uint8_t name[1]; /* имя */ xfs_dir2_inou_t inumber; /* номер inode для данного имени */ } xfs_dir2_sf_entry_t; /* Каталог короткой формы */ typedef struct xfs_dir2_sf { xfs_dir2_sf_hdr_t hdr; /* заголовок */ xfs_dir2_sf_entry_t list[1]; /* массив элементов */ } xfs_dir2_sf_t; /* Одноблочный каталог */ typedef struct xfs_dir2_block { xfs_dir2_data_hdr_t hdr; /* заголовок */ xfs_dir2_data_union_t u[1]; /* массив элементов каталога */ xfs_dir2_leaf_entry_t leaf[1]; /* массив индексов */ xfs_dir2_block_tail_t tail; /* хвост блока */ } xfs_dir2_block_t; /* XFS_DIR2_DATA_FD_COUNT равно 3 */ typedef struct xfs_dir2_data_hdr { __be32 magic; xfs_dir2_data_free_t bestfree[XFS_DIR2_DATA_FD_COUNT]; } xfs_dir2_data_hdr_t; /* Активный элемент каталога */ typedef struct xfs_dir2_data_entry { __be64 inumber; /* номер inode */ __u8 namelen; /* длина имени */ __u8 name[1]; /* имя */ __be16 tag; /* смещение этого элемента в блоке */ } xfs_dir2_data_entry_t; /* Свободный элемент каталога */ typedef struct xfs_dir2_data_unused { __be16 freetag; /* XFS_DIR2_DATA_FREE_TAG */ __be16 length; /* длина свободного участка */ __be16 tag; /* смещение этого элемента в блоке */ } xfs_dir2_data_unused_t; /* Обобщенный элемент каталога */ typedef union { xfs_dir2_data_entry_t entry; xfs_dir2_data_unused_t unused; } xfs_dir2_data_union_t; typedef struct xfs_dir2_leaf_entry { __be32 hashval; /* хэш имени */ __be32 address; /* адрес элемента */ } xfs_dir2_leaf_entry_t; typedef struct xfs_dir2_block_tail { __be32 count; /* количество листовых элементов */ __be32 stale; /* количество устаревших листовых элементов */ } xfs_dir2_block_tail_t; /* Активный элемент каталога */ typedef struct xfs_dir2_data_entry { __be64 inumber; /* номер inode */ __u8 namelen; /* длина имени */ __u8 name[1]; /* имя */ __be16 tag; /* смещение этого элемента в блоке */ } xfs_dir2_data_entry_t; /* Свободный элемент каталога */ typedef struct xfs_dir2_data_unused { __be16 freetag; /* XFS_DIR2_DATA_FREE_TAG */ __be16 length; /* длина свободного участка */ __be16 tag; /* смещение этого элемента в блоке */ } xfs_dir2_data_unused_t; /* Обощенный элемент каталога */ typedef union { xfs_dir2_data_entry_t entry; xfs_dir2_data_unused_t unused; } xfs_dir2_data_union_t; /* Заголовок листового блока */ typedef struct xfs_dir2_leaf_hdr { xfs_da_blkinfo_t info; /* DA-заголовок, см. xfs_da_btree.h */ __be16 count; /* количество элементов */ __be16 stale; } xfs_dir2_leaf_hdr_t; /* Элемент листового узла */ typedef struct xfs_dir2_leaf_entry { __be32 hashval; /* хэш имени */ __be32 address; /* смещение в пределах файла каталога */ } xfs_dir2_leaf_entry_t; /* Хвост */ typedef struct xfs_dir2_leaf_tail { __be32 bestcount; } xfs_dir2_leaf_tail_t; /* Листовой блок в сборе */ typedef struct xfs_dir2_leaf { xfs_dir2_leaf_hdr_t hdr; /* заголовок */ xfs_dir2_leaf_entry_t ents[1]; /* элементы */ xfs_dir2_data_off_t bests[1]; /* список свободных участков в диапазоне листовых блоков */ xfs_dir2_leaf_tail_t tail; /* хвост */ } xfs_dir2_leaf_t; typedef struct xlog_rec_header { uint h_magicno; /* ID log-записи */ uint h_cycle; /* номер цикла записи */ int h_version; /* версия log-записи */ int h_len; /* длина записи в байтах */ xfs_lsn_t h_lsn; /* номер сектора для данной записи */ xfs_lsn_t h_tail_lsn; /* номер сектора первой несброшенной записи */ uint h_chksum; /* контрольная сумма тела записи, если не используется - 0 */ int h_prev_block; /* номер блока предыдущей LR */ int h_num_logops; /* количество log-операций в этой LR */ uint h_cycle_data[XLOG_HEADER_CYCLE_SIZE / BBSIZE]; int h_fmt; /* формат log-записи */ uuid_t h_fs_uuid; /* UUID файловой системы */ int h_size; /* размер */ } xlog_rec_header_t; ----------------------------------------------------------------------------------------------------------------- Телефония для эпохи Web 2.0 Антон Борисов # cd /usr/ports/net/asterisk/ # make config # make && make install && make clean asterisk_enable="YES" [200] type=friend host=dynamic username=200 secret=mypasswd nat=y context=default callerid="Anton" <200> allow=gsm allow=ulaw allow=alaw [1200] type=friend host=dynamic username=1200 secret=mypasswd nat=no context=default callerid="Anton" <1200> allow=gsm allow=ulaw allow=alaw exten => 1200,1, Macro(stdexten,1200,SIP/1200) exten => user1, 1, Goto(1200|1) exten => 200,1, Macro(stdexten,200,SIP/200) exten => user3, 1, Goto(200|1) /usr/local/etc/rc.d/asterisk restart 1 server { 2 listen 8811; 3 server_name localhost; 4 location / { 5 root /usr/local/www/nginx; 6 index index.html index.htm; 7 auth_basic "Ask yourself!"; 8 auth_basic_user_file /usr/local/etc/nginx/htpasswd; 9 } [marko2] type=friend host=dynamic regexten=1234 secret=moofoo context=default permit=0.0.0.0/0.0.0.0 [tony] secret = mypass read = system,call,log,verbose,command,agent,user write = system,call,log,verbose,command,agent,user $tn->print("Action: originate\nExten: $exten\nContext: $context\nPriority: $priority\nChannel: $phonetype/$account\nPriority:1\nCallerid: $callerid\n\n"); ----------------------------------------------------------------------------------------------------------------- Каркасная разработка веб-приложений на основе фреймворка Kohana Александр Слесарев www.domain.ru/index.php?/controller/method/params RewriteEngine on RewriteCond $1 !^(index\.php|images|robots\.txt) RewriteRule ^(.*)$ /index.php/$1 [L] www.domain.ru/controller/method/params defined('SYSPATH') or die('No direct script access.'); www.domain.ru/controller/method/params.html TRUE, 'persistent' => FALSE, 'connection' => array ( 'type' => 'mysql', //Тип БД 'user' => 'root', //Имя пользователя БД 'pass' => 'pass', //Пароль БД 'host' => 'localhost', //Хост БД 'port' => FALSE, 'socket' => FALSE, 'database' => 'kohana' //Имя БД ), 'character_set' => 'utf8', 'table_prefix' => '', 'object' => TRUE, 'cache' => FALSE, 'escape' => TRUE ); $config['site_domain'] = '/kohana/'; //Имя домена $config['index_page'] = 'index.php'; //Индексный контроллер <?=$title;?>

//Метод, вызываемый по умолчанию public function index() { $view = new View('index'); //Создание нового объекта отображения $view->title = "Фреймворк Kohana "; //Передача параметров в отображение $view->content = "Приложение, созданное на базе Kohana "; $view->render(TRUE); //Вывод отображения в браузер } model = new Index_Model; } // Метод, вызываемый по умолчанию public function index() { $data = $this->model->GetData(); // Получение данных из модели $view = new View('index',$data); // Создание нового объекта отображения и передача параметров $view->render(TRUE); // Вывод отображения в браузер } } ?> Kohana::config('session.driver'); new Profiler; // Начало измерения Benchmark::start('benchmark1'); ... // Код программы ... // Остановка измерения Benchmark::stop('benchmark1'); ... // Вывод значения print_r(Benchmark::get('benchmark1')); utf8::strip_ascii_ctrl($str) $view = new View('yourview'); // Создание нового объекта отображения $view->title = "Hello world!"; // Передача параметра в отображение $view->render(TRUE); // Вывод отображения в браузер $config['enable_hooks'] = FALSE; '; } } Event::add('system.display', array('Power', 'Kohana')); $this->profiler = new Profiler; $url = url::base(); ----------------------------------------------------------------------------------------------------------------- Перенос данных с использованием технологии OLE Андрей Луконькин Спр8 = Справочники.Контрагенты.СоздатьЭлемент(); Спр8.Наименование = Спр77.Наименование; Спр8.Записать(); Рег = РегистрыСведений.СтруктураПерегрузки.СоздатьМенеджерЗаписи(); Рег.Ид = Семерка.ЗначениеВСтрокуВнутр(Спр77.текущийэлемент()); Рег.Орг = Орг.Ссылка; Рег.Элемент = Спр8.Ссылка; Рег.Записать(); КаталогПрограммы77 = "C:\Program Files\1Cv77\BIN\"; КаталогБазы77 = "C:\1c_base\ПУБ\"; СтрокаПодключения = """" + КаталогПрограммы77 + """" + "enterprise /d""" + КаталогБазы77 + """" + " /nЮзер /p123"; Семерка = Новый COMОбъект("V77S.Application"); Если Семерка.Initialize(Семерка.RMTrade,СтрокаПодключения,"NO_SPLASH_SHOW") Тогда Сообщить("Открыта база 7.7"); Соединение=Истина; КонецЕсли; ИНН = Лев(Семерка.Константа.ИННОрганизации,10); Орг = Справочники.Организации.НайтиПоРеквизиту("ИНН",ИНН); Опер = Документы.ОперацияБух.СоздатьДокумент(); Опер.Организация = Орг.Ссылка; Опер.Дата = ДатаОперации; БИ77 = Семерка.CreateObject("БухгалтерскиеИтоги"); ОлеВидСубконто1=Семерка.EvalExpr("ВидыСубконто.Контрагенты"); ОлеВидСубконто2=Семерка.EvalExpr("ВидыСубконто.Договоры"); Если Счет60=1 Тогда Счет = ПланыСчетов.Хозрасчетный.РасчетыСПоставщиками; СчетСтр = "60.1"; ИначеЕсли Счет60=2 Тогда Счет = ПланыСчетов.Хозрасчетный.РасчетыПоАвансамВыданным; СчетСтр = "60.2"; ИначеЕсли Счет60=3 Тогда Счет = ПланыСчетов.Хозрасчетный.РасчетыСПоставщикамиВал; СчетСтр = "60.11"; ИначеЕсли Счет60=4 Тогда Счет = ПланыСчетов.Хозрасчетный.РасчетыПоАвансамВыданнымВал; СчетСтр = "60.22"; КонецЕсли; БИ77.ИспользоватьСубконто("Контрагенты"); БИ77.ИспользоватьСубконто("Договоры"); БИ77.ВыполнитьЗапрос(ДатаИтогов,ДатаИтогов,СчетСтр); БИ77.ВыбратьСубконто(1); Пока БИ77.ПолучитьСубконто(1)=1 цикл БИ77.ВыбратьСубконто(2); ИД = Семерка.ЗначениеВСтрокуВнутр(БИ77.Субконто(1)); Рег = РегистрыСведений.СтруктураПерегрузки; ОтборПоИД = Новый Структура("ИД, Орг"); ОтборПоИД.ИД = ИД; ОтборПоИД.Орг = Орг.Ссылка; ВыборкаИД = рег.Получить(ОтборПоИД); Суб1 = ВыборкаИД.Элемент.Ссылка; Пока БИ77.ПолучитьСубконто(2)=1 цикл ДебетовоеСальдо = БИ77.скд(1); КредитовоеСальдо = БИ77.скк(1); Если ДебетовоеСальдо<>0 Тогда ИД = Семерка.ЗначениеВСтрокуВнутр(БИ77.Субконто(2)); Рег = РегистрыСведений.СтруктураПерегрузки; ОтборПоИД = Новый Структура("ИД, Орг"); ОтборПоИД.ИД = ИД; ОтборПоИД.Орг = Орг.Ссылка; ВыборкаИД = рег.Получить(ОтборПоИД); Элемент8 = ВыборкаИД.Элемент.Ссылка; Движ = Опер.Движения.Хозрасчетный.Добавить(); Движ.СчетДт = Счет.Ссылка; Движ.СубконтоДт.Вставить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты,Элемент8.Владелец); Движ.СубконтоДт.Вставить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры,Элемент8); Движ.СчетКт = ПланыСчетов.Хозрасчетный.Вспомогательный; Движ.Сумма = ДебетовоеСальдо; Движ.Активность=Истина; Движ.Период = ДатаОперации; Опер.Движения.Хозрасчетный.Записать(); ИначеЕсли КредитовоеСальдо<>0 тогда ИД = Семерка.ЗначениеВСтрокуВнутр(БИ77.Субконто(2)); Рег = РегистрыСведений.СтруктураПерегрузки; ОтборПоИД = Новый Структура("ИД, Орг"); ОтборПоИД.ИД = ИД; ОтборПоИД.Орг = Орг.Ссылка; ВыборкаИД = рег.Получить(ОтборПоИД); Элемент8 = ВыборкаИД.Элемент.Ссылка; Движ = Опер.Движения.Хозрасчетный.Добавить(); Движ.СчетКт = Счет.Ссылка; Движ.СубконтоКт.Вставить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты,Элемент8.Владелец); Движ.СубконтоКт.Вставить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры,Элемент8); Движ.СчетДт = ПланыСчетов.Хозрасчетный.Вспомогательный; Движ.Сумма = КредитовоеСальдо; Движ.Активность=Истина; Движ.Период = ДатаОперации; Опер.Движения.Хозрасчетный.Записать(); КонецЕсли; КонецЦикла; КонецЦикла; Опер.Записать(); Семерка=""; Соединение=Ложь; Сообщить("Закрыта база 7.7"); ЗначПеречисленияOLE = Объект77.Реквизит.Идентификатор(); ТЗ = Семерка.глРасчетАмортизацииОС(Спр77.ТекущийЭлемент(), ДатаФормирования); -----------------------------------------------------------------------------------------------------------------