\subsection{\textit{dselect}: Debian package management frontend}

\deb{dselect}, е стандартния за Debian механизъм за управление и инсталация на
пакети. Въпреки че частично функционалността му може да бъде постигната
чрез apt или директно чрез dpkg, dselect разполага с някой
функционалности, които не трябва да бъдат пропускани.

Основното, което прави \man{dselect}{8} уникален като механизъм за управление на
пакетите в debian, е това, че той присъства стандартно във всяка
инсталация, предлага текстово меню базиран интерфейс, и следи
зависимостите между пакетите много по-дълбоко, отколкото го прави apt, и
това му помага да решава проблеми, които \deb{apt} не е способен за сега да реши.

\subsubsection{Основи на dselect}

\deb{dselect} трябва да се стартира от командният ред в текстов режим, с права
на \textbf{root} и без никакви параметри. Макар че е възможно да се стартира от
името и на друг потребител, при типично стандартно инсталирана
дистрибуция няма да може да се прави нищо съществено с него. \deb{dselect}
разполага с няколко командни параметъра, но те се използват много рядко
и като цяло управляват debug, или цветови режим.

Менюто на \deb{dselect} се състои от няколко основни части:

\begin{enumerate}
\item \textbf{[A]ccess}
\item \textbf{[U]pdate}
\item \textbf{[I]nstall}
\item \textbf{[C]onfig}
\item \textbf{[R]emove}
\item \textbf{[Q]uit}
\end{enumerate}

Всяка буквичка от меню заградена в квадратни скоби \texttt{[]} може да бъде
използвана за директен достъп чрез натискане на съответния клавиш от
клавиатурата. Също така е възможно да се използва и съпоставеният номер
пред името на реда, за директен достъп. В противен случай можете да
използвате и да се позиционирате на съответното място чрез стрелките.

Въпреки че не е било винаги така, в съвременните Debian дистрибуции
\man{dselect}{8} използва \man{dpkg}{8} и \man{apt}{8} като подсистеми за конкретно управление на
пакетите, по макар и невидим за потребителите начин. Все пак е важно да
се знае това, с цел в процеса на работата с дистрибуцията и управлението
на пакети да се осъзнае нейната логика и свързаност между съставните и
компоненти.

Когато управлявате инсталацията на пакети основните въпроси, на които
трябва да си отговорите са:

\begin{enumerate}
\item От къде се извличат пакетите, когато желаем да ги инсталираме? - С това
се занимава конфигурацията в менюто \textbf{[A]ccess}
\item Какви точно пакети има на мястото, от което ги взимаме преди да ги
инсталираме и какви са техните изисквания и зависимости? - С това се
занимава менюто \textbf{[U]pdate}
\item Какво точно искаме да направим (да инсталираме, премахнем,
преконфигурираме) и с кой пакет? - С това се занимава менюто \textbf{[S]elect}
\item Да изпълним съответните действия зададени от \textbf{[S]elect}. - С това се
занимават менюто \textbf{[I]nstall}, \textbf{[C]onfig} и \textbf{[R]remove}.
\end{enumerate}

Следователно, за да направим инсталация на пакет през \man{dselect}, трябва
последователно да преминем и конфигурираме всяко едно от менютата - 
\textbf{[A]ccess}, \textbf{[U]pdate}, \textbf{[S]elect}, \textbf{[I]nstall}. 
От друга страна, ако веднъж сме конфигурирали \textbf{[A]ccess} например, и не 
желаем да променяме конфигурацията, не е нужно да преминаваме от там. 
Същото се отнася като цяло и за другите менюта.

\paragraph{\textbf{[A]ccess}}

Целта на това меню е да бъде конфигуриран и избран методът на достъп до
мястото, където се намират пакетите, които желаем евентуално да
инсталираме на системата. Веднъж конфигурирано, не е необходимо това
меню да бъде достъпвано повече (освен, ако не желаете да направите
някаква промяна).

В съвременния \man{dselect}{8} след избиране на \textbf{[A]ccess} следва да посочите метод
на достъп до пакетите. Възможностите са много, поради факта, че методите
са всъщност малки модули, които разширяват функционалността на dselect.
Всеки, както и вие самият можете да си напишете такъв модул.

Типичните налични методи са:
\begin{enumerate}
\item multi\_cd
\item multi\_nfs
\item mounted
\item floppy
\item apt
\end{enumerate}

Метод за достъп \textbf{apt}

Това е метод за достъп, който е базиран на стандартната работа на
командата \man{apt}{8}. Целта е достъпът и управлението на пакетите да бъде
унифициран, без значение дали се използва \man{apt}{8} или \man{dselect}{8}. И понеже
\man{dselect}{8} и \man{apt}{8} записват информацията за наличните пакети и техните
зависимости в различни файлове, е силно препоръчително в \man{dselect}{8} да се
използва метод за достъп \man{apt}{8}, с цел информацията между двете да си
съвпада (единствената съществена причина за това е да се улесни работата
на администраторите и да не се извлича два пъти информация от
оригиналния източник).

Когато изберете метод \man{apt}{8} ви се предлага един диалог, в който можете да
промените конфигурацията на apt файла sources. Там можете да изберете
мястото, където се намират пакетите и как да се достъпват според
правилата на apt. Менюто е точен еквивалент на извикването на командата
\man{apt-setup}{8}. Конфигурацията на достъпа се намира във файла
\textbf{/etc/apt/sources.list} (\man{sources.list}{5}). Ако имате proxy то трябва да
го зададете по правилата на apt (или lynx) чрез променлива:
\begin{verbatim}
     # export http_proxy=http://gateway:3128/
     # dselect
\end{verbatim}

Метод за достъп \textbf{multi\_cd}

Това е мощен но вече сравнително стар метод за достъп до пакетите на
debian. Основната му цел е да позволи инсталация на дистрибуция от един
или няколко CDROM-а като например Debian Binary CD. 

Когато започнете да го използвате ще бъдете запитани за директорията, в
която се монтира CDROM-а, мястото на Debian дистрибуцията и на пакетите
в нея.


Метод за достъп \textbf{multi\_nfs}, \textbf{mounted}

Това са методи, чиято цел е да се опише, че пакетите са достъпни през
монтирана през NFS или по друг начин директория на диска.

Метод за достъп \textbf{floppy}

Това е непрепоръчителен метод за инсталация на дистрибуцията от floopy
или ZIP диск.

\paragraph{\textbf{[U]pdate}}

Целта на това меню е да стартира процес, който да извлече от мястото,
където се намират пакетите списък с техните имена и зависимости. Какво
точно прави зависи и е специфично за всеки различен избран метод за
достъп. Ако е избран препоръчителният метод за достъп \textbf{apt}, се стартира
процес, който е еквивалентен на изпълнението на командата \textbf{apt-get
update}. След приключване на изпълнението на apt-get update, \man{dselect}{8}
изчита обновеният списък с пакетите на apt, и изгражда собствената си
база с данни. В базата на \man{dselect}{8} се следят много по-сложни зависимости.

В типичните ситуации е рядкост често да се променя методът за достъп
(менюто [A]ccess). Но е силно препоръчително при всяко стартиране на
dselect да се извика поне веднъж [U]pdate, за да бъде сигурно, че
информацията за пакетите е актуална. Това не се прави автоматично с
единствената идея, че администраторът на машината може да не я е свързал
в интернет или да не е сложил cdrom-ът с пакетите.

\paragraph{\textbf{[S]elect}}

Това е менюто, в което се върши реалната работа по управлението на
пакетите. След като е направен [U]pdate, за да сме сигурни, че
информацията в базата с пакетите е актуална трябва да влезем тук.

След избиране на [S]elect се вижда една страница с кратка помощ как
точно ще изглежда списъкът с пакетите и как да различим кои са нови, кои
са инсталирани, за кои има по-нови версии и в кои има някакъв проблем.
Също така с помощта на клавиша интервал може да се разходите и да
разгледате останалата част от помощната страница, както и клавишите за
достъп до функциите, които се предлагат. С клавиша Enter се влиза
директно в списъка с пакетите.

Това, което е важно да се запомни е, че винаги, когато натиснете клавиша
``?'' ще бъде показана кратка помощ за клавишите и как се използва менюто
като цяло.

Ако терминалната емулация ви е конфигурирана както трябва, то трябва да
виждате всички пакети, за които \man{dselect}{8} знае от къде да ги извлече или
са инсталирани на системата. Менюто изглежда горе долу така:

%% FIXME PNG \img{images/dselect1.png}

Пакетите са разделени на секции (стари, графични, инсталирани, свободни,
платени и т.н.). Пред всяко име на пакет има 4 знака, които за
инсталираните пакети изглеждат най-често като "*". Тези три знака
определят какво е състоянието на пакета спрямо системата. Това се нарича
EIOM. Или по точно:

Под E стои знак, който определя дали е имало грешка при инсталирането
или достъпването на пакета. Ако тук пише "R" значи е имало сериозен
проблем.

Под I стои знак, който определя дали пакетът е инсталиран вече. Знаците
значат както следва:

\begin{itemize}
\item * - пакета е инсталиран
\item - - пакета не е инсталиран, но конфигурационните му файлове присъстват
(може да е бил деинсталиран без изтриване на конфигурационните файлове)
\item U - разархивиран, но без стартиран конфигурационен скрипт
\item C - полуинсталиран, поради грешки в конфигурационният скрипт
\item I - полуинсталиран, поради някаква грешка
\end{itemize}

Под O стои знак, който определя каква е била предишната ни
директива/команда към пакета (например да се инсталира).

Под M стои знак, който определя текущата директива (последното, което
сме избрали и което ще бъде изпълнено при  \textbf{[I]nstall}). 
Знаците значат както следва:

\begin{itemize}
\item * - ще бъде инсталиран и упгрейдван
\item - - ще бъде изтрит
\item = - пакета е заключен. Няма да бъде променян от автоматично действие.
\item \_ - пакета е маркиран за пълно изтриване (включително с
конфигурационните файлове)
\item n - пакета е нов и не е имал предишно зададена команда
\end{itemize}

Възможно е да желаете да виждате информацията за пакетите в по-подробен
вид. Това се превключва чрез клавиша "V" - Verbose.

Основните клавиши, които трябва да се знаят:

\begin{itemize}
\item + избира пакетът да бъде инсталиран. При натискането веднага се
проверяват всички познати зависимости между пакетите и се прави
предложение да бъдат изпълнени.
\item - избира пакетът да бъде деинсталиран. Проследяват се зависимостите и
се прави предложение със списък на всички засегнати пакети, дали и те да
се деинсталират.
\item = заключва пакета. Така той няма да бъде променян или предлаган за
upgrade при автоматична проверка.
\item : отключва пакета, ако е бил заключен.
\item Q излиза от менюто или под менюто, без да прави проверка на
зависимостите.
\item Enter излиза от менюто с проверка на зависимостите (препоръчителният
начин).
\item X излиза без да запомня последната промяна.
\item CTRL+C излиза от dselect директно.
\item / търси текст в името на пакетите.
\item \ търси последният търсен текст отново.
\item e се мести от началото до края на списъка.
\item i дава допълнителна информация за пакета.
\end{itemize}

\paragraph{\textbf{[I]nstall}}

Това е менюто, което изпълнява зададените в Select команди. Ако се
използва метод APT, тук се и изтриват зададените за изтриване пакети.

\paragraph{\textbf{[C]onfigure}}

Това е менюто, което се опитва да конфигурира всички неконфигурирани
пакети, или пакети, на които не са сработили инсталационните скриптове,
чрез повторното им изпълнение.

\paragraph{\textbf{[R]emove}}

Това е менюто, което изтрива зададените в [S]elect за изтриване пакети.

