Блог пользователя MikeMirzayanov

Автор MikeMirzayanov, 9 лет назад, По-русски

Добрый день.

Конечно, пакетные менеджеры в 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

  • Проголосовать: нравится
  • +192
  • Проголосовать: не нравится

»
9 лет назад, # |
  Проголосовать: нравится -22 Проголосовать: не нравится

Я обычно выключаю UAC

Зря Вы про это написали. Теперь многие люди, которые так делают, на вопрос: "А почему Вы выключаете UAC? Это же потенциально опасно!", будут отвечать: "А так делает MikeMirzayanov!"

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +28 Проголосовать: не нравится

    И я тоже выключаю UAC... и антивирус не установлен.. и far с msvs всегда запускаются из-под админа :)
    Опасно не выключение UAC-а, а отсутствие головы.

»
9 лет назад, # |
  Проголосовать: нравится +70 Проголосовать: не нравится

»
9 лет назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

I love Java, but it feels weird to see that JRE instead of .NET is used for a package manager written specifically for Windows...

»
9 лет назад, # |
  Проголосовать: нравится +20 Проголосовать: не нравится

Хорошим подспорьем оказался Сhocolatey, но в деталях оказалось, что он не всегда мне подходит

В chocolatey есть поддержка своих репозиториев, причем уже очень давно: https://github.com/chocolatey/choco/wiki/How-To-Host-Feed
Пакеты со всеми нужными настройками (источники, пути установки, и т.п.) опять же можно прекрасно создать самому. Зачем для этого писать целый менеджер пакетов — лично мне не понятно.

Кстати, я вижу Rust в списке на pbox.me. Значит ли это, что скоро он появится на codeforces?

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Да, правда, видимо, поддержка теперь есть. Я делал ресерч этого вопроса довольно давно, когда только познакомился с 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.

»
9 лет назад, # |
  Проголосовать: нравится +28 Проголосовать: не нравится

Интересная штука. Я буквально вчера устанавливал на чистый комп far, paint.net, 7zip, image magick и т.д. Если бы делал это сегодня, попробовал бы PBOX.

После поста осталось несколько вопросов:

Можно ли прописать свой репозиторий или как-нибудь добавить пакеты?

Поддерживаются ли зависимости между пакетами?

Можно ли писать pbox install package1 package2 ... packageN?

Есть ли поддержка мета-пакетов — особенно интересно было бы в сочетании со своим репозиторием — сделал себе мета-пакет и одной командой на свежий комп устанавливаешь.

Есть ли планы по развитию?

Спасибо.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +24 Проголосовать: не нравится

    Пока это не очень развито, но даже уже можно. Надо в C:\ProgramData\pbox\sources.lst добавить еще строк с URLs. Пакеты должны лежать точно так же как на официальном.

    Писать в стиле pbox install package1 package2 ... packageN можно.

    Зависимостей и мета-пакетов нет.

    Развитие будет видимо ровно такое, чтобы удовлетворять потребности Codeforces, университета и проведения олимпиад. В целом, я не вижу PBOX как замену Chocolatey или того, что там еще будет — просто небольшой простой инструмент для выполнения своих задач.

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Можно узнать, откуда скачиваются актуальные версии пакеты, и можно ли добавить свои пакеты? Спасибо

»
9 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
некоторые наработки имеются (в Windows 10 обещают прогресс)

Так чем плох OneGet, который обещают в Windows 10?

»
9 лет назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится

The future of the windows console! Hehe

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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?

»
9 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

HTTPS? Цифровые подписи? Не, не слышали.

Интересно, через сколько времени у этой программы появится поддержка PBOX?

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Для внутреннего и эпизодического использования это, очевидно, не первоочередная задача. Дистрибутивы же большинства программ раздаются по http (кое-где хотя бы хеши дают, но редко) и все живы. Для эксплуатации этой программы mitm нужен + поддержка чего-либо в evilgrade не думаю, что скоро появится — мертвый же проект (https://github.com/infobyte/evilgrade).

»
4 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

It's 502 right now, 2020 :'((

»
4 года назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

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?

»
3 года назад, # |
  Проголосовать: нравится +2 Проголосовать: не нравится

Isn't it apparent the real issue is using Windows?

  • »
    »
    3 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    What do you mean? PBOX works fine on Windows!

    • »
      »
      »
      3 года назад, # ^ |
      Rev. 3   Проголосовать: нравится +1 Проголосовать: не нравится

      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.

      • »
        »
        »
        »
        3 года назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Oh! Yeah, you are right that generally windows is not designed to support a package manager. I thought you were referring to PBOX.