Я могу создать дистрибутив Linux с libc вместо glibc

Вот два метода:

Можно удостовериться, что связка ключей только открывается на одной вкладке как это:

if mkdir /tmp/keychain.lock; then
  eval `keychain --eval --agents ssh id_dsa`
  rm -r /tmp/keychain.lock
fi

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

Иначе отобразит подсказку на всех вкладках, но выйдет из них, после того как Вы отвечаете на любом из них. Можно опросить файл или использовать inotify-инструменты как это:

file=/tmp/keychain-wait
touch $file
inotifywait -e delete_self $file |\
while read file event; do 
 if [ "$event" = "DELETE_SELF" ]; then
   pkill keychain
 fi
done &

keychain
rm $file

Эти подарки подсказка, но сначала это запускает наблюдателя, чтобы видеть, удален ли файл. После того, как подсказка удовлетворена, файл удален, и наблюдатель уничтожит любые другие подсказки, которые ожидают. inotifywait от inotify-инструментов; inotify является API Linux. На других Нельдах может быть подобный API, но в противном случае Вам только нужен цикл, который опрашивает, чтобы видеть, удален ли файл.

6
11.04.2012, 23:14
3 ответа

Контекст: принятие из вышеупомянутых комментариев, что BSDish libc предназначен.

Я думаю, что это было изучено, но libc имеет тенденцию быть плотно связанным с данным ядром (glibc имеет уровень абстракции, который позволяет ему некоторую мобильность, но вызывает обычные проблемы, которые уровень абстракции вызывает), и делающий BSD libc работа с ядром Linux потребовала бы, чтобы завершенная близость переписала. ключевые системные службы очень отличаются между этими двумя системами (один пример: BSD libc предполагает, что нет никаких pipes/FIFOs, потому что BSD использует socketpairs вместо этого; с другой стороны Linux не поддерживает совместимый с каналом socketpairs).

Движение другого направления (Debian имеет экспериментальное пространство пользователя Linux на ядре FreeBSD, я думаю), возможно из-за glibcслой мобильности.

7
27.01.2020, 20:24

Существует много libc реализаций. Это возможно и довольно распространено создать систему с помощью uClibc или EGLIBC. Это даже не особенно трудно: попробуйте Buildroot.

4
27.01.2020, 20:24
  • 1
    фантастическая рекомендация, я изучаю это теперь –  yakamok 11.04.2012, 23:41
  • 2
    eglibc фактически эквивалентен glibc в целях этого вопроса. –  jmtd 12.04.2012, 16:09

Многие программы зависят от самого glibcили glibcмакросов или просто glibcстиля, поэтому сборка завершается неудачно. Вы можете легко починить любую программу, если знаете glibcизнутри. Например, мы можем видеть здесь заголовки linux для musl. Заголовки не закончены, но вы можете проверить коммиты и посмотреть, как выглядит эта работа.

Каждый разработчик тестирует свое программное обеспечение, используя систему, основанную на glibc. Невозможно исправить всю разработку программного обеспечения в реальном времени и сделать его совместимым с другим libc, используя правильное решение, такое как запрос на включение. Таким образом, системы общего назначения, такие как gentoo, не могут быть построены с использованием альтернативной libc без бесконечных усилий.

Разработчики встраиваемых систем (из openwrt, например ), исправляют версии программного обеспечения и выполняют тяжелую работу по их устранению. Таким образом, встроенная система (, такая как openwrt), может предоставить только источник , который можно собрать с помощью альтернативной libc, такой как muslили uclibc.

Единственный безболезненный и правильный способ заменить glibcдругим libc— это реализовать специальную оболочку, которая имитирует все glibcповедения, используя другие libc. Сегодня такого проекта нет.

0
27.01.2020, 20:24

Теги

Похожие вопросы