Приложение А

В данное приложение включены следующие примеры:

Файл компоновки для монтирования целевой файловой системы NFS

Далее приводится текст простого файла компоновки, используемого при монтировании целевой файловой системы NFS.

Примечание. В реальном файле компоновки для разделения длинной строки на более короткие фрагменты нельзя использовать символ обратного слэша (\), но в данном примере мы все же использовали этот способ исключительно в целях лучшей читаемости файла.

#############################################################################

## QNX Neutrino 6.x on the fictitious ABC123 board

###############################################################################

## SUPPORTED DEVICES:##

## SERIAL: RS-232 ports UART0 and UART1

## PCI:4 PCI slots

## NETWORK: AMD 79C973

## FLASH:4MB Intel Strata Flash

## USB:UHCI USB Host Controller

##

## - For detailed instructions on the default example configuration for

## these devices see the "CONFIGURING ON-BOARD SUPPORTED HARDWARE"

## section below the build script section, or refer to the BSP docs.

## - Tip: Each sub-section which relates to a particular device is marked

## with its tag (ex. SERIAL). You can use the search features of

## your editor to quickly find and add or remove support for

## these devices.

##

###########################################################################

##

## NOTES:

##

###########################################################################

###########################################################################

## START OF BUILD SCRIPT

###########################################################################

[image=0x800a0000]

[virtual=armle,srec] .bootstrap = {

###########################################################################

## default frequency for 4kc is 80MHz; adjust -f parameter for different

## frequencies

###########################################################################

startup-abc123 -f 80000000 -v

PATH=:/proc/boot procnto-32 -v

}

[+script] .script = {

procmgr_symlink ../../proc/boot/libc.so.3 /usr/lib/ldqnx.so.2

display_msg Welcome to QNX Neutrino 6.x on the ABC123 board

#######################################################################

## SERIAL driver

#######################################################################

devc-ser8250 -e -c1843200 -b38400 0x180003f8,0x80020004 \

0x180002f8,0x80020003 &

waitfor /dev/ser1

reopen /dev/ser1

slogger &

pipe &

#######################################################################

## PCI server

#######################################################################

display_msg Starting PCI server...

pci-abc123 &

waitfor /dev/pci 4

#######################################################################

## FLASH driver

#######################################################################

# display_msg Starting flash driver...

#

# devf-abc123 &

#######################################################################

## NETWORK driver

## - substitute your IP address for 1.2.3.4

#######################################################################

display_msg Starting on-board ethernet with the v6 TCP/IP stack...

io-pkt-v6-hc -dpcnet

waitfor /dev/io-net/en0 4

ifconfig en0 1.2.3.4

#######################################################################

## REMOTE_DEBUG (gdb or Momentics)

## - refer to the help documentation for the gdb, qconn and the IDE

## for more information on remote debugging

## - the commands shown require that NETWORK be enabled too

#######################################################################

# devc-pty &

# waitfor /dev/ptyp0 4

# qconn port=8000

#######################################################################

## USB driver

#######################################################################

# display_msg Starting USB driver...

#

# io-usb -duhci &

# waitfor /dev/io-usb/io-usb 4

#######################################################################

## These env variables are inherited by all the programs which follow

#######################################################################

SYSNAME=nto

TERM=qansi

PATH=:/proc/boot:/bin:/sbin:/usr/bin:/usr/sbin

LD_LIBRARY_PATH=:/proc/boot:/lib:/usr/lib:/lib/dll

#######################################################################

## NFS_REMOTE_FILESYSTEM

## - This section is dependent on the NETWORK driver

## - Don’t forget to properly configure and run the nfsd daemon on the

## remote file server.

## - substitute the hostname or IP address of your NFS server for

## nfs_server. The server must be exporting

## "/usr/qnx630/target/qnx6/armle".

#######################################################################

display_msg Mounting NFS filesystem...

waitfor /dev/socket 4

fs-nfs3 nfs_server:/usr/qnx630/target/qnx6/armle /mnt

[+session] ksh &

}

[type=link] /bin/sh=/proc/boot/ksh

[type=link] /dev/console=/dev/ser1

[type=link] /tmp=/dev/shmem

###########################################################################

## uncomment for NFS_REMOTE_FILESYSTEM

###########################################################################

[type=link] /bin=/mnt/bin

[type=link] /sbin=/mnt/sbin

[type=link] /usr/bin=/mnt/usr/bin

[type=link] /usr/sbin=/mnt/usr/sbin

[type=link] /lib=/mnt/lib

[type=link] /usr/lib=/mnt/usr/lib

[type=link] /etc=/mnt/etc

libc.so.2

libc.so

libm.so

###########################################################################

## uncomment for NETWORK driver

###########################################################################

devn-pcnet.so

libsocket.so

###########################################################################

## uncomment for USB driver

###########################################################################

# devu-uhci.so

# libusbdi.so

[data=c]

devc-ser8250

###########################################################################

## uncomment for REMOTE_DEBUG (gdb or Momentics)

###########################################################################

# devc-pty

# qconn

###########################################################################

## uncomment for PCI server

###########################################################################

pci-abc123

pci

###########################################################################

## uncomment for FLASH driver

###########################################################################

# devf-abc123

# flashctl

###########################################################################

## uncomment for NETWORK driver

###########################################################################

io-pkt-v6-hc

ifconfig

nicinfo

netstat

ping

###########################################################################

## uncomment for USB driver

###########################################################################

# io-usb

# usb

###########################################################################

## uncomment for NFS_REMOTE_FILESYSTEM

###########################################################################

fs-nfs3

###########################################################################

## general commands

###########################################################################

ls

ksh

pipe

pidin

uname

slogger

sloginfo

slay

###########################################################################

## END OF BUILD SCRIPT

###########################################################################



Файл qnxbasedma.build

Далее приводится исходный текст файла компоновки qnxbasedma.build, обеспечивающего начальную загрузку .boot на платформе x86.

Примечание. В реальном файле компоновки для разделения длинной строки на более короткие фрагменты нельзя использовать символ обратного слэша (\), но в данном примере мы все же использовали этот способ исключительно в целях лучшей читаемости файла.


     #

# Файл компоновки для загрузки ОСРВ QNX Neutrino на РС

#

[virtual=x86,bios +compress] boot = {

# Резервируется 64k видеопамяти для работы с несколькими видеокартами

startup-bios -s64k


# В переменной PATH задается *безопасный* путь для исполняемых файлов

# (confstr(_CS_PATH...))

# В переменной LD_LIBRARY_PATH задается *безопасный* путь для библиотек

# (confstr(_CS_LIBPATH)), т. е. на этом пути происходит поиск библиотек

# для исполняемых файлов в setuid/setgid.

LD_LIBRARY_PATH=/proc/boot:/lib:/usr/lib:/lib/dll:/opt/lib \

procnto-instr

}


[+script] startup-script = {

# Для экономии памяти в загрузочном образе необходимо использовать

# библиотеку libc! Для ускорения (меньшего просмотра символической

# информации) вместо указателя на libc.so

# используйте указатель на libc.so.3


procmgr symlink ../../proc/boot/libc.so.3 /usr/lib/ldqnx.so.2

# По умолчанию для пользовательских программ ставится приоритет 10,

# для остальных приоритет назначает планировщик (pri=10o)

# Для "diskboot" нужно указать, что это загрузочный жесткий диск (-b1)

# Для "diskboot" нужно задать использование DMA для IDE-дисков (-D1)

# Сделайте для текстовых консолей переправление "-n4" на

# "devc-con" (-o)

# Добавление "-e" приведет также к монтированию файловой системы

# Linux ext2.

[pri=10o] PATH=/proc/boot diskboot -b1 -D1 -odevc-con,-n4

}

# Включение текущей библиотеки "libc.so".

# Она будет создана как реальный файл с внутренним именем "SONAME",

# а "libc.so" будет иметь с ним символьную связь.

# Символьная связь будет указывать на последнюю версию

# "libc.so.*", поэтому если нужна более ранняя версия библиотеки libc

# (например, libc.so.2), то добавьте ее перед этой строкой

libc.so


libc.so.2

libc.so

libhiddi.so

libusbdi.so



# Включите все файлы связи файловых систем по умолчанию


libcam.so

io-blk.so

cam-disk.so

fs-qnx4.so

fs-dos.so

fs-ext2.so

cam-cdrom.so

fs-cd.so


# USB драйверы ввода-вывода для консольного режима

devu-ehci.so

devu-ohci.so

devu-uhci.so

devh-usb.so

devh-ps2ser.so


# Эти программы нужно запускать только один раз из образа загрузки.

# "data=uip" будет расходовать меньше памяти, т. к. ОЗУ из образа

# загрузки будет использоваться напрямую без копирования данных

# (что, например, делает по умолчанию "data=cpy"). Когда программы

# уже были один раз запущены, они разрывают связь с /proc/boot.

[data=uip]

seedres

pci-bios

devb-eide

devb-amd

devb-aha2

devb-aha4

devb-aha7

devb-aha8

devb-adpu320

devb-ncr8

devb-umass

devb-ahci

devb-mvSata

umass-enum

umass-enum.cfg

io-usb

io-hid

diskboot

slogger

fesh

devc-con

devc-con-hid



Более подробно о файлах компоновки (включая некоторые другие примеры) см. руководство "Building Embedded Systems".

Файл компоновки, в котором не используется diskboot

Данный файл компоновки предназначен для образа ОС, начальный запуск которой происходит без использования загрузчика diskboot.

Примечание. В реальном файле компоновки для разделения длинной строки на более короткие фрагменты нельзя использовать символ обратного слэша (\), но в данном примере мы все же использовали этот способ исключительно в целях лучшей читаемости файла.

#

# Файл компоновки для загрузки QNX Neutrino на ПК

#

[virtual=x86,bios +compress] boot = {

startup-bios -s64k

PATH=/proc/boot:/bin:/usr/bin LD_LIBRARY_PATH=/proc/boot:\

/lib:/usr/lib:/lib/dll procnto-smp

}


[+script] startup-script = {

display_msg " "

display_msg "Neutrino Inside! (QNX 6.3.0)"

display_msg " "

procmgr_symlink ../../proc/boot/libc.so.3 /usr/lib/ldqnx.so.2


display_msg "---> Starting PCI Services"

seedres

pci-bios

waitfor /dev/pci


display_msg "---> Starting Console Manager"

devc-con -n8

waitfor /dev/con1

reopen /dev/con1


display_msg "---> Starting EIDE Driver"

devb-eide blk cache=64M,auto=partition,vnode=2000,ncache=2000,\

noatime,commit=low dos exe=all

waitfor /dev/hd0

waitfor /dev/hd1

# Смонтируйте одну файловую систему QNX 4 как /, а другую как /home.

# Смонтируйте также раздел DOS и CD-дисковод.


mount /dev/hd0t79 /

mount /dev/hd1t78 /home

mount -tdos /dev/hd1t12 /fs/hd1-dos

mount -tcd /dev/cd0 /fs/cd0


display_msg "---> Starting /etc/system/sysinit"

ksh -c /etc/system/sysinit

}


libc.so

libcam.so

io-blk.so

cam-disk.so

fs-qnx4.so

fs-dos.so

fs-ext2.so

cam-cdrom.so

fs-cd.so


[data=c]

seedres

pci-bios

devb-eide

slogger

ksh

devc-con

mount


Файл профиля .profile

Когда создается учетная запись нового пользователя, то начальный профиль пользователя .profile копируется из файла /etc/skel/.profile (см. раздел 3). В этом файле содержится следующее:

# Содержимое файла .profile по умолчанию

if test "$(tty)" != "not a tty"; then

echo 'edit the file .profile if you want to change your environment.'

echo 'To start the Photon windowing environment, type "ph".'

fi


В профиле запускается утилита tty для получения имени терминала, который открыт для стандартного ввода. Если терминал обнаружен, то далее просто отображается пара полезных советов.

Возможно, вы захотите установить несколько переменных окружения:

Код для таких изменений может выглядеть следующим образом:

export EDITOR=/usr/local/bin/jed

export ENV=$HOME/.kshrc


Файл .kshrc

Далее приводится пример профиля, который запускается интерпретатором ksh, если переменная окружения ENV установлена, как указано выше для профиля .profile:

alias rm="rm -i"

alias ll="ls -l"

export PS1='$(pwd) $ '


В соответствии с этим профилем выполняются следующие действия:
Обратите внимание на то, что для выделения строки нужно использовать одинарные кавычки, а не двойные. Если указать двойные кавычки:

export PS1="$(pwd) $ "


то команда pwd будет оцениваться немедленно, потому что двойные кавычки разрешают подстановку команд. В этом случае, когда вы изменяете каталог, подсказка меняться не будет.

Конфигурационные файлы для утилиты spooler

В данном разделе приводятся конфигурационные файлы, которые используются для удаленной печати с помощью утилиты lpr и программного обеспечения SAMBA и NCFTP.

Примечание. Программное обеспечение SAMBA и NCFTP можно найти в архивных хранилищах сторонних разработчиков.

Использование утилиты lpr

PNPCMD=POSTSCRIPT

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

#

# Указанные далее макросы разворачиваются для строки команд фильтра:

# $d — устройство (Device);

# $m — id модели/производителя PnP;

# $n — имя принтера;

# $s — имя каталога спулера (Spooldir);

# $$ — реальный символ $.

#

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

FileVersion = 2

# имя_принтера — это имя, которое вы задали в файле /etc/printcap.

Filter = ps:$d:lpr -Pимя_принтера

Filter = phs:ps:phs-to-ps

Supported Resolution = 300 * 300,

600 * 600,

1200 * 1200

Supported PaperSize = 8500 * 11000 : Letter,

8500 * 14000 : Legal

Supported Orientation = 0 : Portrait,

1 : Landscape

Supported Intensity = 0 : Min,

100 : Max

Supported InkType = 1 : "B&W",

3 : "Color (CMY)",

4 : "Color (CMYK)"

Resolution = 600 * 600

PaperSize = 8500 * 11000 : Letter

Orientation = 0 : Portrait

Intensity = 50

InkType = 4 : "Color (CMYK)"

NonPrintable = 500:Left, 500:Top, 500:Right, 500:Bottom

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

if PNPID=HEWLETT-PACKARDHP_850DDE

PNPSTR=MFG:HEWLETT-PACKARD;MDL:HP 8500;CLS:PRINTER;CMD:POSTSCRIPT;



Supported PaperSize = 8500 * 11000 : Letter,

8500 * 14000 : Legal,

7250 * 10500 : Exec,

11000 * 17000 : B,

8262 * 11692 : A4,

5846 * 8262 : A5,

7000 * 9875 : B5,

11692 * 16524 : A3

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

if PNPID=HEWLETT-PACKARDHP_25A854

PNPSTR=MFG:HEWLETT-PACKARD;MDL:HP 2500C;CLS:PRINTER;CMD:PCL,MLC,PML,POSTSCRIPT;


Supported PaperSize = 8500 * 11000 : Letter,

8500 * 14000 : Legal,

7250 * 10500 : Exec,

11000 * 17000 : B,

8262 * 11692 : A4,

5846 * 8262 : A5,

7000 * 9875 : B5,

11692 * 16524 : A3

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


 Использование программного обеспечения NCFTP

PNPCMD=POSTSCRIPT

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

#

# Указанные далее макросы разворачиваются для строки команд фильтра:

# $d — устройство;

# $m — id модели/производителя PnP;

# $n — имя принтера;

# $s — имя каталога спулера (Spooldir);

# $$ — реальный символ $.

#

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

FileVersion = 2

# x.x.x.x is the IP address of the printer

# prt0 is the port used on the printer (in this case, port zero).

Filter = ps:$d:ncftpput -V -E x.x.x.x /prt0

Filter = phs:ps:phs-to-ps

Supported Resolution = 300 * 300,

600 * 600,

1200 * 1200

Supported PaperSize = 8500 * 11000 : Letter,

8500 * 14000 : Legal

Supported Orientation = 0 : Portrait,

1 : Landscape

Supported Intensity = 0 : Min,

100 : Max

Supported InkType = 1 : "B&W",

3 : "Color (CMY)",

4 : "Color (CMYK)"

Resolution = 600 * 600

PaperSize = 8500 * 11000 : Letter

Orientation = 0 : Portrait

Intensity = 50

InkType = 4 : "Color (CMYK)"

NonPrintable = 500:Left, 500:Top, 500:Right, 500:Bottom

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

if PNPID=HEWLETT-PACKARDHP_850DDE

PNPSTR=MFG:HEWLETT-PACKARD;MDL:HP 8500;CLS:PRINTER;CMD:POSTSCRIPT;


Supported PaperSize = 8500 * 11000 : Letter,

8500 * 14000 : Legal,

7250 * 10500 : Exec,

11000 * 17000 : B,

8262 * 11692 : A4,

5846 * 8262 : A5,

7000 * 9875 : B5,

11692 * 16524 : A3

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

if PNPID=HEWLETT-PACKARDHP_25A854

PNPSTR=MFG:HEWLETT-PACKARD;MDL:HP 2500C;CLS:PRINTER;CMD:PCL,MLC,PML,POSTSCRIPT;


Supported PaperSize = 8500 * 11000 : Letter,

8500 * 14000 : Legal,

7250 * 10500 : Exec,

11000 * 17000 : B,

8262 * 11692 : A4,

5846 * 8262 : A5,

7000 * 9875 : B5,

11692 * 16524 : A3

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


Использование программного обеспечения SAMBA

PNPCMD=POSTSCRIPT

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

#

# Указанные далее макросы разворачиваются для строки команд фильтра:

# $d — устройство (Device);

# $m — id модели/производителя PnP;

# $n — имя принтера;

# $s — имя каталога спулера (Spooldir);

# $$ — реальный символ $.

#

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

FileVersion = 2

# Для получения доступа к разделяемому принтеру SAMBA нужно, чтобы

# для smbspool была бы установлена переменная окружения DEVICE_URI.

#

# Формат для команды smb, используемый с smbspool,

# который определяется в DEVICE_URI

# Если не требуется имя пользователя и пароль:

#  — DEVICE_URI = "smb://сервер/принтер"

#  — DEVICE_URI = "smb://рабочая_группа/сервер/принтер"

# Если требуется имя пользователя и пароль:

#  — DEVICE_URI = "smb://имя_пользователя:пароль@сервер/принтер"

#  — DEVICE_URI =

# "smb://имя_пользователя:пароль@рабочая_группа/сервер/принтер"

#

# где имя_пользователя = имя пользователя в SAMBA

# пароль = пароль в SAMBA

# рабочая_группа = рабочая группа в SAMBA

# сервер = имя сервера в SAMBA

# принтер= имя разделяемого принтера в SAMBA

#

# Использование переменной окружения DEVICE_URI дает возможность

# сделать так, чтобы для smbspool происходил автоматический поиск

# значения, если оно не включено в командную строку.

#

Filter = ps:$d:smbspool 1 NULL none 1 1

Filter = phs:ps:phs-to-ps

Supported Resolution = 300 * 300,

600 * 600,

1200 * 1200

Supported PaperSize = 8500 * 11000 : Letter,

8500 * 14000 : Legal

Supported Orientation = 0 : Portrait,

1 : Landscape

Supported Intensity = 0 : Min,

100 : Max

Supported InkType = 1 : "B&W",

3 : "Color (CMY)",

4 : "Color (CMYK)"

Resolution = 600 * 600

PaperSize = 8500 * 11000 : Letter

Orientation = 0 : Portrait

Intensity = 50

InkType = 4 : "Color (CMYK)"

NonPrintable = 500:Left, 500:Top, 500:Right, 500:Bottom

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

if PNPID=HEWLETT-PACKARDHP_850DDE

PNPSTR=MFG:HEWLETT-PACKARD;MDL:HP 8500;CLS:PRINTER;CMD:POSTSCRIPT;



Supported PaperSize = 8500 * 11000 : Letter,

8500 * 14000 : Legal,

7250 * 10500 : Exec,

11000 * 17000 : B,

8262 * 11692 : A4,

5846 * 8262 : A5,

7000 * 9875 : B5,

11692 * 16524 : A3

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

if PNPID=HEWLETT-PACKARDHP_25A854

PNPSTR=MFG:HEWLETT-PACKARD;MDL:HP 2500C;CLS:PRINTER;CMD:PCL,MLC,PML,POSTSCRIPT;



Supported PaperSize = 8500 * 11000 : Letter,

8500 * 14000 : Legal,

7250 * 10500 : Exec,

11000 * 17000 : B,

8262 * 11692 : A4,

5846 * 8262 : A5,

7000 * 9875 : B5,

11692 * 16524 : A3

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


Аутентификация для протокола PPP с CHAP между двумя узлами с ОСРВ Neutrino

В приводимом далее сценарии происходит запуск сервиса pppd протокола для соединения типа "точка-точка" (point-to-point) со сценарием chat. Далее ожидается звонок со стороны модема, формируется ответ на него и запускается служба PPP с аутентификацией через CHAP (Challenge-Handshake Authentication Protocol, протокол аутентификации с предварительным согласованием вызова). После завершения работы служб PPP или при возникновении ошибки во время ответа модема происходит перезапуск, и далее ожидается поступление следующего вызова:

#!/bin/sh


SERIAL_PORT=$1

DEFAULT_SERIAL_PORT=/dev/ser1

PPPD="/usr/sbin/pppd"

DO_CHAT="chat -v ABORT BUSY ABORT CARRIER ABORT ERROR \

TIMEOUT 32000000 RING ATA TIMEOUT 60 CONNECT \d\d\d"

STTY="/bin/stty"

ECHO="/bin/echo"

LOCAL_IP=10.99.99.1

REMOTE_IP=10.99.99.2



if [ "$SERIAL_PORT" == "" ]; then

SERIAL PORT=$DEFAULT_SERIAL_PORT

fi



#кое-что нужно проинициализировать

$STTY +sane +raw < $SERIAL_PORT


while [ true ]; do

$ECHO "Waiting on modem $SERIAL_PORT..."

$ECHO "Starting PPP services..."

$PPPD connect "$DO_CHAT" debug nodetach auth +chap \

$LOCAL_IP:$REMOTE_IP $SERIAL_PORT

done;

Параметр TIMEOUT имеет значение 32000000, потому что до истечения времени ожидания приходится ждать достаточно долго, а для сценария chat нельзя устанавливать бесконечное время ожидания. Файл /etc/ppp/chap-secrets имеет такое содержимое:

# Разрешаются секретные адреса для клиент-серверной работы

##############################################################

* * "password" *


Можно расширить возможности сценария chat, сделав возможности ответа модема более устойчивыми (робастными) по отношению к конкретным событиям, при которых должны перезапускаться отвечающие службы, отличные от тех, что подразумеваются в событиях. Можно также добавить и другие функциональные возможности.

Вот пример файла компоновки, который используется для настройки машины на работу с соединениями telnet (для входа в удаленную систему с целью подключения к командной оболочке) и на доступ по протоколу tftp (передача файлов) поверх протокола PPP:

[virtual=x86,bios +compress] .bootstrap = {

startup-bios -K8250.2f8.0.57600.1843200.16 -v

PATH=/proc/boot procnto -vvv

}

[+script] startup-script = {

seedres

pci-bios &

waitfor /dev/pci

# Запуск клавиатурной консоли 1

devc-con -n8 &

# Запуск драйвера последовательного порта A

waitfor /dev/con1

reopen /dev/con1

devc-ser8250 -e -b38400

waitfor /dev/ser1

pipe

touch /tmp/syslog

syslogd

devc-pty

io-net -ppppmgr -pttcpip

waitfor /dev/io-net/ip ppp

inetd &


display_msg "[Shell]"

[+session] PATH=/bin:/proc/boot /bin/sh &

}

# Установить указатель для /tmp на область разделяемой памяти...

[type=link] /tmp=/dev/shmem

# Для программ нужно, чтобы компоновщик реального времени

# (ldqnx.so) находился в фиксированном месте

[type=link] /usr/lib/ldqnx.so.2=/proc/boot/libc.so

[type=link] /bin/sh=/bin/ksh


# Мы используем разделяемую C-библиотеку (которая содержит также

# компоновщик реального времени)

libc.so

libsocket.so


# Перечисленные выше файлы могут разделяться несколькими процессами

[data=c]

devc-con

devc-ser8250

devc-pty

pci-bios

seedres

pipe

io-pkt-v4

/bin/echo=echo

/bin/stty=stty

tail

pci

chat

ifconfig

ping

syslogd

touch

./modem ans ppp.sh


# Конфигурирование сервисов (telnetd и т. д.)

inetd

/usr/sbin/telnetd=telnetd

/usr/sbin/tftpd=tftpd

/usr/sbin/pppd=pppd

/bin/login=login

/bin/ksh=ksh


/etc/ppp/chap-secrets = {

# Секретные адреса клиент-серверной конфигурации

#########################################

* * "password" *

}

/etc/syslog.conf = {

*.* /tmp/syslog

}



# Файлы конфигурирования Inetd

/etc/services= /etc/services

/etc/protocols= /etc/protocols

/etc/termcap= /etc/termcap

/etc/passwd= /etc/passwd

/etc/default/login= /etc/default/login

/etc/resolv.conf= /etc/resolv.conf

/etc/shadow = /etc/shadow

/etc/inetd.conf = {

telnet stream tcp nowait root /usr/sbin/telnetd in.telnetd

tftp dgram udp wait root /usr/sbin/tftpd in.tftpd

}


/etc/hosts = {

127.1 localhost.localdomain localhost

10.99.99.1 server server

10.99.99.2 client client

}



Примечание. Для формирования образа с помощью данного файла компоновки необходимо подключение к системе с учетной записью root. Это связано с тем, что используются копии файлов /etc/passwd и /etc/shadow (что позволяет легче запоминать пароли), но вы можете также использовать собственные версии файлов внутри файла компоновки в качестве включаемых (inline).

Используя два компьютера с модемами, можно один из них настроить на автоматический ответ, запуск служб протокола PPP и выполнение аутентификации. Затем можно воспользоваться службами telnet и tftp для доступа с клиента на сервер. Используйте такие параметры сервиса pppd для клиента (в дополнение к тем же параметрам в файле chap-secrets):

pppd connect "chat -v -f/tmp/dial_modem" auth +chap /dev/ser3


но вместо /dev/ser3 впишите соответствующий последовательный порт для модема на стороне клиента. Проверьте, чтобы использовался полный путь к сценарию вашего модема. Сценарий chat, или dial-modem, достаточно прост:

ABORT 'NO CARRIER'

ABORT 'ERROR'

ABORT 'BUSY'

'' ATDTxxxxxxx

CONNECT ''