Ответы пользователя по тегу Linux
  • По какой причине несовместимость библиотек?

    @res2001
    Developer, ex-admin
    Тут скорее причина не в "несовместимости", а в "cannot find -lcpprest: No such file or directory"
    Проверьте существует ли библиотека по указанному пути. Скорее всего ее нет.
    Надо разобраться почему ее нет. Я так понимаю, она должна собраться вместе со всем остальным.
    Может не хватает каких-то ключей для сборки и т.п.

    При сборке включите режим verbose и проверьте весь вывод make, есть ли там упоминание о сборке libcpprest.a
    Ответ написан
  • Можно ли зайти на Linux сервер имея только SSH Private Key?

    @res2001
    Developer, ex-admin
    На стороне клиента используется его приватный ключ. Публичный ключ лежит на сервере.
    Имея приватный ключ можно подключиться по ssh, если на сервере лежит парный ему публичный ключ.
    В вашем случае, видимо публичный ключ лежит на сервере в ~/.ssh/authorized_key
    Ответ написан
    Комментировать
  • Несколько копий одной и той же службы с разными конфигами?

    @res2001
    Developer, ex-admin
    Можно сделать несколько конфигурационных файлов службы для systemd и в каждом передавать в параметрах свой конфиг.
    Многие службы уже содержат подобный "универсальный" конфигруационный файл, который позволяет из "коробки" запускать несколько экземпляров службы. Например, такой у openvpn, на сколько я помню.
    В общем, разбирайтесь с настройкой служб в systemd. Там не то что бы сильно сложно.
    Ответ написан
    Комментировать
  • Нужно ли перед установкой программ выполнять sudo apt update?

    @res2001
    Developer, ex-admin
    apt update - просто обновляет список доступных в подключенных репозитариях пакетов.
    Без этого обновления пакетный менеджер не знает какие пакеты устарели и требуют обновления, а так же не знает о новых добавленных пакетах.
    Перед установкой нового пакета лучше всего выполнить apt update, но можно и не выполнять, ничего особо страшного не будет.
    Вообще есть смысл регулярно выполнять sudo apt update & sudo apt upgrade - это приведет к обновлению всех требующих обновления пакетов.

    Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend

    Сюдя по всему у вас где-то в другом окне параллельно идет обновление или установка. Когда вы запускаете apt и/или графическую утилиту обновления, то они блокируют базу данных установленных пакетов и параллельный запуск может приводить к подобным ошибкам. Просто дождитесь, когда все установки закончатся.
    Ответ написан
    1 комментарий
  • Можно ли одновременно запустить вторую ОС с внешнего диска?

    @res2001
    Developer, ex-admin
    Можно поднять WSL, поставить туда какой-нибудь линукс на выбор, примонтировать внешний диск.
    Графический раб.стол можно пробросить через RDP, настройка WSL для этого легко гуглится.
    В таком варианте по ощущениям работает быстрей, чем виртуалка в виртуальной коробке.
    Ответ написан
    Комментировать
  • Как лучше хранить 13 ТиБ данных (mdadm / lvm / zfs / btrfs)?

    @res2001
    Developer, ex-admin
    То что лучше знаешь/был опыт работы: llvm или zfs/btrfs.
    Можно использовать что-то типа TrueNAS и не парится с выбором.
    Возможно стоит как-то разделить файлы на группы, а не держать в общей файло-помойке, и группы разложить на разные raid тома, созданные на независимых от других групп дисках...
    Стоит подумать еще и о бэкапе всего этого добра.
    Ответ написан
  • Как через cmd и терминал удалить из папки все файлы, кроме выбранных?

    @res2001
    Developer, ex-admin
    Набросаю схематично вариант без forfiles.
    Имеем текстовый файл file.txt со списком имен файлов, которые не надо удалять - одно имя файла на каждой строке.
    Получить список всех файлов в каталоге можно с помощью dir /b
    Далее этот список отфильтровать, исключая файлы, содержащиеся в file.txt, примерно так:
    dir /b c:\test\* | findstr /v /g:file.txt
    На выходе по идее должен быть список файлов, которые надо удалить.
    Эту команду запихнуть в
    for /f "tokens=* delims=" %%a in ('dir ... ^| findstr ...') do (del %%a)

    В принципе все.
    Проверить все сейчас не могу, т.к. под рукой нет винды, поэтому только общая идея, компоновать придется самому.
    За подробностями:
    dir /?
    for /?
    findstr /?
    del /?

    Рекомендую сначала выполнить связку dir | findstr вручную в консоли и добиться, что бы выдавался нужный результат (список файлов для удаления), только затем все это оформлять в батник.
    Ответ написан
  • OpenVPN на протоколе UDP не видит только отключение клиента в логах?

    @res2001
    Developer, ex-admin
    Используйте в конфиге сервера опцию keepalive. Это заставит OpenVPN отправлять тестовые пинги для проверки соединения.
    https://openvpn.net/community-resources/reference-...
    Ответ написан
    Комментировать
  • Где найти информацию по конфигурации uboot?

    @res2001
    Developer, ex-admin
    У меня был некоторый опыт с uboot, правда для другой ОС

    Если у вас какая-то стандартная покупная плата, то возможно в uboot уже есть готовый config. Обычно производители плат в документации указывают как собрать uboot под их плату (если они поддерживают uboot), либо это можно нагуглить в интернете.
    Если же плата самодельная, то берете самый близкий для вашей платы config (вы же брали за основу какой-то референс дизайн платы, вот эту плату и берите за основу), переименовываете его и вносите в него соответствующие изменения.
    Бывает, что вместе с config'ом требуется вносить изменения и в dts, они в uboot лежат в ./arch/<platform name>/dts. Название используемых dts лежит в переменной CONFIG_DEFAULT_DEVICE_TREE и/или в CONFIG_OF_LIST в config файле.

    Config файл - это просто набор параметров, которые превращаются в набор инструкций #define при сборке.
    С dts все сложнее. Там целый язык описания железа.

    Для сборки uboot рекомендую следующую последовательность:
    1. Заведите для сборки отдельный пустой каталог. Он будет текущим каталогом для всех дальнейших команд
    2. Пусть каталог где лежит сам uboot хранится в переменной UBOOT_DIR. Архитектура процессора вашей платы (например arm) в переменной ARCH. Префикс для кросскомпилятора в CROSS (например arm-linux-gnueabihf-). Имя выбранного defconfig файла в переменной DEFCONFIG (имя указываете вместе с суффиксом _defconfig)
    3. Очистка каталога сборки:
    make -C $UBOOT_DIR ARCH=$ARCH CROSS_COMPILE=$CROSS distclean

    Эта команда пригодится при пересборках в случае изменения конфигурации
    4. Подготовка конфигурации для сборки:
    make -C $UBOOT_DIR ARCH=$ARCH CROSS_COMPILE=$CROSS $DEFCONFIG

    5. Сборка: make -C $UBOOT_DIR ARCH=$ARCH CROSS_COMPILE=$CROSS

    Несколько полезняшек:
    1. Вы можете задавать дополнительную опцию для make: -O <путь>
    Она задает каталог, в котором будет происходить сборка. Этот каталог make создаст сама. Это бывает удобно, если работаете сразу с несколькими конфигами.
    2. В uboot встроен конфигуратор конфигов :) Конфигурация происходит в текстовом режиме с помощью меню, присутствуют подсказки для опций и т.п. Когда вы создали начальную конфигурацию в п.4 выдайте команду:
    make -C $UBOOT_DIR ARCH=$ARCH CROSS_COMPILE=$CROSS menuconfig

    Тут то же можно добавлять опцию -O для выбора каталога с конфигурацией. После исправления конфигурации, не забудьте ее сохранить.
    Дальше нужно дать команду:
    make -C $UBOOT_DIR ARCH=$ARCH CROSS_COMPILE=$CROSS savedefconfig

    Она создаст на основе текущей конфигурации defconfig файл в каталоге сборки. Этот файл можно переименовать в <имя платы>_defconfig и подложить в каталог с конфигами uboot и в дальнейшем использоавть его для сборки.
    3. В каталоге с uboot дайте комаду make help для получения списка возможных опций.
    4. Обычно я собираю uboot под линукс, но та же схема вполне работает и в WSL под виндой. Набор кросс-компиляторов есть в портах (в WSL исопльзовал дистрибутив ubuntu).

    Желаю удачи!
    Ответ написан
    4 комментария
  • Как вылечить диск?

    @res2001
    Developer, ex-admin
    Если на диске важные данные, то я бы сделал образ диска, а потом бы производил потенциально деструктивные операции.

    В первом случае можно ввести в ответ No, тогда он что-то попробует сделать.
    Можно попытаться восстановить раздел с загрузочного носителя, используя софт для восстановления разделов.
    Для начала стоит провести тест диска, т.к. суперблоки и таблицы разделов обычно просто так не сбоят. Вероятно диск начал сыпаться.
    Ответ написан
    3 комментария
  • Как организовать установку и обновление ПО для linux серверов без прямого доступа в интернет?

    @res2001
    Developer, ex-admin
    Я за локальные репы. Этим и трафик сэкономите. Правда довольно много дискового пространства потребуется.
    Ответ написан
    Комментировать
  • Как запустить arch linux на beaglebone black?

    @res2001
    Developer, ex-admin
    BBB не видит карту

    По ссылке описан raw вариант загрузки с карты памяти.
    Есть еще и вариант загрузки с загрузочного FAT/FAT32 раздела. Но, возможно его надо включать какими-то переключателями на плате.
    Там просто размещаете файлы загрузчика и ядра в корне раздела.
    Вообще у Texas Instruments есть своя сборка Линукс. Используйте ее, а не arch. Там же можете найти описание создания загрузочного носителя для линукс (конечно, применительно к своему дистру). У них толковая дока.
    Ответ написан
  • Что делает эта команда: gcc -I my_dts -E -nostdinc -undef -D__DTS__ -x assembler-with-cpp -o system.dts system-top.dts?

    @res2001
    Developer, ex-admin
    my_dts - подкаталог в текущем каталоге, там gcc будет искать дополнительные файлы, которые используются в директиве #include, компилируемого файла, т.к. my_dts это параметр ключа -I. Если такого каталога нет - gcc никак об этом не сообщит, но возможно будут какие-то ошибки при сборке.
    Опция -E заставляет прервать компиляцию после обработки препроцессором.
    Т.е. в данном случае просто используют препроцессор Си для файлов dts. DTS - device treee source. В DTS файлах описывают железо на котором загружается ОС. Они используются, например, в u-boot, в ядре линукс и т.п.
    Выходной файл задается опцией -o.
    Ответ написан
    Комментировать
  • Какой компилятор ОС Linux переводит написанный мной код в двоичный код?

    @res2001
    Developer, ex-admin
    php - интерпретируемый язык. Т.е. он не переводится в маш.код. Исходный код на PHP исполняет интерпретатор языка php.
    HTML - вообще не имеет отношения к маш.кодам - это язык разметки. Его интерпретирует браузер, строит на его основе DOM и рисует веб страничку.
    Ответ написан
    Комментировать
  • Какой компонент в linux решает, через какой интерфейс соединиться с IP адресом?

    @res2001
    Developer, ex-admin
    Вся маршрутизация зашита в логику работы стека TCP/IP. Управляется таблицей маршрутизации. За доступ в интернет отвечает в таблице маршрутизации запись о маршруте по умолчанию. Таких маршрутов может быть несколько с разными метриками (приоритетами). Используется тот маршрут у кого приоритет выше.
    Так же и таблиц маршрутизации может быть несколько - это вариант как раз для ситуации, когда есть несколько каналов в интернет и нужно сделать балансировку нагрузки или отказоустойчивость (или гибридную схему). С помощью грамотной настройки фаервола и дополнительных скриптов можно все это организовать. Это уже придется делать самому, или использовать сторонний софт/железо. Но инструменты для подобных вещей есть.

    Если интернет не доступен по заданному маршруту, то пакеты все равно будут отправляться и будут где-то пропадать. Так что ответов не будет или будет ответ с ошибкой. Соединения будут отваливаться либо по тайм-ауту, либо по ошибке.
    Ответ написан
    Комментировать
  • Как читать из stdout другого процесса в linux api?

    @res2001
    Developer, ex-admin
    В линуксе точно так же есть именованные и не именованные каналы, API, естественно, отличается, но суть не меняется.
    Ответ написан
  • Как узнать путь до исполняемого файла в Linux?

    @res2001
    Developer, ex-admin
    В линукс обычно исполняемые файлы лежат в /bin, /sbin, /usr/bin, /usr/sbin.
    Иногда в /usr/local/bin, /usr/local/sbin.
    Еще некоторый софт ставит себя в /opt и там в собственном подкаталоге создает похожую иерархию каталогов.
    Найти программу по имени можно с помощью команды whereis <имя программы>
    Или с помощью find / -name <имя программы>
    find будет работать дольше т.к. будет сканировать все что сможет. whereis сканирует только каталоги указанные в PATH, поэтому работает гораздо быстрей.
    Ответ написан
    Комментировать
  • В чем именно проблема с ЖД?

    @res2001
    Developer, ex-admin
    SMART всегда возвращает физическое состояние диска. Фактически состояние SMART хранится на контроллере диска, так что ПО тут значения не имеет.
    У вас начались переназначения секторов. Это происходит, когда какие-то сектора на диске выходят из строя, в этом случае доступ к ним блокируется контроллером и вместо них назначаются другие (резервные) сектора. Резервных секторов ограниченное количество.
    Пока что у вас только 3 переназначения (VALUE), предельное количество переназначений 36 (THRESH). Когда количество переназначений достигнет этого числа, то переназначать уже будет нечего, тогда контроллер диска будет возвращать ошибки чтения в ОС.
    Еще какое-то время диск может пожить. Но не известно как быстро он исчерпает все переназначения.
    Так что лучше слить с него все что можно и заменить.

    Задержки могут быть вызваны переназначением секторов, т.к. прежде чем пометить сектор сбойным, контроллер пытается несколько раз его прочитать - вдруг получится. Поэтому задержки очень вероятны. Видимо диск у вас сыпется, но большая часть секторов еще кое-как читается (возможно не с первой попытки), т.к. переназначений еще мало. Но переназначения рано или поздно пойдут лавиной, тогда с диском уже ничего нельзя будет сделать.
    Ответ написан
    3 комментария
  • RAW-сокеты и API сетевых устройств в Linux. Какая есть литература?

    @res2001
    Developer, ex-admin
    По Линукс + сети книг достаточно.

    Хороших книг явно не достаточно, по моему.
    Про raw socket написано в "Unix. Разработка сетевых приложений" Стивенса. Книга старая, новых изданий нет. Но информация достаточно актуальна.

    Про API сетевых устройств - что вы имеете ввиду? Написание сетевых драйверов? Уровень железа описан в документации производителя чипа, то что касается взаимодействия с ядром - берите пример любого драйвера и переделывайте под свою железку. В новом драйвере изменений со стороны взаимодействия с ОС будет минимум, скорее всего.
    Ответ написан
  • Как организовать файлопомойку через ssh?

    @res2001
    Developer, ex-admin
    Если пользователи сидят в одной локальной сети то ssh избыточна, используйте стандартные средства: виндовые шары/samba.
    Если нужен доступ из инета, то можно использовать sshfs. Или WebDAV какой-нибудь.
    Ответ написан
    Комментировать