Страница 1 из 1

Установка программ (mc)

Добавлено: 02 мар 2010, 08:44
RomA
На примере установки файлового менеджера (mc) посмотрим как устанавливать программы на FreeBSD.
Поставить программу можно разными способами:
1) собрать из исходников
2) собрать из портов
3) поставить из пакета
4) перенести с соседнего компьютера
Первые два способа подразумевают установку программ из исходных кодов, вторые два способа подразумевают перенос уже собраных бинарных файлов.
Самый правильный - первый способ, но он же и самый трудоемкий. Правильный, потому что вы поставите только ту программу, которую хотите, и ничего лишнего, а трудоемкий, потому что прийдется все ошибки решать в ручном режиме и если вы не знаете си, не умеете читать исходиники, или вообще не умеете внимательно читать, да еще и по английски - это не ваша стезя
Второй способ подразумевает что кто-то за вас уже отловил все ошибки, и сделал сценарий, по которуму будет происходить сборка. Установка происходит легко и просто, но вместе с вашей нужной программой вам в систему будет установлено еще куча для вас ненужных программ. делается это для того, что бы у вас гарантировано все стало и заработало - такая, так сказать, плата за вашу лень )
Если же у вас уже есть собраная каким нить из первых способов программа, и вам надо перенести её на другой сервер - вы можете подготовить пакет - грубо говоря посмотреть куда и что стало, и упаковать это все архиватором, а потом на другой машине развернуть, так, что бы оно стало в те же места, где и на первой - это третий способ.
Ну и если вы не умете делать предыдущее - то четвертый способ для вас - вы просто переносите бинарник, запускаете, он матерится, вы даете ему то, на что он матерится и так до тех пор пока не запустится :-)

Ну а рассматривать начнем как всегда с самого простого - то есть с установки с пакетов. Первое, что нам обычно нужно - это файловый менеджер - давайте его и поставим. Итак

Код: Выделить всё

cd /usr/ports/misc/mc
make install clean
собрать, установить, очистить - команды можно вводить по отдельности, а можно вот так сразу. порты - это сценарии сборки - в макфайле уже прописано что и где лежит в нашей системе, если его нет - то прописано в каком порте оно есть - этот порт поставится автоматом. Итак, наша команда делится на три команды - это
make - на этом этапе будут проверены зависимости, скачаны исходники и собраны бинарники
make install - собраные бинарники будут рассованы по системе в нужные каталоги
make clean - будут удалены все временные каталоги, где происходила сборка, и до второго этапа лежали собраные на первом этапе бинарники и распакованые исходники
По мимо этого есть еще и другие команды - наиболее часные
make config - если первый раз что-то не то выбрали, можно переконфигурировать сценарий и пересобрать потом заново

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

Код: Выделить всё

                      ┌────────────────────────────────────────────────────────────────────┐
                      │                     Options for mc 4.7.0.2_1                       │  
                      │ ┌────────────────────────────────────────────────────────────────┐ │  
                      │ │           [X] SLANG     Build with SLang library               │ │  
                      │ │           [X] ICONV     Build with iconv recoding              │ │  
                      │ │           [X] NLS       Build with NLS support                 │ │  
                      │ │           [X] EDIT      Build with internal editor             │ │  
                      │ │           [ ] X11       Build with X11 library                 │ │  
                      │ │           [X] SUBSHELL  Build with subshell support            │ │  
                      │ │           [X] SAMBA     Build with Samba support               │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      ├─└────────────────────────────────────────────────────────────────┘─┤  
                      │                       [  OK  ]       Cancel                        │  
                      └────────────────────────────────────────────────────────────────────┘  
                      ┌────────────────────────────────────────────────────────────────────┐
                      │                   Options for libslang2 2.2.2                      │  
                      │ ┌────────────────────────────────────────────────────────────────┐ │  
                      │ │              [X] PCRE   Include pcre support                   │ │  
                      │ │              [X] PNG    Include png support                    │ │  
                      │ │              [X] ICONV  Include iconv support                  │ │  
                      │ │              [ ] ONIG   Include Oniguruma support              │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      ├─└────────────────────────────────────────────────────────────────┘─┤  
                      │                       [  OK  ]       Cancel                        │  
                      └────────────────────────────────────────────────────────────────────┘  
                      ┌────────────────────────────────────────────────────────────────────┐
                      │                     Options for glib 2.22.4                        │  
                      │ ┌────────────────────────────────────────────────────────────────┐ │  
                      │ │            [ ] COLLATION_FIX  fix string collation             │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      ├─└────────────────────────────────────────────────────────────────┘─┤  
                      │                       [  OK  ]       Cancel                        │  
                      └────────────────────────────────────────────────────────────────────┘                                                                                  
                      ┌────────────────────────────────────────────────────────────────────┐
                      │                    Options for gamin 0.1.10_3                      │  
                      │ ┌────────────────────────────────────────────────────────────────┐ │  
                      │ │     [ ] GAM_POLLER  Use gamin's poller instead of kqueue's     │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      ├─└────────────────────────────────────────────────────────────────┘─┤  
                      │                       [  OK  ]       Cancel                        │  
                      └────────────────────────────────────────────────────────────────────┘  
                                                                      
И вот у нас все собралось - как видим, акромя самого файлового менеджера мы получили куча программ, которые, может быть, нужны для его работе, а может и не нужны даже совсем, но зато мы получили и сам файловый менеджер. пробуем его запустить... хотя нет, рано - система еще не вкурсе что у нас там где установилось, и нате перечитать переменные окружения, иначе прийдется задавать полный путь до бинарника. Итого - перечитываем и запускаем

Код: Выделить всё

rehash
mc
Вот мы и поставили программу самым простым способом установки для FreeBSD

Теперь давайте поговорим про третий вариант. На ftp.freebsd.org есть уже собранные пакеты для фри. грубо говоря когда мы ставили фрю с диска - мы какраз и занимались установкой пакетов... можно скачать нужный пакет оттуда - это будет быстрей, чем сборка у себя на сервере, но тут мы поговорим не про это - тут хотелось бы рассмотреть весьма прибледженный к жизни вариант - а именно - у нас есть один сервер, который мы обновили, а рядом стоит такой же сервер, и пересобирать там все заново очень лениво - давайте попробуем решить эту проблему. В качестве обновления второго сервера был выбран третий метод установки программ. Но прежде чем их установить - надо их как-то найти в системе. Итак, делаем на первом, уже обновленном сервере

Код: Выделить всё

mkdir /usr/ports/packages
touch /usr/ports/paket.sh
chmod +x /usr/ports/paket.sh
сам же скрипт сбора программ в пакеты выглядит так

Код: Выделить всё

#!/bin/sh
#
# Create all packages with sym-links for FreeBSD 5.x+
#
# Version: 1.2.2
# Copyright (c) 2006 Alexey Tsvetnov, vorakl@fbsd.kiev.ua
#
# All error in  /var/log/<script_name>.err
#

# Path to packages directory
packagespath="/usr/ports/packages"

# Command for get package's version
pkgvercmd="/usr/sbin/pkg_version -v"
#pkgvercmd="/usr/local/sbin/portversion -v"<---># more faster than pkg_version

#-------------------------------------------------------------------------------

err="\033[0;40;31mError\033[0m"
ok="\033[1;40;33mOk\033[0m"


checkPackagesPath ()
{
    [ -d $packagespath ] || { /usr/bin/printf " *** $err: $packagespath doesn't exist.\n";.
<------><------><------>      /bin/echo " *** Error: $packagespath doesn't exist." > /var/log/`basename $0`.log;.
<------><------><------>      exit 1; }
    [ -d $packagespath/All ] || { /bin/mkdir $packagespath/All || exit 1; }
    [ -d $packagespath/Latest ] || { /bin/mkdir $packagespath/Latest || exit 1; }
    return 0
}

checkPkgAll ()
{
    [ -f $packagespath/All/$fullname.tbz ] && return 0
    return 1
}

checkPkgLatest ()
{
    [ -L $packagespath/Latest/$shortname.tbz ] && [ -r $packagespath/Latest/$shortname.tbz ] && return 0
    return 1
}

checkPkgCat ()
{
    [ -L $packagespath/$subdir/$fullname.tbz ] && [ -r $packagespath/$subdir/$fullname.tbz ] && return 0
    return 1
}


createPkgAll ()
{
    /usr/sbin/pkg_create -jb $fullname $packagespath/All/$fullname.tbz && return 0
    return 1
}

createPkgLatest ()
{
    /bin/rm -f $packagespath/Latest/$shortname.tbz
    cd $packagespath/Latest && /bin/ln -s ../All/$fullname.tbz $shortname.tbz && return 0
    return 1
}

createPkgCat ()
{
    if [ -d $packagespath/$subdir ]; then
<------>/bin/rm -f $packagespath/$subdir/$fullname.tbz
    else
<------>/bin/mkdir -p $packagespath/$subdir
    fi

    cd $packagespath/$subdir && /bin/ln -s ../All/$fullname.tbz $fullname.tbz && return 0
    return 1
}


getPkgFullVersion ()
{
    echo -n "Geting full version package list..."
    pkglist=`$pkgvercmd | /usr/bin/awk '{print $1}'`
    /usr/bin/printf "$ok\n"
}

work ()
{
 for fullname in $pkglist; do
    /bin/echo "Check $fullname"

    shortname=`/bin/echo $fullname | /usr/bin/sed 's/\-[^-]*$//'`
    subdir=`/usr/sbin/pkg_info -o $fullname | /usr/bin/sed -e '1,3d' -e '$d' | /usr/bin/awk -F/ '{print $1}'`

    if ! checkPkgAll; then
<------>/bin/echo -n " ==> Create package..."
<------>if createPkgAll; then /usr/bin/printf "$ok\n"
<------>  else /usr/bin/printf "$err\n"
<------>fi

<------>/bin/echo -n " ==> Create Latest sym-link..."
<------>if createPkgLatest; then /usr/bin/printf "$ok\n"
<------>  else /usr/bin/printf "$err\n"
<------>fi


<------>/bin/echo -n " ==> Create Category sym-link..."
<------>if createPkgCat; then /usr/bin/printf "$ok\n"
<------>  else /usr/bin/printf "$err\n"
<------>fi

<------>continue
    fi

    if ! checkPkgLatest; then..
<------>/bin/echo -n " ==> Create Latest sym-link..."
<------>if createPkgLatest; then /usr/bin/printf "$ok\n"
<------>  else /usr/bin/printf "$err\n"
<------>fi
    fi

    if ! checkPkgCat; then..
<------>/bin/echo -n " ==> Create Category sym-link..."
<------>if createPkgCat; then /usr/bin/printf "$ok\n"
<------>  else /usr/bin/printf "$err\n"
<------>fi
    fi
 done
}

main ()
{
    exec 2>/var/log/`basename $0`.log

    checkPackagesPath
    getPkgFullVersion
    work

    exec 2>&-
}

main

exit 0

Теперь запускаем скрипт и ждем пока он отработает. началось это примерно так

Код: Выделить всё

unix# /usr/ports/paket.sh 
Geting full version package list...Ok
Check OpenSP-1.5.2_1
 ==> Create package...Ok
 ==> Create Latest sym-link...Ok
 ==> Create Category sym-link...Ok
а закончилось вот так

Код: Выделить всё

Check zh-ttfm-0.9.5_3
 ==> Create package...Ok
 ==> Create Latest sym-link...Ok
 ==> Create Category sym-link...Ok
unix#  
После этого у меня в каталоге /usr/ports/packages образовалась структура со всеми установленными у меня программами. теперь мы можем упаковать этот каталог и перекинуть его на второй сервер, и там развернуть и установить командой pkg_add.

Re: Установка программ (mc)

Добавлено: 02 мар 2010, 14:22
ВВТ
Добавлю от себя :oops:

Как я делал.
Дано:
Компутер с Freebsd у нас не подключен к интернету. В портах следов миднайт командира не найдено. Есть привод, есть остальные компутеры с интернетом.
Скачиваем на другой машине запакованный тарболл с миднайт коммандером. Записываем на диск. Вставляем диск в систему с Freebsd.
mount /cdrom # монтируем привод
cd /cdrom # заходим на него
cp mc-4.6.1.tar.gz /usr/ports/misc/mc # копируем с диска запакованный тарболл с миднайт коммандером
cd /usr/ports/misc/mc # заходим в директорию с запакованным тарболлом
tar -zxvf mc-4.6.1.tar.gz # распаковываем
cd mc-4.6.1.tar.gz # заходим в распакованный каталог
./configure # конфигурируем
make&&make install # инсталлируем
Для полноценной работы нам еще потребуется библиотека glib. Ее можно поставить либо аналогично, либо с помощью утилиты sysinstall.
shutdown -r now # перезагружаемся и работаем

Re: Установка программ (mc)

Добавлено: 02 мар 2010, 15:07
RomA
прям вот интересно, а что мешало прописать прокси в make.conf и все ставится с нета?
1) а что мешало прописать прокси в make.conf и все ставится с нета?
2) зачем сорить в системе (/usr/ports/misc/mc), да еще и в портах - потом не найдешь куда место делось - ну создай ты какой нить /usr/local/install или же используй /usr/ports/distfiles
3) про то зачем перегружался ваще не понял
4) через флешку скинуть было бы дешевле )

Вообще как бы я поступил в твоем случае - посмотрел бы в файле /usr/ports/misc/mc/distinfo какой дистрибутив нужен, скачал бы его, и положил в /usr/ports/distfiles/ - после чего вернулся в порт и поставил бы из портов