Добрый день.
Конечно, пакетные менеджеры в Linux делают проще жизнь и пользователям и администраторам. В мире Windows с этим значительно хуже, хотя некоторые наработки имеются (в Windows 10 обещают прогресс): nuget, chocolatey, wpkg и другие.
Занимаясь поддержкой тестирующих машин для Codeforces, компьютеров Центра олимпиадной подготовки программистов СГУ, подготовкой рабочих станций участников под разные олимпиады я окончательно утомился писать разнообразные bat-файлы и решил упорядочить этот процесс. Хорошим подспорьем оказался Сhocolatey, но в деталях оказалось, что он не всегда мне подходит: в большинстве случаев нельзя указать директорию установки, нет поддержки своих репозиториев, нет многих нужных для Codeforces пакетов, репозиторий Сhocolatey хранит не установщики программ, а только ссылки на них — несколько раз было, что сайт программы лежал, и установить пакет было не возможно.
По этой причине в декабре 2014 я выделил несколько вечеров поработать над удобным для наших целей менеджером (назвал PBOX, читается как пи-бокс). Я предполагаю использовать PBOX для установки специфичного для меня софта (конкретных версий компиляторов), а для программ общего назначения подойдет и Сhocolatey.
В ближайший месяц все тестирующие сервера Codeforces (и многие другие компьютеры факультета КНиИТ Саратовского ГУ) я планирую переустановить, используя в частности и PBOX.
Я немного уже использовал его для личных целей, мне кажется, PBOX может быть полезен и кому-то из пользователей Codeforces. На сайте http://pbox.me есть примеры использования. Ниже немного пояснений.
Установка
Зайдите на http://pbox.me и в административной консоли Windows (найдите в cmd.exe и в контекстном меню по правой кнопке мыши выберите Run as administrator
) выполните код с главной страницы. PBOX написан на Java, если у вас она не стоит, то он сам выкачает JRE и положит рядом с собой. Кстати, при каждом запуске PBOX будет самообновляться, так что думать о накатывании обновлений на него не придется.
Я обычно выключаю UAC, если не хотите, то и в будущем его придется всегда запускать в админ. консольке, а отключить uac при установленном PBOX можно просто набрав pbox -uac
.
Использование
Хотите себе именно тот g++, что используется на Codeforces? Просто наберите pbox install mingw-tdm-gcc
. По-умолчанию установит в %HOMEDRIVE%\Programs\mingw-tdm-gcc, пропишет в PATH несколько директорий (включая MSYS), добавит MINGW_HOME на директорию установки. Вообще, чтобы увидеть что конкретно произойдет достаточно просто на сайте найти пакет и кликнуть Show pbox.xml
.
Пакетов в PBOX пока совсем не много (но и не мало, 73). Заходите на http://pbox.me/packages и смотрите. Из полезного консольного рекомендую pbox install tools
— это сборка полезных утилит sysinternals, windows resource kit, support tools, а также разных curl, wget, imdisk и других, которые сразу добавятся в PATH. Кстати, будет добавлена и полезная утилита runexe.exe
, которой можно запускать процессы и смотреть используемое время/память.
Кстати, большинство утилит и компиляторов по-умолчанию будут установлены в C:\Programs (на самом деле в %HOMEDRIVE%\Programs). Довольно удобно иметь путь к ним покороче и без пробелов как у "Program Files".
Можно устанавливать с доп. ключами, например так: pbox install far --homedir=C:\Far --arch=32 --version=3.0.4040
. Чтобы удалить пакет, достаточно выполнить pbox uninstall far
.
Вот еще примеры доступных команд и их использования:
Описание | Команда |
---|---|
Заставить PBOX забыть о том, что он поставил пакет (пакет остается установленным). | pbox forget <package> |
Вывести информацию о пакете (можно заданной версии) | pbox info <package> или pbox info <package> --version=version |
Найти в репозитории пакет (по тегу, подстроке в описании или названии) | pbox find <query> или pbox search <query> |
Найти в репозитории пакет (поиск во всех версиях, а не только последних) | pbox find <query> --all или pbox search <query> --all |
Вывести список пакетов (последних версий или всех) | pbox list или pbox list --all |
Вывести список установленных PBOX-пакетов | pbox list-installed |
Выкачать пакет и посмотреть что внутри
Да, это просто. Вот пример ссылки: http://repo.pbox.me/1.0/jdk8/1.8.0_45/jdk8$1.8.0_45.pbox.7z
Код
Код есть здесь: https://github.com/MikeMirzayanov/pbox
Зря Вы про это написали. Теперь многие люди, которые так делают, на вопрос: "А почему Вы выключаете UAC? Это же потенциально опасно!", будут отвечать: "А так делает MikeMirzayanov!"
И я тоже выключаю UAC... и антивирус не установлен.. и far с msvs всегда запускаются из-под админа :)
Опасно не выключение UAC-а, а отсутствие головы.
I love Java, but it feels weird to see that JRE instead of .NET is used for a package manager written specifically for Windows...
В chocolatey есть поддержка своих репозиториев, причем уже очень давно: https://github.com/chocolatey/choco/wiki/How-To-Host-Feed
Пакеты со всеми нужными настройками (источники, пути установки, и т.п.) опять же можно прекрасно создать самому. Зачем для этого писать целый менеджер пакетов — лично мне не понятно.
Кстати, я вижу Rust в списке на pbox.me. Значит ли это, что скоро он появится на codeforces?
Да, правда, видимо, поддержка теперь есть. Я делал ресерч этого вопроса довольно давно, когда только познакомился с Chocolatey, вот по этому issue https://github.com/chocolatey/chocolatey/issues/82 толком прогресса не было. Мне кажется, что и сейчас пришлось бы немало инвестировать время, чтобы делать подходящие пакеты, развернуть инфраструктуру по их полуавтоматической сборке (в PBOX такое есть), наверняка это непросто поднять их сайт (а можно ли?). Вероятно это проблемы конкретных пакетов, но с Chocolatey у меня неоднократно было, что пакет фактически не ставился, но Chocolatey это не понимал и думал, что он поставлен. Но в целом да, Chocolatey можно было бы приспособить.
Есть еще момент — свои наработки значительно проще развивать под себя. Я вижу, что приспособлю PBOX к выполнению каких-то админских сценариев. Ну типа
pbox run create-user --username=contest --password=contest
,pbox run rescan-windows-updates
,pbox run run-polygon-invoker
. Сценарии тоже должны храниться на манер пакетов и при запуске скачиваться/обновляться.Rust со временем появится на Codeforces.
Интересная штука. Я буквально вчера устанавливал на чистый комп far, paint.net, 7zip, image magick и т.д. Если бы делал это сегодня, попробовал бы PBOX.
После поста осталось несколько вопросов:
Можно ли прописать свой репозиторий или как-нибудь добавить пакеты?
Поддерживаются ли зависимости между пакетами?
Можно ли писать pbox install package1 package2 ... packageN?
Есть ли поддержка мета-пакетов — особенно интересно было бы в сочетании со своим репозиторием — сделал себе мета-пакет и одной командой на свежий комп устанавливаешь.
Есть ли планы по развитию?
Спасибо.
Пока это не очень развито, но даже уже можно. Надо в C:\ProgramData\pbox\sources.lst добавить еще строк с URLs. Пакеты должны лежать точно так же как на официальном.
Писать в стиле pbox install package1 package2 ... packageN можно.
Зависимостей и мета-пакетов нет.
Развитие будет видимо ровно такое, чтобы удовлетворять потребности Codeforces, университета и проведения олимпиад. В целом, я не вижу PBOX как замену Chocolatey или того, что там еще будет — просто небольшой простой инструмент для выполнения своих задач.
Можно узнать, откуда скачиваются актуальные версии пакеты, и можно ли добавить свои пакеты? Спасибо
Так чем плох OneGet, который обещают в Windows 10?
Тем что нужно Windows 10 устанавливать?
Казалось бы, достаточно Win7+.
Не думаю, что это так уж и плохо.
Думаю к январю-февралю 2016 года будет годная ОС.
The future of the windows console! Hehe
In case you're looking for a console replacement on Windows,
try ConEmu
I was just trying to promote their product. Ain't going back to windows :)
A quick question:
I see Sublime Text 3 in the package list. Isn't ST3 shareware?
So would I need to enter license if were to download the 3065 build package?
HTTPS? Цифровые подписи? Не, не слышали.
Интересно, через сколько времени у этой программы появится поддержка PBOX?
Для внутреннего и эпизодического использования это, очевидно, не первоочередная задача. Дистрибутивы же большинства программ раздаются по http (кое-где хотя бы хеши дают, но редко) и все живы. Для эксплуатации этой программы mitm нужен + поддержка чего-либо в evilgrade не думаю, что скоро появится — мертвый же проект (https://github.com/infobyte/evilgrade).
It's 502 right now, 2020 :'((
Hi. Please, try now.
Thank you so much. It's working!
Have a nice Fools Day!
Hey MikeMirzayanov,
pbox install mingw-tdm-gcc
installs g++ version 5.1.0 which doesn't support c++11 and newer version. Can you please suggest some solution for this?http://pbox.me/packages search fo gcc and you'll find many versiosn
Isn't it apparent the real issue is using Windows?
What do you mean? PBOX works fine on Windows!
I mean in general, the Windows ecosystem is not designed with a package manager in mind, rather every program has its own installer and no consistent interface besides having an uninstaller program. PBOX, while noble in attempt, simply does not have enough community support (maintainers being a part of that) to rival something like Debian/Ubuntu's packages, Arch's AUR, Fedora package sources, etc.
I will also note that I don't trust windows to be efficient for servers. It was specifically using Windows for the CF servers that cause Mike to have to use someone else's C++ distributions and what caused pypy to be so slow. A friend who claims to be familiar with CF's backend also tells me it is very fragile, and I suspect using a windows server is part of that.
Oh! Yeah, you are right that generally windows is not designed to support a package manager. I thought you were referring to PBOX.