"Создаем порт для FreeBSD своими руками. Часть II" - читать интересную книгу автора (Ачилов Рашид)Mountsmb2Набор скриптов mountsmb2 (там их три) был написан мной достаточно давно и преследовал тольк одну цель — автоматически монтировать SMB/CIFS-сетевые ресурсы от других Samba-серверов и компьютеров под управлением Windows. Поскольку это скрипт, написанный на языке командной оболочки sh, то никакой сборки порта не требуется и именно поэтому этот порт будет рассмотрен в качестве примера. PORTNAME= mountsmb2 PORTVERSION= 0.90.1 CATEGORIES= sysutils net MASTER_SITES= ftp://ftp.granch.ru/pub/other/ MAINTAINER= [email protected] COMMENT= SMB/CIFS shares mounting scripts to do it at login RUN_DEPENDS= findsmb:${PORTSDIR}/net/samba3 \ sudo:${PORTSDIR}/security/sudo \ gawk:${PORTSDIR}/lang/gawk USE_BZIP2= yes NO_BUILD= yes include lt;bsd.port.pre.mkgt; do-install: for i in smb2awk smb2nsmbrc mountsmb2 ${INSTALL_SCRIPT} ${WRKSRC}/${i} ${PREFIX}/bin endfor -@${MKDIR} ${EXAMPLESDIR} for i in sudoers.login.nsmbrc.mssmbrc ${INSTALL_DATA} ${WRKSRC}/${i} ${EXAMPLESDIR} endfor -@${MKDIR} ${DOCSDIR} ${INSTALL_DATA} ${WRKSRC}/README.FreeBSD ${DOCSDIR} @${SED} — e "s,%%EXAMPLESDIR%%,${EXAMPLESDIR},g" — i.old ${PKGMESSAGE} @${CAT} ${PKGMESSAGE} @${RM} — f ${PKGMESSAGE} @${MV} ${PKGMESSAGE}.old ${PKGMESSAGE} include lt;bsd.port.post.mkgt; В RUN_DEPENDS перечисляются все порты, от которых зависит данный скрипт, а именно GNU AWK, sudo и Samba, из которой на самом деле нужна только программа findsmb. «USE_BZIP2=yes» указывает на то, что дистрибутив упакован программой bzip2. «NO_BUILD=yes» указывает на то, что программа не требует сборки. Если этого не указать, то система будет пытаться выполнить команду make в каталоге порта, не найдет Makefile и аварийно завершится. Инсталляцией порт управляет самостоятельно — в Makefile присутствует заменяющая подмишень do-install. Здесь хорошо видно, как можно организовать цикл, который установит несколько файлов, перечисленных в списке, в указанное место. После первого цикла, который устанавливает собственно скрипты идет команда создания каталога для документации — система сама не будет делать ничего, все необходимые каталоги должны быть созданы портом. Такая странная форма записи команды означает что: • если команда завершается неудачно, например, такой каталог уже существует, то make не прекращает работу (минус перед командой); • команда не отображается на терминале (знак @ перед командой). Потом идет второй цикл, который устанавливает файлы примеров в каталог, который для этого предварительно создается, создается каталог документации и в него копируется файл README.FreeBSD. Команда sed подготавливает файл pkg-message к отображению. В файле, который распространяется вместе с портом присутствует макроподстановка %%EXAMPLESDIR%%, которая, перед тем как это сообщение будет показано пользователю, заменяется на значение переменной ${EXAMPLESDIR}. Чтобы не изменять оригинальный файл pkg-message (возможно, в следующий раз установка будет проходить с другим значением ${EXAMPLESDIR}), старый файл сохраняется, измененный файл удаляется, старый файл переименовывается в оригинальное имя. Порт несложный, но он демонстрирует, как можно использовать заменяющие подмишени. При создании таких портов следует быть предельно внимательными — помните, что любой каталог, не входящий в стандартное дерево каталогов, описанное в bsd.local.mk, имеет право не существовать и должен быть предварительно создан. |
||
|