Какие способы автоматизации сборки инструментов в Ubuntu существуют?

Здравствуйте! <br/> <br/> Периодически возникает необходимость решить проблему с недоступностью инструмента в Linux, что требует выполнения команды "git clone... && make". <br/> Обычно такой процесс заканчивается многочисленными сообщениями вроде: <br/> <pre><code class="bash">No python interpreter was found: disables Python support - please install python-devel/python-dev</code></pre> <br/> <br/> ... и подобными. <br/> <br/> (В данный момент я пытаюсь собрать perf под WSL2 и уже выполнил несколько команд <blockquote>sudo apt install bla-bla-bla-dev</blockquote> ) <br/> <br/> Вопрос: существует ли инструмент, который может автоматически отслеживать необходимые библиотеки для сборки и устанавливать их? Или же я иду не в том направлении и сборка вручную не обязательна?
  • 8 сентября 2024 г. 13:03
Ответы на вопрос 2
Здравствуйте!

Сборка инструментов в Linux может быть действительно болезненной задачей, особенно если у вас нет всех необходимых зависимостей. Однако, есть несколько подходов и инструментов, которые могут помочь автоматизировать этот процесс.

### 1. **Использование пакетных менеджеров**

В первую очередь, если инструмент доступен в репозиториях вашего дистрибутива, рекомендуется использовать APT (или другой подходящий пакетный менеджер). Например, в вашем случае:

```bash
sudo apt install <имя_пакета>
```

### 2. **Сборка из исходников с помощью инструментов**

Есть инструменты и скрипты, которые помогают упростить сборку из исходников:

- **CMake**: Если проект использует CMake, зачастую он автоматически разрешает зависимости, если они указаны в `CMakeLists.txt`. Перед запуском сборки просто выполните:

    ```bash
    cmake .
    make
    ```

- **Autotools**: Если проект использует Autotools, сценарий `./configure` также может проверять зависимости.

### 3. **Использование `apt-get build-dep`**

Если у вас есть доступ к исходному коду и `debian/control` файл, можно написать:

```bash
sudo apt-get build-dep <имя_пакета>
```

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

### 4. **Docker и контейнеризация**

Вы можете создать Docker-контейнер с нужными зависимостями, что упрощает процесс сборки и гарантирует, что у вас будет повторяемая среда:

```Dockerfile
FROM ubuntu:latest

RUN apt-get update && apt-get install -y \
    build-essential \
    python3-dev \
    другие_зависимости
    download_repo.sh
```

### 5. **Скрипты автоматизации**

Вы можете написать скрипт на Bash или другом языке, который будет:

1. Клонировать репозиторий.
2. Проверять наличие необходимых зависимостей и устанавливать их.
3. Выполнять сборку.

Вот пример простого скрипта на Bash:

```bash
#!/bin/bash

# Клонирование репозитория
git clone repo_url
cd repo_directory

# Установка необходимых пакетов (можно расширить список)
sudo apt install -y python3-dev build-essential

# Запуск сборки
make
```

### 6. **Использование систем управления зависимостями**

Существуют также системы вроде `vcpkg`, `Conan` или `Hunter` для управления зависимостями C/C++-проектов, которые могут помочь в автоматизации процесса.

### Итог

В зависимости от вашего проекта и его структуры, вы можете выбрать наиболее подходящий способ автоматизации. В некоторых случаях проще использовать предустановленные пакеты из репозиториев, если они существуют. В других - автоматизировать процесс через скрипты или контейнеризацию.
Есть такая тулза. Во FreeBSD это называется порты, в gentoo/calculate - портеджи (portage). Это набор инструкций, который описывает, как собрать ту или иную вещь с сырцов - с учетом нюансов размещения конфигов, зависимостей и тети Моти. Работает как из пушки :) 

Одна проблема - идеология бубунты, как пакетного дистриба - полностью отрицает подобные вещи. Идеология любого пакетного дистриба "мы майнтайнеры, мы боги, вы никто, что и как мы собрали - то и будете вкушать". И такая идеология устраивает большинство (а меньшинство, которое она не устраивает - давно освоило дистрибы, где это работает - гента/calculate, арч (в нем вроде бы тоже есть, но не проверено). Там правда порог входа выше, чем в бубунте, например просто потому что то, что в бубунте делается автоматом при установке пакета, зачастую нужно делать самому - и самое главное - понимать что и зачем ты делаешь (а с этим у нынешних linux-чайников ничуть не лучше чем у их собратьев в винде)
Похожие вопросы