Create a repository database just for these packages
This can be done on either ‘Al’ or ‘Bob’ using the repo-add command which comes with pacman (from version 3?); first, change to the /path/to/nvidia directory where the packages were downloaded, then create database file called nvidia.db.tar.gz:
$ cd /path/to/nvidia # repo-add nvidia.db.tar.gz *.pkg.tar.xz
Download package zip/tar.gz file without installing
I am looking for a function, that downloads an r package zip/tar.gz file (given its name) without installing it.
Basically install.packages(), but I want to keep the zip files at a given directory.
I did not find a way to build the URL myself given the package Name, but there seems to be one, since install.packages() works that way.
Generate a list of packages to download
This can be done on any Arch Linux machine which has up-to-date repository data bases (see above for links to database files); to create the list of links to the required packages, use:
# pacman -Sp nvidia nvidia-utils xf86-video-nouveau > /path/to/nvidia.list
The file nvidia.list will contain links to the listed packages and any others which they depend on which are not already installed on ‘Al’. Unless you have cleared your cache the packages you have installed will be in your cache location.
How do i install a .tar.gz (or .tar.bz2) file?
This is only for .tar.* files which have the code pre-compiled but packed into a tar file.
Okay, this is a fairly challenging task for a beginner, but just follow my instructions, and it should be fine.
First off, download the .tar.* file, and save it. Don’t open it. (In these examples, I’ll be installing the Dropbox Beta build, because I was going to install it anyway, so I figured that I might as well document the installation.)
After you’ve downloaded your file, (assuming that you saved it to Downloads,) type the following:
cd Downloads
sudo cp dropbox-lnx.x86_64-1.5.36.tar.gz /opt/NOTE: use the name of whatever file you downloaded. (e.g., for the Firefox Nightly 19.0a1 64-bit build, you would type sudo cp firefox-19.0a1.en-US.linux-x86_64.tar.bz2 /opt/)
Now, change to the /opt/ directory, extract the program, and remove the old file:
cd /opt/
sudo tar -xvf dropbox-lnx.x86_64-1.5.36.tar.gz
sudo rm -rf dropbox-lnx.x86_64-1.5.36.tar.gz(again, use the name of the downloaded file. Don’t forget the extension.)
Okay, check to see what the extracted folder is called:
ls -ayou’ll get something like this:
james@james-OptiPlex-GX620:/opt$ ls -a
. .. .dropbox-dist
james@james-OptiPlex-GX620:/opt$Okay, in our example, we installed Dropbox, and the only folder there is called .dropbox-dist. That’s probably the folder we want, so plug that in to the next step (add a / to the end, since it’s a folder.):
sudo chmod 777 .dropbox-dist/Okay, it’s now marked as executable, so it’s time to create a symbolic link (this is what allows you to run it from the Terminal):
sudo ln -s /opt/.dropbox-dist/ /usr/bin/dropboxNOTE: this is sudo ln -s /opt/{FOLDER_NAME}/ /usr/bin/{PROGRAM_NAME}!!! Be sure that {PROGRAM_NAME} is replaced with the simplified, lower-case version of the program’s name (e.g., for Firefox Nightly, type firefox-nightly; for the uTorrent server, type utserver. Whatever you type here will be the command that you use whenever running the program from the Terminal. Think of /usr/bin/ as like the PATH variable on Windows systems.)
Okay, you’re done. The program is now installed and runnable from the Terminal.
What’s this? You say you want to run it from the launcher, AND you want it to have an icon? No problem!
This part is fairly simple:
gksu gedit /usr/share/applications/dropbox.desktopNOTE: If you’re installing OVER a previous installation, use ls -a /usr/share/applications and search for pre-existing .desktop file. Plug that file’s name in instead.
Now, here’s where you create the icon. Here’s good template; edit it appropriately.
[Desktop Entry]
Version=1.0
Name=Firefox Nightly
Comment=Browse the World Wide Web
GenericName=Web Browser
Keywords=Internet;WWW;Browser;Web;Explorer
Exec=firefox-nightly
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=/opt/firefox/icons/mozicon128.png
Categories=GNOME;GTK;Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml xml;application/xml;application/rss xml;application/rdf xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;x-scheme-handler/chrome;video/webm;application/x-xpinstall;
StartupNotify=true
Actions=NewWindow;
[Desktop Action NewWindow]
Name=Open a New Window
Exec=firefox-nightly -new-window
OnlyShowIn=Unity;You may want to leave off the MimeType option completely. That could be very bad if you didn’t.
Now, click «Save», close it out, and you’re in business!
Install the packages
Finally install the packages:
# pacman -S nvidia nvidia-utils xf86-video nouveau
Links and sources
Compiled from the forums, with thanks to Heller_Barbe and byte
Listing tar.gz file #
To list the content of a tar.gz file, use the —list (-t) option:
tar -tf archive.tar.gzThe output will look something like this:
file1file2file3
If you add the —verbose (-v) option, tar will print more information, such as owner, file size, timestamp ..etc:
tar -tvf archive.tar.gzLocal repository
Scenario: you have two Arch Linux machines, ‘Al’ (with internet connection) and ‘Bob’ (without internet connection), and you need to install some NVIDIA packages and their dependencies on ‘Bob’. In this example, the wanted packages are nvidia, nvidia-utils, and xf86-video-nouveau, but you want to use a dedicated directory instead of /var/cache/pacman/pkg/ and a dedicated repository called nvidia (instead of the usual core, extra etc…)
Offline cache
You can stuff things into /var/lib/pacman/sync and /var/cache/pacman/pkg to make pacman think it has everything it needs to do searches, updates, and installs. This method is based on byte’s post from this thread.
Download the package databases on a computer with internet access and transfer them to your computer. If needed, change MIRROR to any mirror from the mirror status list.
Restoring online sources
Should Bob ever be put online we can restore access to the online sources by replacing /etc/pacman.conf with the previously created /etc/pacman.conf.old.
Transfer the packages
Now all the packages have been downloaded, you do not need ‘Al’ anymore. Copy the contents of /path/to/nvidia to a the temporary NVIDIA packages cache directory on ‘Bob’. In this example, this folder is called /home/me/nvidia:
$ cp /path/to/nvidia/* /home/me/nvidia
Next, pacman must be made aware of this new repository of packages. First copy your current pacman.conf:
# cp /etc/pacman.conf /etc/pacman.conf.old
Now in /etc/pacman.conf make sure that your SigLevel is set to Never as your repository will not provide signatures
SigLevel = Never
Бинарные пакеты
Бинарные пакеты почти аналогичны пакетам Debian. Разница следующая:
- Расширении
.ipkвместо.deb. - Упаковывается всё с помощью `tar` и сжимается с помощью
gzip, это же справедливо для вложенных архивов. В Debian архив верхнего уровня упаковывается более примитивнымar, а вложенные архивы чаще всего имеют расширение.tar.xz, инструменты используются соответствующие.
Если вы поменяете расширение пакета для OpenWrt на
.tar.gz
и распакуете, то обнаружите внутри два архива и один текстовый файл. Файл называется
debian-version
, в нём содержится версия формата бинарного файла и она нам не очень интересна, в современных системах эта версия всегда равняется
2.0
Архив data.tar.gz содержит исполняемые файлы, файлы конфигурации и всё, ради чего устанавливается пакет. Если распаковать его в корень ФС, вы получите все ожидаемые файлы на нужных местах, в /usr/bin/, /etc/ и так далее.
А в control.tar.gz находятся вспомогательные файлы для пакетного менеджера. Это скрипты, которые должны выполняться до или после установки и удаления (preinst, postinst, prerm, postrm), сведения о файлах, являющихся конфигурационными, и метаинформация о пакете, во многом повторяющая ту, что содержится в Packages.
Как мне установить файл .tar.gz (или .tar.bz2)?
Это только для .tar.*файлов, код которых предварительно скомпилирован, но упакован в файл tar.
Хорошо, это довольно сложная задача для новичка, но просто следуйте моим инструкциям, и все должно быть в порядке.
Прежде всего, скачайте .tar.*файл и сохраните его. Не открывай это. (В этих примерах я буду устанавливать бета-сборку Dropbox , потому что я все равно собирался ее установить, поэтому я решил, что я также могу задокументировать установку.)
После того, как вы загрузили файл, (при условии , что вы сохранили его Downloads,) введите следующую команду :
cd Downloads
sudo cp dropbox-lnx.x86_64-1.5.36.tar.gz /opt/ПРИМЕЧАНИЕ: используйте имя любого файла, который вы скачали. (например, для 64-битной сборки Firefox Nightly 19.0a1 вы должны набрать sudo cp firefox-19.0a1.en-US.linux-x86_64.tar.bz2 /opt/)
Теперь перейдите в /opt/каталог, распакуйте программу и удалите старый файл:
cd /opt/
sudo tar -xvf dropbox-lnx.x86_64-1.5.36.tar.gz
sudo rm -rf dropbox-lnx.x86_64-1.5.36.tar.gz(снова используйте имя загруженного файла. Не забудьте расширение.)
Хорошо, проверьте, как называется извлеченная папка:
ls -aвы получите что-то вроде этого:
james@james-OptiPlex-GX620:/opt$ ls -a
. .. .dropbox-dist
james@james-OptiPlex-GX620:/opt$Хорошо, в нашем примере мы установили Dropbox, и единственная папка там называется .dropbox-dist. Это, вероятно, папка, которую мы хотим, поэтому подключите ее к следующему шагу (добавьте /в конец, так как это папка.):
sudo chmod 777 .dropbox-dist/Хорошо, теперь он помечен как исполняемый, поэтому пришло время создать символическую ссылку (это то, что позволяет запустить его из Терминала):
sudo ln -s /opt/.dropbox-dist/ /usr/bin/dropboxПРИМЕЧАНИЕ: это sudo ln -s /opt/{FOLDER_NAME}/ /usr/bin/{PROGRAM_NAME}!!! Убедитесь, что {PROGRAM_NAME}он заменен упрощенной строчной версией названия программы (например, для Firefox Nightly, введите firefox-nightly; для сервера uTorrent введите utserver. Все, что вы здесь введете, будет командой, которую вы будете использовать при запуске программы из Терминал. Думайте /usr/bin/как переменная PATH в системах Windows.)
Ладно, все готово. Программа теперь установлена и запущена из Терминала.
Что это? Вы говорите, что хотите запустить его из программы запуска, и хотите, чтобы на нем была иконка? Нет проблем!
Эта часть довольно проста:
gksu gedit /usr/share/applications/dropbox.desktopПРИМЕЧАНИЕ. Если вы устанавливаете OVER для предыдущей установки, используйте ls -a /usr/share/applicationsи ищите уже существующий файл .desktop. Вместо этого вставьте имя этого файла.
Теперь вот где вы создаете иконку. Вот хороший шаблон; отредактируйте его соответствующим образом.
[Desktop Entry]
Version=1.0
Name=Firefox Nightly
Comment=Browse the World Wide Web
GenericName=Web Browser
Keywords=Internet;WWW;Browser;Web;Explorer
Exec=firefox-nightly
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=/opt/firefox/icons/mozicon128.png
Categories=GNOME;GTK;Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml xml;application/xml;application/rss xml;application/rdf xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;x-scheme-handler/chrome;video/webm;application/x-xpinstall;
StartupNotify=true
Actions=NewWindow;
[Desktop Action NewWindow]
Name=Open a New Window
Exec=firefox-nightly -new-window
OnlyShowIn=Unity;Вы можете полностью отключить опцию MimeType. Это может быть очень плохо, если вы этого не сделаете.
Теперь нажмите «Сохранить», закройте его, и вы в деле!
Проверяем репозиторий вместе с пакетом
Вы можете проверить всё на настоящем роутере (не забудьте только выбрать правильный таргет), но я воспользовался Докером. В Докерхабе есть образ OpenWrt для x86_84, который можно запустив, пробросив внутрь контейнера директорию с SDK:
sudo docker run -it --name openwrt_test -v $PWD:/opt openwrtorg/rootfs
. Потыкайте кнопку ввода пока не появится приглашение Баша.
Система сборки пакетов
Сборочная система (она же SDK) выполнена в виде Make-фреймворка. Фреймворк не подразумевает, что вы будете собирать пакеты по отдельности, его основная задача заключается в сборке целых репозиториев.
SDK для x86_64 лежит в git. Есть архив (ссылка скоро устареет, но найти свежий несложно), который сэкономит вам время на компиляции тулчейна для сборки. Внутри особый интерес представляет файл feeds.conf.default. Формат несложный, через пробел:
- Ключевое слово
src-git. Поддерживается не только git, но сейчас репозиториев в иных VCS нет. - Название фида.
- URL git-репозитория, в котором можно указать коммит или тег. Если вы знаете, как называется такая спецификация, подскажите, пожалуйста.
Сам репозиторий с пакетами устроен максимально просто: в корне репозитория категория пакета, на втором уровне директория с названием пакета, а внутри него лежит
Makefile
, опционально `Config.in` для дополнительных опций при выполнении
make menuconfig
и субдиректория
patches
с соответствующим содержимым. Для простейшего пакета достаточно только
Makefile
. Для примера можете заглянуть в
Тестовая сборка
Я попробовал собрать GNU Hello, чтобы проверить, как работает SDK. Это сравнительно монструозный Hello World, написанный в строгом соответствии с гайдлайнами проекта GNU, его единственная задача заключается в иллюстрации этих гайдлайнов. Отдельный репозиторий для него не создавал, а вместо этого «подсунул» в базовые пакеты SDK, откуда и скомпилировал.
Для работы самого SDK в окружениии Debian понадобятся пакеты libncurses-dev (для меню сборки), build-essential (GCC и прочие стандартные зависимости программ на C), gawk, unzip, file, rsync и python3.
Также для создания репозитория из собранных пакетов, потребуется утилита для генерации ключей usign. Её в репозитории нет, поэтому дополнительно потребуется `cmake` для сборки. Этот инструмент можно заменить как на GPG, так и на signify-openbsd, но она рекомендуется и разрабатывается проектом OpenWrt, а также гораздо приятней в использовании.
Компилируем и устанавливаем usign:
Устройство репозитория
В файловой системе OpenWrt есть файл
/etc/opkg/distfeeds.conf
, в нём указывается системный (предоставленный разработчиками OpenWrt и opkg) список репозиториев. Собственные и сторонние репозитории можно указать в
/etc/opkg/customfeeds.conf
. Формат однострочный, состоит из трёх слов:
srcилиsrc/gz, от этого зависит, будет качаться файлPackagesилиPackages.gz. Судя по коду, есть другие опции для первого слова, но я не нашёл репозиториев, для которых это было бы актуально. Несмотря наsrcв названии, это репозиторий для бинарных пакетов. Специального формата репозиториев для пакетов с исходным кодом, аналогичного тому, что используется в Debian/APT, у opkg не предусмотрено.- Название репозитория или «фида» в терминологии opkg/OpenWrt.
- URL, внутри которого лежит файл
Packages/Packages.gz.
При выполнении
opkg update
к URL через
/
добавляется
Packages
или
Packages.gz
, список пакетов и подписи сохраняются в
/tmp/opkg-lists
, файл называется соответственно второму слову в списке репозиториев. Отсюда два важных вывода:
- При перезагрузке кэш очистится. На встроенных системах вроде роутеров это абсолютно разумно.
- В
/etc/opkg/customfeeds.confможно оверрайдить системные фиды своими собственными, дав им такое же название. opkg ругнётся, но проглотит оверрайд, сложив нужный файлик вместо загруженного ранее.
Заодно будет загружен
Packages.sig
, в котором должен лежать хэш распакованного списка пакетов. В самом списке просто перечисляются пакеты, для каждого пакета есть несколько значений, значения для разных пакетов отделяются пустой строкой. Вот самые важные поля для каждого пакета:
Package, имя пакета;Version, версия, при наличии нескольких пакетов с одинаковым именем можно выбрать версию, по умолчанию установится самая свежая;Depends, зависимости от других пакетов, пакетный менеджер доустановит перечисленные пакеты в случае их отсутствия в системе;Filename, путь к файлу относительно базового URL репозитория, обычно репозиторий плоский и всё лежит там же, где и `Packages.gz`;SHA256sum, заявленный репозиторием хэш пакета.
Если хотите больше подробностей, можете просто прочитать один из таких списков
Conclusion #
tar.gz file is a Tar archive
compressed with Gzip. To extract a tar.gz file, use the tar -xf command followed by the archive name.
If you have any questions, please leave a comment below.
Download/copy the packages and their dependencies
Obviously this requires an internet connection, so on ‘Al’ create a directory called /path/to/nvidia for the files and run:
# wget -P /path/to/nvidia/ -i /path/to/nvidia.list
