Выполнение:
1. Скачиваем Turbo Pascal 7.1 здесь
2. Распаковываем скачанный архив.
3. Нам понадобится DosBox. В ALT Linux школьный 5 DosBox уже установлен. Если не установлен, то через Synaptic ставим его. На день написания настоящей инструкции в репозитории была доступна версия 0.72
4. Предположим, школьники входят в ALT Linux под логином user. Входим под ним и создаем каталоги для dosbox:
mkdir /home/user/dosbox
mkdir /home/user/dosbox/drive_c
каталог drive_c будет для turbo pascal диском C:\
Далее нужно переместить каталог tp7_1 из распакованного ранее архива в каталог
/home/user/dosbox/drive_c так, чтобы путь до turbo.exe был:
/home/user/dosbox/drive_c/tp7_1/BIN/turbo.exe
5. Теперь сделаем файл конфигурации для DosBox. Он будет стандартный, но с небольшими изменениями. Во-первых, в нем параметру autolock будет присвоено значение false, чтобы курсор автоматически освобождался, когда он выходит за границы окна DosBox. В противном случае придется нажимать CTRL+F10, что, конечно, неудобно. Во-вторых, в конец файла добавим несколько строк для того, чтобы при запуске DosBox автоматически запускался Turbo Pascal.
Итак:
mkdir /home/user/.dosbox
gedit /home/user/.dosbox/dosbox-0.74.conf
Содержимое dosbox-0.74.conf:
# Это конфигурационный файл DOSBox 0.74. (Пожалуйста, используйте самую свежую версию DOSBox.)
# Строки, начинающиеся с # являются комментариями и игнорируются DOSBox.
# Они используются, чтобы кратко описать каждую опцию.
#
# #24306 - Включена поддержка русского языка. Для ее работы нужно скопировать данный файл в
# домашнюю директорию: ~/.dosbox/dosbox-0.74.conf или ~/.dosbox/dosbox.conf
#
[sdl]
# fullscreen: Запускает DOSBox сразу в полноэкранном режиме. (Для отключения нажмите ALT_ENTER)
# fulldouble: Использовать двойную буферизацию при полноэкранном режиме. Может уменьшить мерцание экрана, но возможно приведёт к замедлению DOSBox.
# fullresolution: Какое разрешение использовать для полного экрана: оригинальное или фиксированное значение (например, 1024x768).
# Использование "родного" разрешения монитора с параметром aspect=true может дать наилучшие результаты.
# Если вы получаете маленькое окошко на большом экране, попробуйте метод вывода отличный от surface.
# windowresolution: Масштабировать окно к этому размеру, ECЛИ устройство
# вывода поддерживает аппаратное масштабирование.
# (Режим вывода output=surface не поддерживает!)
# output: Какую видеосистему использовать для вывода.
# Возможные значения: surface, overlay, opengl, openglnb, ddraw.
# autolock: Мышь будет автоматически закреплена при щелчке по экрану. (Чтобы освободиь мышь нажмитеCTRL-F10.)
# sensitivity: Чувствительность мыши.
# waitonerror: Ждать перед закрытием консоли, если в DOSBox происходит ошибка.
# priority: Уровни приоритета процесса DOSBox. Второй параметр (после запятой) используется,
# когда DOSBox не активен или свернут.
# Значение 'pause' поддерживается только для второго параметра.
# Возможные значения: lowest, lower, normal, higher, highest, pause.
# mapperfile: Файл, используемый для загрузки/сохранения раскладки клавиш. Параметр resetmapper работает только со значением по умолчанию.
# usescancodes: Обойти использование symkeys, может не работать на всех ОС.
[dosbox]
# language: Выбирает другой языковой файл.
# machine: Тип машины, который будет эмулироваться.
# Возможные значения: hercules, cga, tandy, pcjr, ega, vgaonly, svga_s3, svga_et3000, svga_et4000, svga_paradise, vesa_nolfb, vesa_oldvbe.
# captures: Директория, куда будут сохраняться такие вещи, как wave, midi, скриншоты.
# memsize: Величина памяти для DOSBox в мегабайтах.
# Это значение лучше оставить по умолчанию, чтобы избежать проблем с некоторыми играми,
# хотя некоторые другие могут потребовать больших значений.
# Увеличение этого значения в общем случае не повышает быстродействие.
[render]
# frameskip: Сколько кадров DOSBox пропускает перед тем, как отрисовать один.
# aspect: Выполнять коррекцию соотношения сторон. Если ваш метод вывода не поддерживает
# масштабирование, это может замедлить работу!
# scaler: Используется для увеличения/улучшения режимов с низким разрешением.
# Если после основного значения указано включено 'forced', масштабирование
# будет использовано, даже если результат может быть нежелательным.
# Возможные значения: none, normal2x, normal3x, advmame2x, advmame3x, advinterp2x, advinterp3x, hq2x, hq3x, 2xsai, super2xsai, supereagle, tv2x, tv3x, rgb2x, rgb3x, scan2x, scan3x.
frameskip=0
aspect=false
scaler=normal2x
[cpu]
# core: Ядро ЦПУ используемое в эмуляции. 'auto' переключает 'normal' на 'dynamic', если возможно.
# Возможные значения: auto, dynamic, normal, simple.
# cputype: Тип ЦПУ используемый в эмуляции. 'auto' выбирает самый быстрый вариант.
# Возможные значения: auto, 386, 386_slow, 486_slow, pentium_slow, 386_prefetch.
# cycles: Число инструкций, которое DOSBox пытается эмулировать каждую миллисекунду.
# Установка выше возможностей вашей машины может привести к прерываниям звука и лагам.
# Может быть установлено тремя способами:
# 'auto' пытается подобрать нужное игре значение.
# Это обычно работает, но для некоторых игр создает проблемы.
# 'fixed #число' устанавливает фиксированное число циклов. Это то, что обычно нужно, если не сработало 'auto'.
# (Например: fixed 4000)
# 'max' выставит максимальное число циклов, на которое способен ваш компьютер
#
# Возможные значения: auto, fixed, max.
# cycleup: Число циклов для увеличения/уменьшения основного значения по нажатии комбинации клавиш (CTRL-F11/CTRL-F12).
# cycledown: Установка значения менее 100 задаёт изменение основного значения в процентах.
[mixer]
# nosound: Включает тихий режим, хотя звук все равно эмулируется.
# rate: Темп микшера. Настройка значения темпа любого другого устройства выше,
# чем этот возможно ухудшит их качество звука.
# Возможные значения: 44100, 48000, 32000, 22050, 16000, 11025, 8000, 49716.
# blocksize: Размер блоков микшера, увеличение блоков может помочь с заиканием
# звука, но звук будет больше отставать.
# Возможные значения: 1024, 2048, 4096, 8192, 512, 256.
# prebuffer: Сколько миллисекунд данных держать перед размером блока микшера.
[midi]
# mpu401: Тип MPU-401 для эмуляции.
# Возможные значения: intelligent, uart, none.
# mididevice: Устройство, которое будет получать данные MIDI от MPU-401.
# Возможные значения: default, win32, alsa, oss, coreaudio, coremidi, none.
# midiconfig: Специальные конфигурационные опции для устройства. Обычно это id
# устройства, которое хотите использовать. Обратитесь к README/Руководству за подробностями.
mpu401=intelligent
mididevice=default
midiconfig=
[sblaster]
# sbtype: Тип эмулируемого SoundBlaster. Значение gb означает Gameblaster.
# Возможные значения: sb1, sb2, sbpro1, sbpro2, sb16, gb, none.
# sbbase: Адрес порта ввода/вывода (IO) SoundBlaster.
# Возможные значения: 220, 240, 260, 280, 2a0, 2c0, 2e0, 300.
# irq: Номер прерывания (IRQ) SoundBlaster.
# Возможные значения: 7, 5, 3, 9, 10, 11, 12.
# dma: Номер ПДП (DMA) SoundBlaster.
# Возможные значения: 1, 5, 0, 3, 6, 7.
# hdma: Номер верхнего ПДП (High DMA) SoundBlaster.
# Возможные значения: 1, 5, 0, 3, 6, 7.
# sbmixer: Позволить микшеру SoundBlaster модифицировать микшер DOSBox.
# oplmode: Тип эмуляции OPL. При 'auto' режим определяется типом SoundBlaster.
# Все режимы OPL совместимы с Adlib, кроме 'cms'.
# Возможные значения: auto, cms, opl2, dualopl2, opl3, none.
# oplemu: Реализация эмуляции OPL. Возможно 'compat' сможет обеспечить лучшее качество (см. также 'oplrate').
# Возможные значения: default, compat, fast.
# oplrate: Темп эмуляции OPL музыки. Укажите 49716 для наилучшего качества (установите соответствующий темп микшера).
# Возможные значения: 44100, 49716, 48000, 32000, 22050, 16000, 11025, 8000.
[joystick]
# joysticktype: Типы джойстиков для эмуляции: auto (установлено по умолчанию), none,
# 2axis (поддерживается два джойстика),
# 4axis (поддерживается один джойстик, используется первый),
# 4axis_2 (поддерживается один джойстик, используется второй),
# fcs (Thrustmaster), ch (CH Flightstick).
# none отключает эмуляцию джойстика.
# auto выбирает значение в зависимости от реально подключенного джойстика(ов).
# (Не забудьте сбросить настройку раскладки клавиш DOSBox, если вы её сохраняли.)
# Возможные значения: auto, 2axis, 4axis, 4axis_2, fcs, ch, none.
# timed: Включить временные интервалы для осей. Поэкспериментируйте с этим параметром, если джойстик "уплывает".
# autofire: Кнопки продолжают нажиматься постоянно, пока вы их держите нажатыми.
# swap34: Меняет местами 3ю и 4ю оси джойстика (может быть полезно для некоторых
# моделей джойстиков).
# buttonwrap: Осуществляет подмену количества реальных кнопок на количество эмулируемых.
[dos]
# xms: Включить поддержку XMS.
# ems: Включить поддержку EMS.
# umb: Включает поддержку UMB.
# keyboardlayout: Код языка для клавиатурной раскладки (или 'none').
xms=true
ems=true
umb=true
keyboardlayout=RU
[ipx]
# ipx: Включает эмуляцию ipx над UDP/IP.
ipx=false
[autoexec]
# Команды в этой секции будут выполнены при запуске.
# Вы можете указать здесь ваши команды монтирования устройств (MOUNT).
# Каталог /home/user/dosbox/drive_c будет диском C:\
mount c: /home/user/dosbox/drive_c
# Каталог /home/user/Desktop, т.е. рабочий стол будет диском D:\
mount d: /home/user/Desktop
# Переход на диск D:\, чтобы задать его текущим каталогом для Turbo Pascal
d:
# Запуск Turbo Pascal с автоматическим созданием файла unnamed.pas
c:\tp7_1\BIN\turbo.exe d:\unnamed.pas
6. Далее нужно сказать DosBox, что комбинация клавиш CTRL+F9 не должна закрывать его. Вообще можно запустить DosBox и нажать CTRL+F1 для переназначения клавиш, и там щелкнуть по Shutdown, затем слева щелкнуть по mod1 и mod2. mod1 - это CTRL, mod2 - ALT. Таким образом, DosBox будет закрываться нажатием CTRL+ALT+F9.
Это было отступление. Так как далее будем писать скрипт для автоматизации всего этого дела, то я предлагаю создать файл назначения клавиш для DosBox.
gedit /home/user/.dosbox/mapper-0.74.map
7. Готово. Можно запустить DosBox и проверить, что Turbo Pascal запускается.
8. Сейчас напишем скрипт, чтобы автоматизировать процесс. Создадим отдельную папку:
mkdir /home/user/turbo
mkdir /home/user/turbo/dosbox
в каталог dosbox скопируем файлы настроек DosBox:
cp /home/user/.dosbox/* /home/user/turbo/dosbox/
в каталог сам Turbo Pascal:
cp /home/user/dosbox/drive_c/tp7_1 /home/user/turbo/
и, собственно, скрипт:
gedit /home/user/turbo/instp
Пишем ($PWD - текущая директория):
#!/bin/sh
mkdir /home/user/dosbox
mkdir /home/user/dosbox/drive_c
cp -r $PWD/tp7_1 /home/user/dosbox/drive_c/
mkdir /home/user/.dosbox
cp $PWD/dosbox/* /home/user/.dosbox/
# Если скрипт будете выполнять из под root, то нужны еще два строки
chown -R user:user /home/user/dosbox
chown -R user:user /home/user/.dosbox
9. Еще можно было бы ярлык на рабочий стол поставить, но это сами распишите в скрипте.
Вот и все. Папку turbo можно закинуть на флешку или в сетевую папку, а потом с каждого компа заходить в нее и выполнять команду
sh instp
На ALT Linux 6 Centaurus все это дело ставиться также, как на ALT Linux школьный 5.
Если данная инструкция оказалась полезной для вас, напишите, пожалуйста, об этом в комментарии.
# Secrets for authentication using CHAP
# clientserversecretIP addresses
#Параметры в строке отделяются друг от друга пробелами или табуляцией
"testlogin"*"testpass"192.168.5.10
, где
eth1 - сетевой интерфейс, на котором будет запускаться pppoe-сервер. У меня eth1 смотрит в локальную сеть;
192.168.5.1 - ip-адрес pppoe-сервера;
192.168.5.10 - ip-адрес, начиная с которого pppoe-сервер будет выдавать ip-адреса клиентам;
5. Готово. Теперь на каком-нибудь компьютере локальной сети можете создать pppoe-соединение (В Windows это "Высокоскоростное подключение, запрашивающее имя и пароль") и попробовать подключиться к нашему PPPoE-серверу.
6. Теперь предположим, что pppoe-сервер предназначен для предоставления доступа к сети Интернет. То есть клиенты должны получать доступ к Интернету.
sudo gedit /etc/rc.local
добавим
#Разрешаем форвардинг
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
#Выполняем скрипт настройки iptables
sudo sh /home/jc/inet
7. Создадим небольшой скрипт для настройки iptables:
sudo gedit /home/jc/inet
Пишем:
#!/bin/sh
#Переменные
iptables_dir='/sbin/iptables'
inet_iface=eth0
#Собственно настройка iptables
#В
POSTROUTING таблицы NAT разрешить маскарадинг на тот сетевой интерфейс,
который смотрит в сеть провайдера (Интернет) (inet_iface)
$iptables_dir -t nat -A POSTROUTING -o $inet_iface -j MASQUERADE
# Политика по умолчанию - все разрешено (ACCEPT)
$iptables_dir -P INPUT ACCEPT
$iptables_dir -P FORWARD ACCEPT
$iptables_dir -P OUTPUT ACCEPT
Главное - это разрешить маскарадинг и форвардинг. Текущие настройки iptables можно посмотреть командой
sudo iptables-save
8. Готово. Теперь у клиентов PPPoE-сервера есть доступ к Интернет. Сейчас перепишем скрипт настройки iptables для того, чтобы обеспечить безопасность соединения с Интернетом.
sudo gedit /home/jc/inet
#!/bin/sh
# Переменные:
# Сетевой интерфейс, смотрящий с сеть провайдера (Интернет)
inet_iface=eth0
# Сетевые интерфейсы, смотрящиие в локальную сеть
local_iface=ppp+
# Локальная сеть (подсеть PPPoE-сервера)
local_network=192.168.5.0/24
# Предпочитаемый DNS сервер
dns_main=8.8.8.8
# Альтернативный DNS сервер
dns_alt=8.8.4.4
# Шлюз по умолчанию
gateip=10.0.1.1
iptables_dir='/sbin/iptables'
# ----------Установка политик по умолчанию-------------
# 1. Очищаем все цепочки и устанавливаем политику по умолчанию в соответствии с принципом "Все, что не разрешено - запрещено"
$iptables_dir -F INPUT
$iptables_dir -F FORWARD
$iptables_dir -F OUTPUT
$iptables_dir -t mangle -F
$iptables_dir -t nat -F
$iptables_dir -t filter -F
$iptables_dir -P INPUT DROP
$iptables_dir -P FORWARD DROP
$iptables_dir -P OUTPUT DROP
# 2. В POSTROUTING таблицы NAT разрешить маскарадинг на тот сетевой интерфейс, который смотрит в сеть провайдера (Интернет) (inet_iface)
$iptables_dir -t nat -A POSTROUTING -o $inet_iface -j MASQUERADE
# --------------Настройки безопасности-------------------------------
# 4. (проверено) Скидываем все пакеты, пришедшие с интерфейса, смотрящего в сеть провайдера (Интернет) со статусом NEW
$iptables_dir -A FORWARD -i $inet_iface -m state --state NEW -j DROP
# 4.1 Скидываем все пакеты, пришедшие с интерфейса, смотрящего в сеть провайдера (Интернет), и уходящие туда же
$iptables_dir -A FORWARD -i $inet_iface -o $inet_iface -j DROP
# 4.2 Скидываем все пакеты, пришедшие с интерфейса, смотрящего в сеть провайдера (Интернет) с адресов локальных сетей классов A,B,C,D,E и адресов, не использующихся в Интернете
$iptables_dir -A FORWARD -i $inet_iface -s 172.16.0.0/12 -j DROP
$iptables_dir -A FORWARD -i $inet_iface -s 192.168.0.0/16 -j DROP
$iptables_dir -A FORWARD -i $inet_iface -s 10.0.0.0/8 -j DROP
$iptables_dir -A FORWARD -i $inet_iface -s 224.0.0.0/3 -j DROP
$iptables_dir -A FORWARD -i $inet_iface -s 127.0.0.0/8 -j DROP
$iptables_dir -A FORWARD -i $inet_iface -s 0.0.0.0/8 -j DROP
# Активация TCP SYN Cookie Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Отключение IP Source Routing
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса.
$iptables_dir -A FORWARD -m state --state INVALID -j DROP
# ------------Безопасное взаимодействие с DNS серверами-----------------------
# Запрещаем клиентам обмен данными с основным DNS сервером не по порту 53
$iptables_dir -A FORWARD -i $local_iface -p UDP -s $local_network --dport 53 -d $dns_main -o $inet_iface -j ACCEPT
$iptables_dir -A FORWARD -i $local_iface -s $local_network -d $dns_main -o $inet_iface -j DROP
# Запрещаем клиентам обмен данными с альтернативным DNS сервером не по порту 53
$iptables_dir -A FORWARD -i $local_iface -p UDP -s $local_network --dport 53 -d $dns_alt -o $inet_iface -j ACCEPT
$iptables_dir -A FORWARD -i $local_iface -s $local_network -d $dns_alt -o $inet_iface -j DROP
# Запрещаем основному DNS серверу обмен данными с клиентами не по порту 53
$iptables_dir -A FORWARD -i $inet_iface -p UDP -s $dns_main --sport 53 -d $local_network -o $local_iface -j ACCEPT
$iptables_dir -A FORWARD -i $inet_iface -s $dns_main -d $local_network -o $local_iface -j DROP
# Запрещаем альтернативному DNS серверу обмен данными с клиентами не по порту 53
$iptables_dir -A FORWARD -i $inet_iface -p UDP -s $dns_alt --sport 53 -d $local_network -o $local_iface -j ACCEPT
$iptables_dir -A FORWARD -i $inet_iface -s $dns_alt -d $local_network -o $local_iface -j DROP
# 5. Разрешаем транзитные пакеты с адресов локальной сети, пришедшие с локального сетевого интерфейса local_iface, которые идут в сеть провайдера (Интернет) (inet_iface), со статусами NEW, ESTABLISHED и RELATED
$iptables_dir -A FORWARD -i $local_iface -s $local_network -o $inet_iface -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# 6. Разрешаем прохождение пакетов с сетевого интерфейса, смотрящего в сеть провайдера (Интернет) на сетевой(ые) интерфейс(ы) ($inet_iface) локальной сети со статусом ESTABLISHED
$iptables_dir -A FORWARD -i $inet_iface -d $local_network -o $local_iface -m state --state ESTABLISHED -j ACCEPT
9. Теперь предположим, что на одном из клиентов PPPoE-сервера работает Web-сервер и, соответственно, он должен быть доступен из Интернета. Внесем в скрипт соответствующие изменения:
sudo gedit /home/jc/inet
В начале, где объявляются переменные, добавим:
# Адрес Web-сервера в локальной сети
web_ip=192.168.5.10
# Порт Web-сервера в локальной сети
web_port=80
Далее после установки политик по умолчанию
# ----------Настройки для работоспособности Web-сервера-------------
# 1.1 Разрешаем проходящие входящие пакеты на адрес Web-cервера и его порт
$iptables_dir -I FORWARD -i $inet_iface -d $web_ip -p tcp --dport $web_port -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# 1.2. Перед началом маршрутизации пакетов, идущих к нам на порт Web-сервера меняем адрес получателя на адрес Web-сервера в локальной сети
$iptables_dir -t nat -I PREROUTING -d $inet_ip -p tcp --dport $inet_port -j DNAT --to-destination $web_ip:$web_port
# 1.3. Делаем маскарадинг для пакетов, уходящих на Web-сервер в локальную сеть
$iptables_dir -t nat -I POSTROUTING -d $web_ip -p tcp --dport $web_port -j MASQUERADE
10. Итак, Web-сервер доступен из Интернет. Допустим, встала следующая задача: ограничить скорость для некоторых (или каждого) клиентов. Приведенное ниже решение может быть корявым, но оно работает и вполне применимо в том случае, если клиентов не очень много. Ограничение скорости будем делать с помощью tc.
sudo gedit /etc/ppp/ip-up
В конец добавим:
# Указываем, где находится tc
traf_control=/sbin/tc
# Поднимаемый сетевой интерфейс
INET_DEV=$1
# Ограничение скорости для Web-сервера. К примеру, имеем канал подключения к Интернету со скоростью 1Мбит/с. Ограничим скорость для Web-сервера до 80Кбайт/c. $5 - ip-адрес поднимаемого сетевого интерфейса.
if [ "$5" = "192.168.5.10" ]; then
# 1. Очищаем все правила tc
$traf_control qdisc del dev $INET_DEV root
# 2. Объявляем главную дисциплину обработки исходяшей очереди для устройства $INET_DEV
$traf_control qdisc add dev $INET_DEV root handle 1: htb default 12
# 3. Объявляем корневой класс главной дисциплины обработки исходящей очереди $INET_DEV
$traf_control class add dev $INET_DEV parent 1: classid 1:1 htb rate 1024kbit ceil 1024kbit
# 4. Объявляем подкласс корневого класса для ограничения скорости
$traf_control class add dev $INET_DEV parent 1:1 classid 1:10 htb rate 80kBps ceil 80kBps
# 5. Объявляем подкласс корневого класса для ограничения скорости пакетов,не попавших под правила
#$traf_control class add dev $INET_DEV parent 1:1 classid 1:12 htb rate 60kBps ceil 60kBps
# Объявляем фильтр для созданного подкласса 1:10
$traf_control filter add dev $INET_DEV protocol ip parent 1: prio 1 u32 match ip dst 192.168.5.10 flowid 1:10
fi
Для того, чтобы ограничить скорость для другого клиента, необходимо добавить приведенный выше блок if ...fi , изменив ip-адрес и, если нужно, скорость. Клиенты, для которых не введены ограничения, могут занимать Интернет-канал полностью.
Если данная инструкция оказалась полезной для вас, напишите, пожалуйста, об этом в комментарии.