Кривой стартер. Начало.

This entry is part [part not set] of 5 in the series kickstart

В связи с новой работой возникла необходимость автоматизировать установку Linux на x86 железо. Из всего зоопарка пингвинов выбрал Scientific Linux, как наиболее мне привычный (уже имел с ним дело). Плюс SL является основным инструментом моего друга при решении большинства задач, так что будет к кому обратиться с вопросом, если что.
Плюсы, они же и минусы SL да и вообще всех RHEL – их стабильнось. Они не прикручивают всякие новомодные финтифлюшки тоннами и развиваются довольно планомерно, так что SL не сильно отличается от ASP Linux десятилетней давности :). Хотя эта стабильность оборачивается, как я написал, и минусами – в RHEL-based дистрибутивах большинство софта настолько протухшее… Сразу оговорюсь, что я не гонюсь слепо за версией программ. Но в ходе создания установочной флешки выяснил, что в SL (и RHEL) сидит довольно древняя версия gstreamer, у которой серьёзные проблемы с утечками памяти. Убил кучу времени на “отлов” причины. В итоге решил эту проблему сборкой собственных пакетов с более свежей версией gstreamer’a.
Ладно, буду последователен.
В красношапочных дистрибутивах есть такая вещь как kickstart, которая позволяет подготовить файл с ответами на вопросы инсталлятора и автоматизировать установку частично или полностью.
Моей задачей было сделать автономную и максимально автоматизированную установку. Под автономностью я подразумеваю отсутствие доступа к сети, только установочная флешка и минимальное количество вопросов, задаваемое установщиком.
Для моих задач хватает флешки на 8GiB. Чтобы её создать не заморачиваясь с dd и прочими юниксовыми утилитами, я, по совету друга, возпользовался UltraISO и её возможностью писать ISO образы на флешки. Причём она не просто пишет, но ещё и подсовывает корректный вайл syslinux.cfg Для этого надо в UltraISO открыть образ SL-64-i386-2013-03-18-boot.iso (т.е. минимальный загрузочный образ) и через меню выбрать запись образа диска. В роли destination выбираем флешку. Через энсколько минут получается флешка, с которой уже можно загрузиться и попасть в инсталлятор anaconda.
Теперь можно переходить к самому кикстарту. Шаблон этого файла можно получить сделав пробную установку. По окончании установки в домашней директории пользователя root появится файл anaconda-ks.cfg, который можно будет дорабатывать напильником. Я приведу выдержки из уже готового файла. Краткие комментарии мною уже сделаны в самом файле, так что более подробно буду комментировать только отдельные моменты.

install

# Force using textmode install. Why anyone will need GUI when smoking?
# But even in this case one may need more than 384M of RAM to run install.
text

# Tell installer where ISO image is.
harddrive --partition=sda4 --dir=/

Последней строчкой я указываю инсталлятору место нахождения DVD образа SL-64-i386-2013-03-18-Install-DVD.iso. Этот образ отличается от boot.iso тем, что содержит репозитории с пакетами. В моём случае этот путь указывает инсталлатору на то, что установочный образ находится в корне раздела sda4. sda4 – это сама флешка. Т.е. установочный образ надо скопировать в корень флешки.


# No russian in console!!! Learn to read, write and understand documentation in English.
lang en_US.UTF-8
keyboard us

# Configure interface to use DHCP by default.
network --onboot=yes --bootproto=dhcp --noipv6

# Do you want to know how it looks like in palintext? ;)
rootpw --iscrypted BLAH_BLAH_BLAH

В шифрованном виде пароль, естественно, выглядит иначе ;)

# Open SSH and munin-node by default.
firewall --service=ssh --port=4949

Перечисляю порты, которые по умолчанию будут открыты в iptables. Можно указывать именами сервисов или номером порта.

# Disable SElinux. It's evil in most cases.
selinux --disabled

SELinux я готовить не умею и воевать с ним не хочу, отключаю.

# Add reboot=bios fix for Acer netbooks.
bootloader --location=mbr --driveorder=sdb,sda --append="crashkernel=auto rhgb quiet reboot=bios"

На Acer Apire One вылезла проблема – при перезагрузке они висли. Помогало только нажатие на кнопку питания. Т.к. наше оборудование должно быть максимально автономным, то эту проблему надо было решить. Покопавшись на форумах узнал, что для решения проблемы надо указать загрузчику дополнительный параметр reboot=bios.

# Clear all existing partitions on destiation disk.
clearpart --all --drives=sdb

При загрузке с флешки ядро определяет флешку как диск sda, а жёсткий диск – как sdb. Соответственно жёсткий диск я предварительно очищаю от существующих разделов.

# Don't touch our installation usb stick.
part None --fstype=efi --label="Scientific" --onpart=sda4 --noformat

Anaconda автоматом создала строчку, предотвращающую изменеия на флешке при установке. Я, естественно, решил её оставить.

# Create partitions. Set --asprimary to prevent creating extended partition.
part /boot --asprimary --fstype=ext4 --size=100
part swap --asprimary --size=256
part / --asprimary --fstype=ext4 --size=2000
# We should create this partition for further use as crypto partition.
# I can't find a way to create it without formatting.
part /var/lib/mss --asprimary --fstype=ext4 --grow --size=1024

В моём случае нужны четыре раздела – /boot, swap, / и раздел с данными /var/lib/mss. Чтобы при установке не плодились ненужные мне extended разделы, я для каждого раздела указал параметр --asprimary. Раздел /var/lib/mss в пост-инсталляционном скрипте будет сделан шифрованым. Создаю я его штаными средствами чтобы потом не развлекаться со скриптованием для fdisk. Не делаю его шифрованым штаными средствами, т.к. ключом шифрования будет являться файл с MAC-адресом и автоматизацию этого процесса так же удобнее делать в %post секции.

# Configure list of services.
services --disabled pppoe-server,mdmonitor,ip6tables,kdump
# Enable autofs for automounting flash drives with updates.
# Enable ntpd so machine can obtain correct time from NTP server if Internet connection is available.
# Enable munin-node for monitoring machines with Internet access.
services --enabled autofs,ntpd,munin-node

Тут всё понятно. Отключаю лишнее, добавляю нужное. Через services --enabled добавить можно только сервисы из базового дистрибутива или из дополнительных репозиториев. Я писал init.d скрипт для собственной программы и его добавлял уже в %post скрипте.

# Add local repos for extra packages (i.e. munin-node and gstreamer-plugins-ugly).
repo --name=SSextras --baseurl=file:///mnt/isodir/extras
repo --name=SSgst --baseurl=file:///mnt/isodir/gst

Методом тыка выяснил, как же нативно добраться до флешки во время установки. Оказалось, что инсталлятор её монтирует в /mnt/isodir. Тут я добавил два репозитория с дополнительными пакетами, которых нет в базовом дистрибутиве.
Чтобы директорию с пакетами сделать репозиторием, надо натравить на неё программу createrepo – она создаст всю необходимую структуру, понятную пакетному менеджеру. Прога есть в родном репозитории SL.

Дальше начинается более интересная часть, на которую я потратил существенное количество сил и времени. Данная информация, по большей части, была почерпнута из форумов. В официальном руководстве по kickstart’у ничего полезного про предустановочные скрипты не пишут. Результаты изысканий в следующей части.

Share

Do or don’t do

You are wasting your time “thinking about” things. As Yoda would say,
do or don’t do. If your reaction is, “well, I can’t do”, then please be
assured, OpenBSD is not the corporate world, we don’t need “managers”
who claim to think, but can’t do.
(c) Nick Holland 25.03.2013

Share

Linux во всей красе

Как же меня всё-таки умиляют подобные развлечения в линуксе :) При перезагрузке сетёвки меняются местами, гыгы. Я ещё могу понять, когда при обновлении RHEL с 5 на 6 он в обратном порядке просканировал шину PCI и, следовательно, в обратном порядке пронумеровал интерфейсы… Но при перезагрузке :)))

Share

apcupsd и несколько UPS

Иногда возникает необходимость управлять несколькими UPS на одном сервере даже когда есть несколько серверов и все они запитаны от тех же бесперебойников. Когда-то давно на сервере под RHEL5 я уже настраивал мониторнг нескольких UPS через apcupsd. Так как времена RHEL5 давно минули, то аналогичную конфигурацию я настроил на более современном RHEL6 в виде Scientific Linux 6.4 и apcupsd-3.14.10, последней достуной версии из сторонних пакетов на текущий момент.
Имеем три бесперебойника: Smart-UPS 3000 RM XL, Smart-UPS SC1500 и Smart-UPS SMC1500I-2U.
3000 и SMC подключены через “стандартный” USB кабель, а к SC1500 в комплекте шли кабели RS232-RS232 и RS232-USB, который при проверке оказался обычным Prolific 2303 usb2serial. SC1500 была подключена через usb2serial кабель.
Основной фокус при использовании нескольких бесперебойников заключается в указании apcupsd конфига под конкретную железку. Чтобы было нагляднее, я стандартный apcupsd.conf скопировал в три конфига соответственно: apcupsd-rm3000.conf, apcupsd-cs1500.conf и apcupsd-smc1500.conf.
Из очевидных вещей в каждом каждом конфиге указываем соответствующие UPSNAME исходя из имени бесперебойника. А вот с UPSCABLE, UPSTYPE и DEVICE предстоит заняться более внимательно. С SC1500 всё просто – надо прописать обычные для подключения по последовательному порту параметры UPSCABLE smart и UPSTYPE apcsmart и DEVICE /dev/ttyUSB0. С USB подключением одного ИБП тоже всё просто – параметр DEVICE нужно закоментировать или значение оставить пустым и apcupsd сама найдёт бесперебойник. В случае с двумя ИБП параметр DEVICE надо будет использовать, чтобы “объяснить” apcupsd где какой ИБП.
dmesg в Linux всегда для меня выглядел хаосом (в сравнении с *BSD), так что “поиск” нужного устройства делался распространённым “научным” методом.
Вот что пишет ядро:
# dmesg|grep generic-usb
generic-usb 0003:0557:2221.0001: input,hidraw0: USB HID v1.00 Mouse [Winbond Electronics Corp Hermon USB hidmouse Device] on usb-0000:00:1a.0-1.2/input0
generic-usb 0003:0557:2221.0002: input,hidraw1: USB HID v1.00 Keyboard [Winbond Electronics Corp Hermon USB hidmouse Device] on usb-0000:00:1a.0-1.2/input1
generic-usb 0003:051D:0002.0003: hiddev96,hidraw2: USB HID v1.10 Device [American Power Conversion Smart-UPS 3000 RM XL FW:691.19.I USB FW:7.4] on usb-0000:00:1d.0-1.5/input0
generic-usb 0003:051D:0003.0004: hiddev97,hidraw3: USB HID v1.00 Device [American Power Conversion Smart-UPS C 1500 FW:UPS 09.7 / ID=1005] on usb-0000:00:1d.0-1.4/input0

Итого на сервере 4 generic-usb устройства – мышь, клавиатура и два бесперебойника. Про оба бесперебойника ядро пишет hiddev9?,hidraw?.
Устройство /dev/hiddevXX можно не искать – его нет. Зато есть /dev/usb/hiddev?. Найти взаимосвязь между /dev/usb/hiddev? и hiddev??,hidraw? я так и не смог. Продолжая использовать “научный” метод тыка, в конфигурационные файлы для ИБП, подключенных по USB добавил DEVICE /dev/usb/hiddev?.
Помимо этого все три конфигурационных файла отличаются портом, NISPORT на котором висит демон, чтобы можно было получать статус с определённой UPS. Дефолтовый NISIP 0.0.0.0 (привет безопасности по умолчанию) поменял на 127.0.0.1, так как мониторинг apcupsd будет вестись локально. Подправил пути на файлы сообщений и статуса (EVENTSFILE и STATFILE), чтобы у каждого запущенного демона был свой собственный набор файлов.
Окинем взором различие в конфигурационных файлах:
diff3 apcupsd-smc1500.conf apcupsd-cs1500.conf apcupsd-rm3000.conf
====
1:15c
UPSNAME CS1500
2:15c
UPSNAME SMC1500I-2U
3:15c
UPSNAME RM3000
====
1:29c
UPSCABLE smart
2:29c
UPSCABLE usb
3:29c
UPSCABLE usb
====
1:79,80c
UPSTYPE apcsmart
DEVICE /dev/ttyUSB0
2:79,80c
UPSTYPE usb
DEVICE /dev/usb/hiddev1
3:79,80c
UPSTYPE usb
DEVICE /dev/usb/hiddev0
====
1:202c
NISPORT 3552
2:202c
NISPORT 3553
3:202c
NISPORT 3551
====
1:206c
EVENTSFILE /var/log/apcupsd-cs1500.events
2:206c
EVENTSFILE /var/log/apcupsd-smc1500.events
3:206c
EVENTSFILE /var/log/apcupsd-rm3000.events
====
1:241c
STATFILE /var/log/apcupsd-cs1500.status
2:241c
STATFILE /var/log/apcupsd-smc1500.status
3:241c
STATFILE /var/log/apcupsd-rm3000.status

Для мониторинга вручную всё готово. Достаточно запустить /sbin/apcupsd -f /etc/apcupsd/config_name.conf. Для проверки работоспособности запустил apcaccess:
[root@mail apcupsd]# apcaccess
APC : 001,043,1074
DATE : 2014-02-04 14:20:12 +0400
HOSTNAME : **********
VERSION : 3.14.10 (13 September 2011) redhat
UPSNAME : RM3000
CABLE : USB Cable
DRIVER : USB UPS Driver
UPSMODE : Stand Alone
STARTTIME: 2014-02-03 17:25:12 +0400
MODEL : Smart-UPS 3000 RM XL
STATUS : ONLINE
LINEV : 233.2 Volts
LOADPCT : 0.0 Percent Load Capacity
BCHARGE : 100.0 Percent
TIMELEFT : 137.0 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME : 0 Seconds
OUTPUTV : 233.2 Volts
SENSE : High
DWAKE : -01 Seconds
DSHUTD : 090 Seconds
LOTRANS : 208.0 Volts
HITRANS : 253.0 Volts
RETPCT : 000.0 Percent
ITEMP : 24.7 C Internal
ALARMDEL : 30 seconds
BATTV : 55.1 Volts
LINEFREQ : 50.0 Hz
LASTXFER : Automatic or explicit self test
NUMXFERS : 0
TONBATT : 0 seconds
CUMONBATT: 0 seconds
XOFFBATT : N/A
SELFTEST : NO
STESTI : 14 days
STATFLAG : 0x07000008 Status Flag
MANDATE : 2010-12-17
SERIALNO : XXXXXXXXXXX
BATTDATE : 2010-12-17
NOMOUTV : 230 Volts
NOMBATTV : 48.0 Volts
FIRMWARE : 691.19.I USB FW:7.4
END APC : 2014-02-04 14:20:56 +0400

В данном случае apcaccess выводит информацию, которую по умолчанию берёт на 127.0.0.1 и стандартном порту 3551. Для получения информации о двух других бесперебойниках надо указать соответствующие порты (3552 и 3553):
[root@mail apcupsd]# apcaccess status 127.0.0.1:3552
APC : 001,048,1181
DATE : 2014-02-04 14:23:51 +0400
HOSTNAME : **********
VERSION : 3.14.10 (13 September 2011) redhat
UPSNAME : CS1500
CABLE : Custom Cable Smart
DRIVER : APC Smart UPS (any)
UPSMODE : Stand Alone
STARTTIME: 2014-02-03 12:36:35 +0400
MODEL : Smart-UPS SC1500
STATUS : ONLINE
LINEV : 230.0 Volts
LOADPCT : 9.1 Percent Load Capacity
BCHARGE : 100.0 Percent
TIMELEFT : 121.0 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME : 0 Seconds
MAXLINEV : 230.0 Volts
MINLINEV : 230.0 Volts
OUTPUTV : 230.0 Volts
SENSE : High
DWAKE : 000 Seconds
DSHUTD : 060 Seconds
DLOWBATT : 02 Minutes
LOTRANS : 208.0 Volts
HITRANS : 253.0 Volts
RETPCT : 000.0 Percent
ALARMDEL : 5 seconds
BATTV : 26.9 Volts
LINEFREQ : 50.0 Hz
LASTXFER : Line voltage notch or spike
NUMXFERS : 0
TONBATT : 0 seconds
CUMONBATT: 0 seconds
XOFFBATT : N/A
SELFTEST : NO
STESTI : 336
STATFLAG : 0x07000008 Status Flag
REG1 : 0x00 Register 1
REG2 : 0x00 Register 2
REG3 : 0x00 Register 3
MANDATE : 05/31/12
SERIALNO : XXXXXXXXXXX
BATTDATE : 05/31/12
NOMOUTV : 230 Volts
NOMBATTV : 24.0 Volts
FIRMWARE : 738.3.I
END APC : 2014-02-04 14:24:07 +0400

Осталось самое весёлое – подправить rc.d скрипты чтобы все три демона стартовали автоматически при запуске системы. Идём в /etc/rc.d/init.d/, где объектом изменений будет скрипт apcupsd. Его так же копирую, в соответствии с вышеописанными именами файлов конфигурации: apcupsd-rm3000, apcupsd-smc1500 и apcupsd-cs1500, а затем редактирую новые стартовые скрипты с учётом имён файлов конфигурации и параметров в них указанных. В скриптах интересуют значения APCPID, указание корректных флагов запуска apcupsd, изменение поведения killproc, чтобы он не убивал одним махом все запущенные процессы apcupsd и имена lock-файлов. Это что касается запуска демона. Для проверки статуса необходимо указать соответствующий демону NISPORT в параметрах запуска apcaccess.
После всех необходимых изменений в стартовых скриптах, эти стартовые скрипты надо “зарегистрировать”, а стандартный скрипт apcupsd наоборот – отключить. Для этого имена новых скриптов передаём в качестве параметра chkconfig:
chkconfig --add apcupsd-rm3000
и отключаем стандартный скрипт:
chkconfig --del apcupsd
Теперь в ntsysv доступны новые скрипты и нет стандартного. Ставим на них * и радуемся результатам содеянного:
[root@mail apcupsd]# service apcupsd-rm3000 start
Starting UPS monitoring: [ OK ]

[root@mail apcupsd]# ps ax|grep apc
5750 ? Ssl 0:00 /sbin/apcupsd -f /etc/apcupsd/apcupsd-rm3000.conf -P /var/run/apcupsd-rm3000.pid
5781 ? Ssl 0:00 /sbin/apcupsd -f /etc/apcupsd/apcupsd-smc1500.conf -P /var/run/apcupsd-cs1500a.pid
5810 ? Ssl 0:00 /sbin/apcupsd -f /etc/apcupsd/apcupsd-cs1500.conf -P /var/run/apcupsd-cs1500b.pid
5851 pts/5 S+ 0:00 grep apc

Целиком файлы конфигов я выкладывать не буду ни в этот раз, ни в последующие, дабы предотвратить бездумный copy-paste. Для всех файлов максимум будут diff относительно оригинального файла.

Share

Разработка

Мдя… Печальная тенденция – разработчики открытого ПО начали шевелиться и портировать свой софт на Windows 8 Metro. Нет бы задушить игнором…

Share

Поддержка USB модемов

This entry is part [part not set] of 2 in the series umsm

В общем мой ответ в misc@ о том как завести ZTE MF626, вылился в активную закулисную переписку о поддержке модемов вообще.
Вся сложность с этими модемаи в том, что они имеют на борту несколько устройств: cdrom, serial порт, card reader. Обычно всех интересует последовательный порт, который позволяет, посредстваом АТ команд, использовать сей девайс по назначению. А так как эти модемы предназначены в первую очередь для использования под_самой_распространённой_ос, то и все “удобства” заточены под ту самую ОС. А в этой ОС удобно следующее – воткнул модем, появился виртуальный КДПЗУ с софтом. Всё это дело автозапускается, софт ставится. Сам софт скрытно подтягивает драйвера и инициализирует устройство. Винда и так вечно ставит драйвера на одно и то же устройство, если его к разным портам подключать, а тут ещё и дополнительная иницализация. В общем суть этой софтины в том, чтобы:

  • сделать хорошо
  • предоставить интерфейс для SMS
  • позволить использовать USSD
  • предоставить большую кнопку “включить интернет”
  • И эта большая кнопка прекрасно работает, потому что софтина инициализировала модем и он стал не дефолтным устройством CDROM, а уже двумя – CDROM+modem.
    По умолчанию почти все модемы “прикидываются” накопителями. Задача userland или драйвера инициализировать режим модема.
    В винде понятно. В линуксе народ решает проблему при помощи софтины usb_modeswitch, которая, руководствуясь некоторыми правилами, отправляет ту или иную команду инициализации. Правило из себя представляет следующее:
    DefaultVendor= 0x05c6
    DefaultProduct= 0x1000

    TargetVendor= 0x0af0
    TargetProduct= 0x6901

    MessageContent="55534243123456780000000000000601000000000000000000000000000000"
    Default VendorID и ProductID – то, как устройство определяется изначально, т.е. ID накопителя. Target – то, чем устройство станет после отправки на него команды с содержанием MessageContent. На самом деле подобная свистопляска нужна не только для модемов. Есть подобные милые принтеры, Wi-Max адаптеры, мобильные телефоны.
    В OpenBSD все эти манипуляции выполняются драйверами, а не userland. В случае с модемами речь идёт о umsm(4). Драйвер отсылает команды инициализации устройству руководствуясь теми же принципами, что и usb_modeswitch в Linux. Да вот одна незадача. Ковыряясь с MF626 выяснилось, что производители пошли дальше для упрощения себе жизни. Они выпускают разные модели модемов, но с одинаковыми PID. Это пол беды. Для разных модемов с одинаковым PID нужны разные команды инициализации. А вот тут и наступает опа.
    В общем sthen@ и jsg@ задумались, как это разруливать.

    Share

    PTR

    Ура! Провайдер добавил меня в обратную зону.
    6.250.123.188.in-addr.arpa name = linklevel.net.
    Жаль только, что для подключения они коаксиал используют…

    Share

    ZTE MF626 под OpenBSD

    This entry is part [part not set] of 2 in the series umsm

    В misc@ был задан вопрос о поддержке модема ZTE MF626 в OpenBSD. Так как у меня давно на столе лежит подобный агрегат от пчелайна, решил проверить, работает ли. Вставил туда давно заблокированную пчелайновску симку, купленную несколько лет назад в Киргизии и подключил к компу. Естественно ничего полезного не увидел:
    umsm0 at uhub0 port 3 configuration 1 interface 0 "ZTE, Incorporated ZTE CDMA Technologies MSM" rev 2.00/0.00 addr 2
    С “голым” umsm каши не сваришь. Попробовал по стандартному пути: подключил к винде, поставил драйвера с псевдо-КДПЗУ. Определились два последовательных порта: ZTE DIagnostic Interface и ZTE NMEA Device. Второй, через PuTTY ответил на AT комманду “OK”. Я нашёл список АТ комманд для этого модема и послал ему AT+ZCDRUN=8, получив в ответ “Close autorun state result (0:FAIL 1^:SUCCESS):1” и ОК. После этого модем пропал как накопитель из “моего компьютера”, а в OpenBSD благополучно определился как последовательный порт:
    umsm0 at uhub0 port 3 configuration 1 interface 0 "ZTE, Incorporated ZTE CDMA Technologies MSM" rev 2.00/0.00 addr 2
    umsm0: missing endpoint
    umsm1 at uhub0 port 3 configuration 1 interface 1 "ZTE, Incorporated ZTE CDMA Technologies MSM" rev 2.00/0.00 addr 2
    umsm1: missing endpoint
    umass0 at uhub0 port 3 configuration 1 interface 2 "ZTE, Incorporated ZTE CDMA Technologies MSM" rev 2.00/0.00 addr 2
    umass0: using SCSI over Bulk-Only
    scsibus5 at umass0: 2 targets, initiator 0
    sd3 at scsibus5 targ 1 lun 0: SCSI2 0/direct removable serial.19d20031567890ABCDEF
    umsm2 at uhub0 port 3 configuration 1 interface 3 "ZTE, Incorporated ZTE CDMA Technologies MSM" rev 2.00/0.00 addr 2
    ucom0 at umsm2

    Который отвечает на АТ команды:
    kirby@barton:ttyp2 % cu -l /dev/cuaU0 -s 9600
    Connected
    AT
    OK

    +ZUSIMR:2

    +ZUSIMR:2
    ~
    [EOT]
    Дальше проверить не могу, т.к. симка давно мертва, а других пчелайновских симок не имею, ибо не пользуюсь услугами данной компании :)

    P.S. для отката изменений и возвращения модема к “товарному виду” надо заслать в порт AT+ZCDRUN=9.

    P.P.S. Под OpenBSD модем прекрасно заработал с симкой от мелафона. Настройки элементарны – скопировать /etc/ppp/ppp.conf.sample в /etc/ppp/ppp.conf, отредактировать значение set device и allow user исходя из реалий. На моём ноутбуке я прописал /dev/cuaU0 и kirby соответственно.
    Подключение к интеренету командой ppp -ddial mobile.

    Share