Rating@Mail.ru
IPB
Etersoft - from Windows to Linux
Etersoft
решения для перехода
с Windows на Linux
Дружественные сайты: alv.me и Rus-Linux.net

Здравствуйте, гость ( Вход | Регистрация ) Поиск · 

Профиль
Фотография
Опции
Опции
О себе
sunny1983 не указал(а) ничего о себе.
Личная информация
sunny1983
Бывалый
33 от роду
Мужской
Место жительства не указано
Дата рождения: Апр-17-1983
Интересы
Нет данных
Другая информация
Операционная система: GNU/Linux 4.x (Fedora, Debian)
JID: sunny1983@jabber.ru
Город: Сергиев Посад
Статистика
Регистрация: 15-November 09
Просмотров профиля: 10618*
Последнее посещение: Вчера, в 08:23
Часовой пояс: Jan 21 2017, в 04:20
339 сообщений (0.13 за день)
Контактная информация
AIM Нет данных
Yahoo Нет данных
ICQ 474498135
MSN Нет данных
* Просмотры профиля обновляются каждый час

sunny1983

Участники


Темы
Сообщения
Друзья
Содержимое
31 Dec 2016
Не до конца понимаю как работает графическая подсистема в GNU/Linux. Есть X-сервер и X-клиент, первый - то что взаимодействует с драйвером видеокарты и выводит изображение, второй - это сами GUI-приложения. Сервером может быть Xorg или его современные аналоги: Mir и Wayland, также некоторые VNC-сервера, такие как TigerVNC, также являются X-серверами.
Для работы в графическом режиме X-клиент нужно запускать одновременно с X-сервером, при отсутствии клиента X-сервер автоматически завершает свою работу. Для одновременного запуска используется утилита xinit. Если пользователь авторизовался в командной строке, то он запускает графическую подсистему командой startx, startx - это скрипт, в котором происходит подстановка переменных, в которых выбирается какой именно X-сервер и X-клиент запускать и с какими параметрами, у меня в конечном итоге выполняется команда:
Код
xinit /usr/bin/startxfce4 :0 -- /usr/bin/Xorg :0

Xorg запускается от имени root, поскольку /usr/bin/Xorg имеет suid-бит, :0 - это номер дисплея, номер дисплея также передаётся через переменную DISPLAY, только я не очень понимаю что это, дисплей как-то связан с открытым tcp-портом или файлом сокета? И почему графическая подсистема запускается командой startx из локальной консоли, но отказывается запускаться из ssh-консоли?
Ещё одна задача, которую я не могу решить. Была задача, запускать VNC-сервер, чтобы потом удалённо к нему подключаться. Я запускал всё ту же DE XFCE, для чего подключался к серверу по ssh с пробросом tcp-порта 5900 на 127.0.0.1:5900, потом в окне ssh-терминала давал команду:
Код
xinit /usr/bin/startxfce4 :0 -- /usr/bin/Xvnc :0 -geometry 800x600 -localhost -rfbport 5900 -SecurityTypes None

ну а после подключался VNC-клиентом к 127.0.0.1:5900. Что мне не удалось решить, так это автоматизировать этот процесс, чтобы TigerVNC запускался автоматически, и чтобы не нужно было держать открытым окно ssh-клиента, а пользоваться, например, клиентом remmina, который умеет открывать свои ssh-сессии.
Другой момент, который я не понимаю, это автоматический запуск графического окружения с помощью менеджера дисплеев, такого как xdm, gdm или lightdm. Как я понимаю из systemd-юнита вызывается всё тот же xinit, но в качестве клиента запускается менеджер дисплеев, в этом случае и сервер, и клиент запускаются от рута, потом, когда пользователь авторизовывается в графическом интерфейсе, запускается уже DE от имени пользователя. Правда где-то я слышал, что WM работает в одном X-сервере, а DE - в другом. Как в этом случае подключаться по VNC, чтобы можно было авторизовываться в окне VNC-клиента?
И ещё одна нерешаемая задача. ssh-сервер и клиент позволяют ведь и без VNC выводить окно GUI-приложения прямо на рабочем столе клиента с помощью опций X11Forwarding и ForwardX11. Что ещё для этого нужно? Какое значение должна принимать в этом случае переменная DISPLAY?
19 Dec 2016
Хочу научиться собирать rpm-пакеты.
Цель не только научиться, есть практическая задача. Есть значит дистрибутив CentOS 7, нужно чтобы в системе работал netflow-сенсор ipt-netflow, для этого нужно собрать модуль ядра ipt-netflow и обновить iptables, в репозитории есть iptables версии 1.4.21, нужна последняя версия 1.6.0.
Лезу в гугл, и нахожу основной HOWTO по сборке rpm, а также материал с доп. инфой по макросам:
http://rpm.org/documentation.html
https://fedoraproject.org/wiki/How_to_create_an_RPM_package
https://fedoraproject.org/wiki/Packaging:RPMMacros
Лезу ещё и нахожу статьи по теме нарусском:
http://wiki.russianfedora.pro/index.php?ti...здать_пакет_RPM
https://www.opennet.ru/base/sys/rpm_create.txt.html
https://habrahabr.ru/post/246177

Итак, если я правильно понимаю тему, мне для этого нужны исходники и все зависимости, а также spec-файл, в нём есть все описания пакета, коды пред и постинсталяционных скриптов, и, самое главное , секции: %prep, %build, %install и %clean, в которых описываются вехи процесса сбохки пакета, обрабатываются эти секции как код обычных bash-скриптов, с включёнными в него макросами и переменными, начинающихся с символа "%". В домашнем каталоге пользователя (так проще при пересборке src.rpm) создаётся каталог rpmbuild, в нём подтаталоги: SOURCES, SPECS, BUILD, RPMS, SRPMS, SPEC-файлы помещаются в SPECS, архивы исходников в SOURCES.
Сейчас я пытаюсь написать spec-файл для iptables версии 1.6.0, в качестве образца беря spec-файл для версии 1.4.21. Сразу скажу, я не программист, поэтому возможно что-то понимаю не так. Что-то в образцовом spec-файле мне непонятно, из-за чего у меня появляется желание упростить код, выкинув из него то, что мне кажется лишним.

Секция %prep: я решил заменить макрос %setup на то, что он делает, что сделать код понятным для себя. Также я выкидываю из кода всё, что касается патчей, потому что в образцовом spec-файле это были патчи для версии 1.4.21, а я собираю 1.6.0. Итак, у меня получается:
Код
%prep
cd %{_builddir}
rm -Rf %{name}-%{version}
tar --extract --file=%{_sourcedir}/%{name}-%{version}.tar.bz2
if [ $? -ne 0 ]; then
  exit $?
fi
cd %{name}-%{version}
chown -R root:root .
chmod -R u=rwX,g=rX,o=rX .

Собирать пакет буду из-под пользователя, но тут в сценарии я вижу одну команду, выполнение которой возможно только из-под рута, это "chown -R root:root .", я так понимаю что утилита rpmbuild, которая вызывает процесс сборки, будет вызывать fakeroot, иначе ведь ничего не получится.

Секции %build и %install: программа, которую я собираю, собирается при помощи стандартной трёхкомандной комбинации: «./configure», «make», «make install», собственно это и должно выполняться в этих секциях. Но я вижу в образцовом spec-файле много другого кода, например что делают эти две строки?
Код
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool

Или вот, зачем перед вызовом make удалять types.h?
Код
rm -f include/linux/types.h

И что за переменная %{?_smp_mflags} такая?
Код
make %{?_smp_mflags}

Вообще, в вышеописанных материалах макросы и переменные описаны не полностью.
Дальнейшие секции пока не разбирал.
А как делать, если нужно опакетить программу, собирающуюся не методом трёхкомандной комбинации, а через инсталлятор, например проприетарный драйвер nvidia, я вообще без понятия.
24 Aug 2016
Как сделать VNC-доступ к компьютеру? Дистрибутив - Fedora 23.
Какой сервер использовать: TigerVNC, x11vnc или возможности VNC-сервера, встроенные в Xorg?
При загрузке компьютера у меня запускается lightdm и логинюсь я в нём. Мне бы хотелось, чтобы у меня была также возможность логиниться по VNC.
Здесь мне советовали x11vnc, я хотел запускать его с помощью systemd-юнита, но сказали, что не взлетит и советовали запускать через desktop-файл в ~/.config/autostart. Собственно не взлетело. Советуемый вариант не подходит, потому что с ним подключаться по VNC я смогу только, если перед этим выполнил локальный вход (логиниться по VNC не получится).
Да, и я возможно неправильно понимаю функционал lightdm. Юнит lightdm.service запускает X-сервер и X-клиент одновременно, X-сервер - Xorg, запускается от рута, X-клиент - в моём случает - XFCE, запускается от пользователя, но пользователь перед этим должен залогиниться, стало быть перед запуском XFCE будет работать другой X-клиент. В теме, на которую я дал ссылку, сказали, что кроме всего будет работать и другой X-сервер, поэтому идея с логином по VNC обречена на провал. Что мне собственно нужно сделать, чтобы реализовать задуманное? Отказаться от lightdm в пользу другого dm? Да, мне бы ещё хотелось, чтобы когда я подключаюсь по VNC с компьютера, с меньшим размером экрана, экран бы переразмеривался.
25 Jul 2016
Не получается освоить програмирование на bash. Язык для меня сложен тем что: 1) вместо зарезервированых слов в нём в массе используются спецсимволы такие как "[", "$", которые имеют двоякое и троякое значение, 2) нет функций по обработке строк, вместо этого предлагается использовать sed и awk, синтаксис которых довольно запутан.
Подумалось, а не бросить ли этот bash, и не заняться ли изучением продвинутых скриптовых языков. Вот только можно ли в других языках также легко перенаправлять вывод в stdout одной программы на вход stdin другой программы.
Есть две задачи.

Задача 1: нужно реализовать сканирование сети, с целью выявить все хосты по MAC-адресу. Для этого на компьютере создан bridge-интерфейс, команда "brctl showmacs" отображает MAC-адреса всех устройств, после делается перебор командой arp, которая перебирает все ip-адреса, которые могут входить в подсеть:
Код
IF=br0
brctl showmacs $IF | awk '{print $2}' | grep ":" | while read MACADDR
do
   for IPADDR in "$IPVARIANTS"
   do
      if [[ -n "$(arp -n "$IPADDR" | grep "$MACADDR")" ]]; then
         IPADDRTRUE=true
         echo -e "$MACADDR \t $IPADDR"
      fi
   done
   if [[ IPADDRTRUE != true ]]; then
      echo -e "$MACADDR \t no ip address"
   fi
done

Знаю, что задача переборки двух строковых массивов выполняется совсем не так, но как средствами bash это сделать более правильно - я не сообразил, лучше конечно не вызывать цикл arp для каждого MAC-адреса, а сделать это один раз, а ещё не сообразил как задать переменную IPVARIANTS - в ней должны быть перечислены все ip-адреса через пробел, входящие в заданную подсеть, например в подсеть 128.0.0.0/22

Задача 2: нужно реализовать автовход по ssh или telnet на свитчи. Авторизация по ключу не поддерживается, то есть нужно сделать, чтобы скрипт передавал логин и пароль прямо в терминал устройства, вставляя в передачи паузы нужной длины. Но сначала нужно, чтобы терминал устройства вообще как-то открывался. Есть windows-программа The Dude, которорая работает в wine, программа представляет собой карту сети и, кликнув на любое устройство на карте, можно на него зайти. wine позволяет запускать bash-скрипты, если им присвоено расширение exe. У меня в настройках The Dude прописан вызов инструмента "c:\ssh.exe root@[Device.FirstAddress]", то есть при заходе на устройство 128.0.0.3 должен вызываться скрипт ssh.exe c параметром root@128.0.0.3, мне хотелось, чтобы этот скрипь вызывал окно эмулятора терминала с запущеным в нём клиентом ssh
Код
#!/bin/bash
/usr/bin/xfce4-terminal -x "/usr/bin/ssh $1"

ssh-сессия не открывается, окно эмулятора терминала появляется на экране и тут же изчезает, я не успеваю прочитать, что на него выводится. А как в этом скрипте реализовать ещё и автовход - вообще не знаю.
15 Jul 2016
Есть подозрение, что cron не запускает команды.
В /etc/crontab правила есть, а команда "crontab -u root -l" говорит "no crontab for root".
Так не должно быть?
Просмотры


1 Jan 2017 - 21:10


28 Jun 2016 - 12:18


15 Oct 2015 - 14:58


5 Sep 2015 - 21:20


6 Jan 2015 - 22:41


Друзья
Друзей нет.
RSS Текстовая версия Сейчас: 21st January 2017 - в 03:20




Rating@Mail.ru