LINUX.ORG.RU

Как быстро находить исходники от любого исполняемого файла в составе дистра?


0

1

Вот в ubuntu есть например /usr/bin/service, которая сервисы запускает/останавливает. То есть, демоны. Ну всякие там mysql, nginx например...

И вот, например, я такой прошаренный, у меня умение читать чужой код 80lvl и захотел посмотреть как работает service. Глупо же на форуме спрашивать типа «расскажите алгоритм работы», да? Ну вот. А чтобы найти эти исходники, мне надо знать особенности производства дистрибутива. Что там откуда собирается, в какие пакеты пакуется. То есть надо знать:
1. Частью какой сущности (пакета, базового набора и т.п.) является указанный бинарь.
2. Знать как люди из ubuntu собирают эту сущность, откуда берут исходники для каждой части этой сущности.
3. Пойти туда, например на веб-страницу какого-нибудь проекта и сграбить там git-ом эти исходники.

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

Перемещено Pinkbyte из development

★☆

Последнее исправление: kiverattes (всего исправлений: 2)

Ну в генте можно сначала узнать к какому пакету принадлежит бинарь, а потом скачать с помощью portage пакет с исходниками в текущую папку, именно те исходники с которых все собиралось

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
thesis@bububu:~$ dpkg --search `which nginx`
nginx-full: /usr/sbin/nginx

Вот бы такой сервис

packages.debian.orgubuntu.com И, конечно же, http://pkgs.org

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

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 2)

apt-get source ITT

anonymous
()

dpkg -S /path/to/binary

потом по найденому пакету:

apt-get source package_name

И все - исходники пакета у тебя на машине, в директории, на которую укажет pwd

eagleivg ★★★★★
()
Последнее исправление: eagleivg (всего исправлений: 1)
Ответ на: комментарий от nerdogeek

Среди юзеров LFS тоже много быдла?

откуда я знаю? Может кто-то и делает дистрибутивы на основе LFS и вырезает из них сырцы. Даже наверняка. Роутеры например. Т.е. такие дистры, которые просто используются. Как прошивка в роутере или убунта.

drBatty ★★
()
equery b `which $your_exec_file`

Это Gentoo

iVS ★★★★★
()
apt-get source $(dpkg -S $(which service) | cut -d : -f 1)
lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

такие дистры, которые просто используются

будто что-то плохое

ничего плохого. Пока в исходники не полезешь.

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

Пока в исходники не полезешь.

в той же бубунте это делается банальным apt-get source, только необходимость в этом возникает редко

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

в той же бубунте это делается банальным apt-get source, только необходимость в этом возникает редко

у а если не редко? А если ты не только хочешь посмотреть, но и свой патч наложить и пересобрать? Я понимаю, можно и в убунте, но вот в слаке - проще.

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

они потом /source/ вырезают нафиг

Зачем заведомо ложную информацию вещаешь? Ты не знаешь, значит этого нет?

i-rinat ★★★★★
()
Ответ на: комментарий от drBatty

у а если не редко?

Ну у меня не редко

А если ты не только хочешь посмотреть, но и свой патч наложить и пересобрать? Я понимаю, можно и в убунте, но вот в слаке - проще.

apt-get source pkg-name
apt-get build-dep pkg-name
cd pkg-name-version
vi debian/patches/series
vi debian/patches/003-patch-name.patch
dch -i
dpkg-buildpackage

Что, в слаке проще?

i-rinat ★★★★★
()

man portage, пионэр

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

Вот гентой я пользуюсь, настало время понять её! )

kiverattes ★☆
() автор топика
apt-file seach путь_к_файлу
# выводит имена пакетов, предоставляющих файл

apt-get source имя_пакета
# скачивает исходники

Утилита apt-file в дефолтной системе не установлена.

quiet_readonly ★★★★
()
Последнее исправление: quiet_readonly (всего исправлений: 1)

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

У тебя Web 2.0 головного мозга.

anonymous
()

Вот бы такой сервис, куда вбиваешь имя дистрибутива, путь до бинаря

Ну дак напиши :-) Только ведь под именем бинаря sendmail может скрываться и postfix и sendmail.

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

А по зависимостям то зачем? У тогда вобще все исходники подряд смотреть :-)

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

Зачем уточнять, что головного? А как он может быть не головного мозга? Опишите вебдваноль стопы, например.

kiverattes ★☆
() автор топика
Ответ на: комментарий от i-rinat

они потом /source/ вырезают нафиг

Зачем заведомо ложную информацию вещаешь? Ты не знаешь, значит этого нет?

а есть? а где пруфлинк?

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

а есть? а где пруфлинк?

Ты в своём репертуаре. Не знаешь предмет обсуждения, а делаешь громкие заявления.

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

Ты в своём репертуаре. Не знаешь предмет обсуждения, а делаешь громкие заявления.

я не нашёл исходников в убунте. Они конечно где-то в интернетах есть, но в самой убунте их нет. И да, что такое *dev пакеты в убунте, и зачем они нужны? По какой причине нужно ставить *dev пакеты в убунте, а в слаке — не нужно?

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

и, да, service не нужен, есть нативный update-rc.d

Во-первых, ты путаешь update-rc.d и invoke-rc.d. Во-вторых, service нужен, а использовать invoke-rc.d напрямую плохо, потому что оно запускает сервис в текущем окружении, а service оставляет лишь минимум переменных.

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

Ты же не будешь смотреть исходники с роутера или кофеварки? Ты возьмёшь компьютер и будешь смотреть исходники оттуда.

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

Ты поехавший. Ты бы читал сначала, о чём речь идёт. Пресловутые пакеты *-dev - это как раз пакеты с исходниками. А организовано оно так, чтобы ты в любой момент мог, удовлетворив своё любопытство, взять, удалить пакет и не мучаться с ручной чисткой.

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

Пресловутые пакеты *-dev - это как раз пакеты с исходниками. А организовано оно так, чтобы ты в любой момент мог, удовлетворив своё любопытство, взять, удалить пакет и не мучаться с ручной чисткой.

Неверно. Dev - это только заголовочные пакеты, исходников в них нет. Чтобы получить исходники, нужно подключить src репо

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

Ты же не будешь смотреть исходники с роутера или кофеварки? Ты возьмёшь компьютер и будешь смотреть исходники оттуда.

ну я кагбэ о том и говорил — убунта ≠ линукс, к ней ещё компьютер нужен, если разработкой занимаешься.

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

Ты поехавший. Ты бы читал сначала, о чём речь идёт. Пресловутые пакеты *-dev - это как раз пакеты с исходниками. А организовано оно так, чтобы ты в любой момент мог, удовлетворив своё любопытство, взять, удалить пакет и не мучаться с ручной чисткой.

я как раз об этом и говорю. А в слаке они постоянно в дистре, и никто их и не думает выпиливать.

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

Посмотри deb-src репозитории.

ох… Да знаю я, что они есть, и их _можно_ посмотреть. Где я обратное утверждал-то?

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

Неверно. Dev - это только заголовочные пакеты, исходников в них нет.

ИМХО *.h файлы — тоже исходники. В принципе их обычно достаточно для написания своего кода с чужими библиотеками. Кстати они есть и в Windows™, после установки MSVC™.

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

Ты и правда поехавший. Сколько я видел встраиваемых Линуксов - везде не то, что исходники - man'ы выпилены для уменьшения объёма. А ты несёшь чушь про какую-то Убунту.

И чтобы не плодить темы - Слака эталон из Палаты Мер и Весов что-ли? Там сразу в дистре лежат рядом и исходники, и бинарники? А если мне не нужны исходники? Суть *-dev пакетов в том и состоит, что если тебе не нужны исходники - ты их не ставишь. Всё просто и понятно. Или у тебя тысячи свободного времени и тебе охота поспорить?

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

Ой-ой-ой, я ошибся, действительно, без «src» секции исходники не получить. Каюсь, каюсь, был неправ.

anonymous
()

пользуйся

tar -xf /mnt/distfiles/package_you_need -C ~/tmp

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

Сколько я видел встраиваемых Линуксов - везде не то, что исходники - man'ы выпилены для уменьшения объёма. А ты несёшь чушь про какую-то Убунту.

про убунту с первого поста речь идёт. А про встраиваемые - ты начал.

Там сразу в дистре лежат рядом и исходники, и бинарники?

да. пруф http://mirror.yandex.ru/slackware/slackware64-current/source/

А если мне не нужны исходники?

тогда слака — не для тебя. Хотя если ты слаку решил куда-то встроить, то можно и удалить оттуда сырцы. Дистрибутив будет вдвое меньше. (точнее сейчас 4CD из 6и)

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

ктож спорит? Просто в убунте обычный юзкейс: НЕ ставить сырцы, а в слаке — ставить. Естественно, можно и наоборот в обоих случаях.

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

Во-первых, ты путаешь update-rc.d и invoke-rc.d.

да

использовать invoke-rc.d напрямую плохо, потому что оно запускает сервис в текущем окружении, а service оставляет лишь минимум переменных.

не знал, а почему тогда он по дефолту не идет?

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

Дистрибутив будет вдвое меньше. (точнее сейчас 4CD из 6и)

Вот когда в слаке будет столько: http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-cd/, тогда будет смысл сравнивать. Разные масштабы — разные подходы. И это, заметь, только диски со скомпилированным ПО. Исходники отдельно.

ктож спорит? Просто в убунте обычный юзкейс: НЕ ставить сырцы, а в слаке — ставить. Естественно, можно и наоборот в обоих случаях.

Ну раскажи свой юзкейс, в котором тебе нужны сырцы всего ПО, которое ты ставишь.

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

Вот когда в слаке будет столько

вот столько никогда не будет. С подходом Патрика такой масштаб невозможен, и это — хорошо. Есть sbopkg, есть http://slackbuilds.org/ там сравнимое число программ. Как-то считали, примерно как в Gentoo. Лично я не вижу никакого смысла тащить эти программы в дистрибутив.

Ну раскажи свой юзкейс, в котором тебе нужны сырцы всего ПО, которое ты ставишь.

ты сам сказал, что всё ПО вообще - не нужно. Ставят только базовую систему, и ещё несколько программ. Занимают сырцы искаробочной слаки 3.2Gb (на сегодня). Ну плюс ещё несколько нужных лично мне программ (штук 20).

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

ктож спорит? Просто в убунте обычный юзкейс: НЕ ставить сырцы, а в слаке — ставить. Естественно, можно и наоборот в обоих случаях.

Ну раскажи свой юзкейс, в котором тебе нужны сырцы всего ПО, которое ты ставишь.

Занимают сырцы искаробочной слаки 3.2Gb (на сегодня). Ну плюс ещё несколько нужных лично мне программ (штук 20).

Ты русский язык понимаешь? Ты заявил, что в слаке поведение по умолчанию — ставить сорцы. Я спросил тебя, зачем тебе нужны сырцы ПО? Что ты с ними делаешь? Расскажи.

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

Ты русский язык понимаешь? Ты заявил, что в слаке поведение по умолчанию — ставить сорцы. Я спросил тебя, зачем тебе нужны сырцы ПО? Что ты с ними делаешь? Расскажи.

для начала, в слаке вообще нет понятия «ставить сырцы». Они просто есть. Это часть дистрибутива. И сами сырцы, и скрипты для их сборки, которые собирают их в точности так же, как у Патрика.

Нужны они для того, что-бы их смотреть, а при необходимости изменять и собирать самостоятельно, а не упрашивать Патрика что-то туда вставить/исправить (особенно, если это «что-то» никому, кроме меня не нужно). Конечно, это везде так, но в слаке это _обычный_ юзкейс, а в других местах — дополнительная опция. Вот и вся разница.

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

что-бы их смотреть, а при необходимости изменять и собирать самостоятельно

Гы-гы, ты смешной. В каком ты идеальном мире живёшь. Наверное, в код ни разу не смотрел.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от i-rinat

Наверное, в код ни разу не смотрел.

не поверишь — смотрю иногда. И софт крутится с моими костылями внутри.

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