46596 (607873), страница 6
Текст из файла (страница 6)
Отредактировать файл yum.conf, чтобы он содержал такие строки:
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=fedora-release
tolerant=1
exactarch=1
[development]
name=Fedora Core $releasever - Development Tree
#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/development/i386
baseurl=http://mirror.dulug.duke.edu/pub/fedora/linux/core/development/i386
[SELinux]
name=SELinux repository
baseurl=ftp://people.redhat.com/dwalsh/SELinux/Fedora
Установить соответствующие пакеты.
yum install policy checkpolicy policycoreutils policy-sources pam passwd vixie-cron
После этого, выполнить такие команды:
cd /etc/security/selinux/src/policy
make load
make relabel
Перезагрузить машину.
Приложение 2
Работа с RPM-пакетами.
Основные команды:
rpm -i - установка пакета
rpm -q -p -i – краткая информация о пакете: размер, автор и т.д.
rpm -q -p -il | less – просмотр информации постранично (параметр l означает, что нужно выводить содержимое данного пакета)
rpm -q -f -i – определение к какому пакету относится данный файл.
rpm -U - обновление пакета (данная команда не только установит пакет, но также удалит все предыдущие версии)
rpm -e - удаление пакета
Более подробную информацию можно найти в man rpm, но вышеперечисленных команд вполне достаточно для комфортной работы.
Типичный пример использования RPM таков: предположим, нам нужно установить на машину некую игру, хранящуюся в файле tetris.rpm
Установка программы
rpm -i tetris.rpm
Через месяц вышла новая версия, tetris_1.rpm. Обновление программы:
rpm -U tetris_1.rpm
Ещё через месяц игра надоела. Удаляем её с машины:
rpm -e tetris.rpm
Управлять пакетами можно также с помощью программ Midnight Commander (mc), purp и ряда других, имеющихся практически в любом Linux-дистрибутиве.
Приложение 3
Исходный код демона.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int errno;
#define PATH "hevil.l"
inline void do_packet_loop();
void fsignal(int sig);
void open_mesg();
/*Здесь идет собственно тело демона, в моем случае программа
приостанавливает свою работу до получения какого-то сигнала*/
inline void do_packet_loop()
{while(1)pause();}
// Собственный обработчик сигналов
void fsignal(int sig)
{// Открытие файла лога
FILE* fp;
if( (fp = fopen(PATH, "a")) == NULL )
{open_mesg();
_exit(0);}
// Определяем текущее время
time_t timv = time(NULL);
struct tm *local_tm = localtime(&timv);
switch(sig)
{case SIGUSR1:
fprintf(fp, "[СИГНАЛ] Получен сигнал № %d в %s", sig, asctime(local_tm));
printf("\n .:Информация о демоне:.\n Данный демон перехватывает и обрабатывает некоторые сигналы, \n протоколирует в лог все происходящие с ним события. \n GID и UID присваивается в зависимости от пользователя, запустившего данный демон.\n\n Автор: Тармолов А.В. \t Группа: ИУ7-63\n\n");
break;
case SIGUSR2:
fprintf(fp, "[СИГНАЛ] Получен сигнал № %d в %s", sig, asctime(local_tm));
printf("\n .:Системная информация о демоне:.\n PID = %d \n PPID = %d \n GID =A%d \n UID = %d\n\n", getpid(), getppid(), getgid(), getuid());
break;
case SIGTERM:
case SIGINT:
case SIGQUIT:
fprintf(fp, "[СИГНАЛ] Демоном получен сигнал завершения № %d в %s", sig, asctime(local_tm));
fclose(fp);
_exit(0);
break;
default:
fprintf(fp, "Сигнал %d не обработан(пропущен)\n",sig);
break;}
fclose(fp);}
int main(int argc,char** argv)
{chdir("/"); // Переходим на рут, чтоб не блокировать файловые системы
if(fork()) _exit(0); // Форкаемся.
FILE* fp;
if( (fp = fopen(PATH, "w")) == NULL )
{open_mesg();
_exit(0);}
// Определяем текущее время
time_t timv = time(NULL);
struct tm *local_tm = localtime(&timv);
fprintf(fp, "[СИГНАЛ] Демоном стартовал в %s", asctime(local_tm));
fclose(fp);
setsid(); // Отрываемся от управляющего терминала и переходим в фоновый режим
int j;
for(j=1; j<32; j++) /*настраиваем обработчиком всех сигналов функцию fsignal*/
signal(j,fsignal);
printf("PID = %d\n\n", getpid()); // В принципе это для отладки
do_packet_loop(); // "Демонизируем" программу. В бесконечном цикле будет ожидать сигнала.}
void open_mesg()
{perror("[daemon] Ошибка открытия файла лога!");
printf("[daemon] Демон аварийно завершает свою работу!");}
32>