LINUX.ORG.RU

Первый установочный образ Stali (static linux) от сообщества Suckless

 ,


8

8

Сообщество Suckless, широко известное своей философией разработки ПО, а также набором программ, среди которых dwm, dmenu, surf, tabbed, st и другие, представило первый установочный образ дистрибутива Stali (static linux).

Проект интересен, прежде всего, множеством нестандартных архитектурных решений, отсутствующих в других дистрибутивах и воплощающих философию suckless на уровне ОС.

Основные отличия:

  • статическая линковка всех программ;
  • игнорирование FHS, предлагается иная иерархия директорий;
  • установка и обновление при помощи git;
  • замена coreutils и util-linux на sbase и ubase собственной разработки;
  • использование musl в качества системной libc;
  • отсутствие systemd, используется sinit (suckless init).

Разработчики отмечают более высокое быстродействие системы и низкое потребление памяти.

В дополнение к образу доступна пошаговая инструкция по установке.

>>> Подробности

★★★★

Проверено: Klymedy ()
Последнее исправление: Klymedy (всего исправлений: 6)
Ответ на: комментарий от qulinxao

Я читал эти доводы — окей, там они хотя бы удосужились сравнить несколько бинарников во фряхе и в Plan9. Вот только я сильно сомневаюсь, что кого-то сколь-нибудь волнует размер какого-нибудь cat, в то время как более крупные софтины (которые, может, и suck, но существуют и используются) шарят больше функций (просто в силу большего количества кода), и на них такого выигрыша статической линковки по размеру явно не будет. К тому же, профит динамической линковки не только в уменьшении дублирования кода — например, для смены аллокатора достаточно подменить malloc() и free() с помощью LD_PRELOAD, ну и прочие подобные радости жизни (ну или подсунуть нужную библиотеку бинарнику с suid и заиметь рутовые привелегии, лол).

Softwayer ★★
()
Ответ на: комментарий от MLP_Fan

они еще и на собственном примере показывают как писать не-говно

but who cares, right?

тут половина сайтика русский язык не знает, а вы про программирование им талдычите, хехе

fank
()
Ответ на: комментарий от Rost

не ну, серьезно, нашли уязвимость в либс - качай заново и переустанавливай всю систему

Кстати считаю что такие пакеты как libc вполне допустимо линковать динамически. Хотя при современном повсеместном 100 Mbit/s интернете и скачать заново хоть сколько не проблема.

Но вот давно интересует вопрос. Например, в openssl (которая как известно решето) найдены новые уязвимости. Её используют веб сервер, веб браузер, ещё много чего. Если просто обновить openssl (т.е. в gentoo `emerge --sync && emerge openssl`) что будет? Обязательно перезапускать все программы которые с ней динамически слинкованы, так? А как получить их список вообще? Обычный пользователь просто обновит пакет openssl и продолжит работать дальше не задумываяь об этом. А в это время все эти конечные нужные ему программы будут использовать засевшую в памяти старую версию решета.

iluha16
()
Ответ на: комментарий от vsemnazlo

любители пооскорбляться и на чистом листе найдут бранное слово

fank
()
Ответ на: комментарий от Softwayer

возврат к статической линковке ибо так поддерживать код чьи полные сырцы имеются проще.

достаточно знать динамику событий - как и зачем появилась динамическая линковка - как возник бонус - обновление в отсутствии сырцов.

на полностью же доступную в сырцах систему эти бонусы не роляют.

а иметь возможность подмены кусков работающей системы на ходу достигаются иными путями.

вообще если посмотреть опят же какаие были практики ранее предпочитали что бы процесс завершался либо свалилался в кору и после перекомпиляции запускали новый экземляр чем имея постояно живой процесс его на ходу бы морфили.

qulinxao ★★☆
()
Ответ на: комментарий от iz_tabakerki

Нафига вообще этот зоопарк с /bin, /sbin, /usr/bin, /usr/sbin?

/bin <-> /sbin как раз имеет вполне практическое значение. Чтобы пользователю по TAB не выдавало то, что ему (пользователю) не нужно. Да и вообще - разделение утилит работы с системой и пользовательских утилит; во всех нормальных системах их разделяют.

А вот /* <-> /usr/* <-> здесь менее очевидно, соглашусь. Хотя, я бы всё равно их разделял по принципу /* - то, что необходимо для загрузки и работы системы, /usr/* - остальное.

P. S. Надеюсь, сомнений по поводу /usr/local/ нет?

Kroz ★★★★★
()
Ответ на: комментарий от qulinxao

А какими путями достигается возможность подмены кусков работающей системы?

Ещё один юзкейс динамической линковки — возможность легко и непринуждённо свичаться между релизной и дебажной версиями библиотеки. Ещё через LD_PRELOAD AFAIK работает fakeroot. Есть ли простые способы получить подобное на системе без динамической линковки?

Softwayer ★★
()
Ответ на: комментарий от Softwayer

с помощью LD_PRELOAD, ну и прочие подобные радости жизни (ну или подсунуть нужную библиотеку бинарнику с suid и заиметь рутовые привелегии, лол).

это где такое возможно?

KOHb-TPOJIJIbJIEP
()

статическая линковка всех программ

половинчатое решение. даешь один жирный блоб!!!

anonymous
()
Ответ на: комментарий от KOHb-TPOJIJIbJIEP

Может, я где-то ошибаюсь, но если у нас есть какой-нибудь бинарник (например, ping), которым владеет root и на котором установлен suid-бит, то при при запуске он будет обладать эффективным UID рута, и если он при этом слинкован динамически, то можно подменить какую-нибудь из динамических библиотек и таким образом выполнить произвольный код с рутовыми привелегиями.

Softwayer ★★
()

идея интересная, попробовать точно нужно будет

umren ★★★★★
()
Ответ на: комментарий от Softwayer

но если у нас есть какой-нибудь бинарник (например, ping), которым владеет root и на котором установлен suid-бит, то при при запуске он будет обладать эффективным UID рута, и если он при этом слинкован динамически, то можно подменить какую-нибудь из динамических библиотек

... которые принадлежат руту, да

и таким образом выполнить произвольный код с рутовыми привелегиями.

Иксперды по безопаснасти в треде, поцаны, нас кулхацкеров спалят сейчас, ховайтесь по мазанкам, горилку и сало берите на два года запас!!!

no-dashi ★★★★★
()
Ответ на: комментарий от KOHb-TPOJIJIbJIEP

это где такое возможно?

Это было возможно когда-то давно-давно, но потом сделали, что LD_PRELOAD не работает если UID!=EUID.

no-dashi ★★★★★
()
Ответ на: комментарий от anonymous

половинчатое решение. даешь один жирный блоб!!!

Кстати, тоже интересный вариант. Для десктопа слишком хардкорно, но для всякой эмбедщины вполне.

hobbit ★★★★★
()
Ответ на: комментарий от anonymous

даешь один жирный блоб!!!

Что-то вроде busybox, например, да?

OldManClone ★★
()
Ответ на: комментарий от no-dashi

Ну ок, похотфиксили фичу :D

Вообще, я это всё к тому, что динамическая линковка предоставляет гибкость, которая часто бывает полезна, хотя может и приводить к уязвимостям. И если в каком-нибудь эмбеддеде оно нафиг не нужно, то на десктопе иметь статическую линковку онли — перебор (хотя у этих фанатов Пайка чувства меры нигде нет — им и высокоуровневый язык без дженериков и контейнеров в стандартной библиотеке, но зато с импортами из гитхаба, в 2016 видится чем-то классным и инновационным).

Softwayer ★★
()
Ответ на: комментарий от iluha16

Её используют веб сервер, веб браузер, ещё много чего.
А как получить их список вообще?

Ну приехали. С кем я тут сижу...

grep ${libname} /proc/[0-9]*/maps

не пробовали например? Это же элементарщина, man 5 proc же.

anonymous
()
Ответ на: комментарий от anonymous

Это же элементарщина, man 5 proc же.

Ага, прям все man pages прочитать надо перед тем как работать за компом... Я конечно как раз сейчас детально изучаю систему от системных вызовов до bash-скриптов, но не всё сразу.

Метод явно же не очевидный для пользователя, существует ли хотя бы один пакетный менеджер который после апдейта хотя бы выдаёт сообщение о том что надо бы перезапустить процессы?

grep ${libname} /proc/[0-9]*/maps

Спасибо, приму на заметку. У меня при libname=openssl выдаётся несколько строчек такого вида:

/proc/783/maps:7f87bd770000-7f87bd96f000 ---p 0006b000 08:04 4327197                    /var/tmp/portage/dev-libs/openssl-1.0.2g-r2/image/usr/lib64/libssl.so.1.0.0 (deleted)

`ps auxw | grep 783` показывает:

root       783  0.0  0.0  34324  1180 ?        S    Mar11   0:00 supervising syslog-ng

Что бы это могло значить? Почему syslog использует shared object из /var/tmp/portage? Это же временный каталог для сборки пакета и он уже удалён.

PS. А вообще крутая вещь этот /proc, можно смотреть где в памяти что находится!!!

iluha16
()
Ответ на: комментарий от iz_tabakerki

Нафига вообще этот зоопарк с /bin, /sbin, /usr/bin, /usr/sbin?

В одном из тредов выяснили что разделение на /bin и /sbin таки необходимо. А куча подкаталогов каталога /usr не нужно, как и /opt, содержимое которых можно перенести в домашний каталог юзера.

anonymous
()
Ответ на: комментарий от knovich

А если юзеров больше одного?

значит с воспитанием у девушки что-то не так

anonymous
()

Разработчики отмечают более высокое быстродействие системы и низкое потребление памяти.

Как же так? Ведь при статической сборке программ такое невозможно!

Xintrea ★★★★★
()
Ответ на: комментарий от pftBest

если использовать -flto то статическая линковка вполне может дасть экономию по памяти.

Поиск по "-flto" ничего не дал. О чем идет речь?

Xintrea ★★★★★
()
Ответ на: комментарий от unt1tled

они отказались от менеджера пакетов в пользу git и статически все слинковали

Всё гораздо интереснее.

Они статически все слинковали, и им теперь вообще не нужен менеджер пакетов.

Xintrea ★★★★★
()
Ответ на: комментарий от knovich

А если юзеров больше одного?

Если файлы доступны больше чем одному юзеру, то в каталоге /home будет какой нибудь /shared files.

anonymous
()
Ответ на: комментарий от Xintrea

О чем идет речь?

Link-time optimization.

anonymous
()
Ответ на: комментарий от FreedomFighter

Борьба с dependency hell не забота дистра, пусть разработчики ПО об этом думают, если они не хотят чтобы пользователи страдали.

Да ты, как я посмотрю, ни разу не делал релиз программы, чтобы избавить пользователя от dependency hell. В Linux статическая линковка - это миф. Невозможно собрать статически программу, чтобы она запускалась на любом дистрибутиве. Работать программа в любом случае не будет: то libc не той подверсии то ядро не той системы.


Проблема может решаться независимо от дистров.

Не может.

Xintrea ★★★★★
()
Ответ на: комментарий от Xintrea

Они статически все слинковали

Они ничего не линковали, оставили это пользователю.

им теперь вообще не нужен менеджер пакетов

Потому что пакетов нет.

anonymous
()
Ответ на: комментарий от Xintrea

Да ты, как я посмотрю, ни разу не делал релиз программы

Специалист по релизам в треде! Все в билд-сервера!

то libc не той подверсии

Если линковать статически, она в бинарнике.

ядро не той системы

WAT?

anonymous
()
Ответ на: комментарий от matumba

Вот есть какой-нть браузер, он юзает юникодную либу, в которой нашли уязвимость. Вместо переустановки 50 мегов всей браузерной фигни (и вообще ВСЕГО в системе, что затрагивает юникод), достаточно обновить меговую библиотеку юникода.

Вот есть какой-нть браузер, он юзает юникодную либу, в которой впилили регрессию. Помимо этого браузера либу пользует половина системы. Достаточно было обновить библиотеку, и Линупс встал враскоряку:

NPM и left-pad: мы разучились программировать?

Xintrea ★★★★★
()
Ответ на: комментарий от Xintrea

Потому что зависимостей нет.

Обожемой, ты читать умеешь?

я>Они ничего не линковали, оставили это пользователю.

Как ты скомпилируешь прогу из сырцов без зависимостей? Или думаешь, тебе их Великий Дух Статической Линковки притащит?

anonymous
()
Ответ на: комментарий от anonymous

Специалист по релизам в треде! Все в билд-сервера!

Вот об том и речь. В то время, когда виндовые программеры делают на рабочей машине релиз, и знают что их код будет работать в виндах, сообщество породило прослойку майнтейнеров, которые городят билд-сервера, на которых собирают одну и ту же программу 50 раз под каждую версию Linux. А если пользователь использует что-то не из 50 версий, то он молча отсосет.


то libc не той подверсии

Если линковать статически, она в бинарнике.

Без разницы что там бинарнике, но когда при запуске статического бинарника видишь

libc.so.6: version `GLIBC_2.14' not found


ты понимаешь, что не все так радужно.

Xintrea ★★★★★
()
Ответ на: комментарий от anonymous

Как ты скомпилируешь прогу из сырцов без зависимостей?

Сырцы? Зависимости? Что это?

Разве нельзя просто запустить программу?

Xintrea ★★★★★
()
Ответ на: комментарий от Xintrea

В то время, когда виндовые программеры делают на рабочей машине релиз

Сидит такой виндовый программист, попивает кофе, а у него на рабочей машине релиз собирается, ога.

когда при запуске статического бинарника видишь

libc.so.6

ты понимаешь, что он не статический.

anonymous
()

статическая линковка всех программ

Сколько сотен гигабайт будет занимать рабочая система?

игнорирование FHS, предлагается иная иерархия директорий;
замена coreutils и util-linux на sbase и ubase собственной разработки;
использование musl в качества системной libc;
отсутствие systemd, используется sinit (suckless init).

Да здравствует NIH!

Разработчики отмечают более высокое быстродействие системы и низкое потребление памяти.

Ох лол, ещё остались калькуляторы, на которых тормозит GNU?

robus ★★★★★
()
Ответ на: комментарий от Xintrea

Разве нельзя просто запустить программу?

Речь о дистрибутиве из новости, а не о твоих хотелках.

anonymous
()
Ответ на: комментарий от Xintrea

ты понимаешь, что не все так радужно

у кого-то с руками. У меня есть бинари статически слинкованные с uClibc и libusb и работают они на любой системе.

anonymous
()
Ответ на: комментарий от vostrik

Мало кто верил, что линукс приживётся на десктопах. Говорили точно так же: зачем и кому это нужно?

А он что, прижился что ли? Как был 1% так и остался.

Xintrea ★★★★★
()
Ответ на: комментарий от Xintrea

Потому что зависимостей нет.

Потому что зависимости не нужны, кроме огромных монструозных приложений.

anonymous
()
Ответ на: комментарий от anonymous

У меня есть бинари статически слинкованные с uClibc и libusb и работают они на любой системе.

Я бы не был столь категоричен. Ты уверен, что они запустятся на линупсе, ну скажем с ядром 2.4?

Xintrea ★★★★★
()
Ответ на: комментарий от Xintrea

сообщество породило прослойку майнтейнеров, которые городят билд-сервера, на которых собирают одну и ту же программу 50 раз под каждую версию Linux. А если пользователь использует что-то не из 50 версий, то он молча отсосет

Потому и нужен единый формат пакетов для всех дистрибутивов, исключая тех, которые ставят проги из сырцов.

Зоопарк всяких yum, dnf, apt, pacman уже надоел.

anonymous
()
Ответ на: комментарий от Xintrea

Ты уверен, что они запустятся на линупсе, ну скажем с ядром 2.4?

Ты уверен, что крузис запустится, ну скажем, на шиндошс 95?

anonymous
()
Ответ на: комментарий от Xintrea

Ты уверен, что они запустятся на линупсе, ну скажем с ядром 2.4?

2.4 - это для говноедов, мои бинари не для таких.

anonymous
()
Ответ на: комментарий от anonymous

2.4 - это для говноедов, мои бинари не для таких.

Но ты же сам сказал: «и работают они на любой системе». Получается, что ты все это время лгал.

Xintrea ★★★★★
()
Ответ на: комментарий от Xintrea

Но ты же сам сказал: «и работают они на любой системе». Получается, что ты все это время лгал.

Ну ты дебил, на DOS еще работать не будут и на не x86

https://kernel.org

longterm: 2.6.32.71 [EOL]

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.