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

430
Melodic

Кто-нибудь сделал что-нибудь (даже просто скрипт) для автоматической загрузки, распаковки и создания проектов из SourceForge в Linux? Как я мог это сделать?

Я использую Ubuntu 12.10, в частности.

1

3 ответа на вопрос

2
terdon

Стандартный рабочий процесс для установки из исходного кода - это загрузить пакет, распаковать его, запустить включенный configureскрипт, скомпилировать и установить. Таким образом, для тех случаев, когда пакет, который вы хотите установить, следует стандартному методу, вы можете сделать это:

#!/usr/bin/env bash  ## Make a new empty directory ($$ is the script's PID) echo "Creating directory $$" mkdir $$ cd $$ ## get the file name  tar=$(basename "$1" | grep -Po "[^?]*(?=[?$])")  ## Download the file wget $1 --output-document $tar ## Check if it is a gzipped or bzipped tar  file=$(find . -type f); istgz=$(echo $file | grep "tar\.gz\|tgz") istbz=$(echo $file | grep "tar\.bz\|tbz") ok=1  ## Extract the archive if [ $istbz ]; then tar xjf $file; ok=$? ## $? is the last command's exit status elif [ $istgz ]; then tar xzf $file ok=$? ## If things did not go OK, complain else echo "Something went wrong, perhaps the filetype is not recognized" exit 1; fi ## If things went OK, install if [ $ok = 0 ]; then ## Look for a configure script and cd into wherever it is conf=$(find . -name configure -executable) if [ $conf ]; then dir=$(dirname $conf); cd $dir; ## run the configure script, make and install ./configure && make && sudo make install && echo "Succesfully installed, installation directory was $$" else echo "No configure script found, exiting." fi fi 

Сохраните этот скрипт как, например, sforge.shсделайте его исполняемым ( chmod a+x sforge.sh) и запустите его с URL-адресом пакета sourceforge, который вы хотите установить. Убедитесь, что вы используете прямую ссылку и удалите все ссылки на зеркала. В этом примере я загружаю conky, когда я нажимаю на ссылку «прямая загрузка» из sourceforge, URL

http://downloads.sourceforge.net/project/conky/conky/1.9.0/conky-1.9.0.tar.bz2 ? r = http% 3A% 2F% 2Fsourceforge.net% 2Fprojects% 2Fconky% 2F% 3Fsource% 3Ddlp & TS = 1367161220 & use_mirror = NetCologne

Я хочу только первую часть (жирным шрифтом) или имя файла будет странным, поэтому я буду использовать:

sforge.sh http://downloads.sourceforge.net/project/conky/conky/1.9.0/conky-1.9.0.tar.bz2 

ВАЖНАЯ ЗАМЕТКА

Этот скрипт будет работать только для тех пакетов, которые следуют нормальному макету. Это должен быть файл bz2или gzipфайл, и он ожидает configureсценарий и Makefile. Многие пакеты не будут иметь их, и скрипт не будет работать. Это должно быть хорошо для многих, если не для большинства случаев.

Это в соответствии с тем, что я хотел. В ней были некоторые ошибки из-за того, что `find 'получал слишком много вещей. Я хотел, чтобы это можно было запускать в моем домашнем каталоге, поэтому сначала немного его подправлю. Melodic 11 лет назад 0
Ах да, извините, я забыл упомянуть, что это действительно должно быть запущено в пустой директории, созданной для этой цели. Помните, что некоторые пакеты будут извлекать все в текущем каталоге, в то время как другие создадут новый. Расширение любого архива в вашем $ HOME, как правило, плохая идея, так как файлы могут оказаться повсюду. terdon 11 лет назад 1
Ну, я уже заставил его использовать весь URL-адрес прямой ссылки, заставив wget сохранить в `basename` минус '?' и все, что прошло. И я просто работал с использованием отфильтрованного tar -tf, чтобы автоматически получать извлеченные папки верхнего уровня. Melodic 11 лет назад 0
@ Мелодия осторожна, как я уже сказал, это будет зависеть от того, создаст ли tar новую папку или нет. Я действительно рекомендую вам всегда делать это в пустой директории согласно обновленному сценарию. terdon 11 лет назад 1
М-м, ладно. Это кажется проще и безопаснее, правда. Вы можете отредактировать его, чтобы включить этот фильтр? `tar = $ (базовое имя" $ 1 "| grep -Po" [^?] * (? = [? $]) ")` `wget $ 1 --output-document $ tar` Melodic 11 лет назад 0
@Melodic сделано, кстати, умное использование `basename`. terdon 11 лет назад 1
Добавлен специальный ярлык клавиатуры в Ubuntu для вызова этого с буфером обмена с помощью xsel: `gnome-terminal -e" bash -c '/sforge.sh $ (xsel -o -b) '"` Он также работает с `$ (xclip -o -selection c)` вместо xsel. Теперь я просто щелкаю правой кнопкой мыши, копирую ссылку в буфер обмена, и нажмите Ctrl + Super + D и все остальное для меня сделано! Melodic 11 лет назад 1
1
dawud

Есть несколько инструментов, которые могут помочь с этим: fpm Джордана Сисселя и fnd-кулинария Бернда Алерса . Первый - возможность простого создания пакетов из исходного кода, второй - способ автоматизации этого рабочего процесса.

Я не буду вдаваться в подробности, так как проекты очень хорошо документированы и есть рабочие рецепты для различных типов кода.

0
thaolt

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

Кроме того, вы можете попытаться использовать ArchLinux, его менеджер пакетов AUR функционирует аналогичным образом, например, получение архивов исходного кода, установка зависимостей, компиляция и установка. Если вы хотите создать такой пакет, прочитайте Руководство пользователя AUR .