Есть ли какое-либо программное обеспечение, которое может помочь мне переустановить программное обеспечение после новой установки?

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

Создайте пакетный файл, содержащий

#!/bin/sh

socket=`xprop -root _NET_CURRENT_DESKTOP`
socket=${socket##* }

if [ "$socket" ]
then
    if [ "$DISPLAY" ]
    then
        socket="${DISPLAY%.*}-$socket"
        socket=${socket#*:}
    else
        socket="NODISPLAY-$socket"
    fi
    exec geany --socket-file "/tmp/geany_socket_$socket" "$@"
else
    exec geany "$@"
fi

Поместите пакетный файл в каталог, включенный в PATH (см.https://stackoverflow.com/questions/14650070/how-to-execute-bash-script-from-any-location). Я предполагаю, что вы называете командный файл wgeany, в противном случае замените его в следующих инструкциях на то, что вы назвали.

Теперь мы хотим установить это как нашу программу по умолчанию для открытия текстовых файлов. К сожалению, его нет в списке, и, по крайней мере, в моей версии вы, к сожалению, не можете сделать собственный выбор.

Мы можем решить эту проблему, перейдя к ~/.local/share/applicationsили /usr/share/applications(, если один из них не существует/не работает/у вас нет разрешения для него, попробуйте другой )и создайте текстовый файл с именем wgeany.desktop, содержащий:

[Desktop Entry]
Name=wgeany
Comment=wgeany
Exec=wgeany %f
Type=Application
StartupNotify=false
Terminal=false
Categories=TextTools;
Name[en_US]=wgeany

Также вы можете включить строку, указывающую на правильный значок geany (Icon=path/icon.png), но я не удосужился найти ее. Сохраните файл, и теперь ваш командный файл должен появиться в диалоговом окне открытия с помощью. (Вы можете установить его в качестве приложения по умолчанию для типа файла, например.txt, перейдя в свойства файла (этого типа ), затем на вкладку «Открыть с помощью» и установите wgeany в качестве приложения по умолчанию. там.


Спасибо также MaxWilliams, который помог мне решить эту проблему.

19
28.04.2020, 20:42
3 ответа

Ansible is an open-source software provisioning, configuration management, and application-deployment tool. It runs on many Unix-like systems, and can configure both Unix-like systems as well as Microsoft Windows. It includes its own declarative language to describe system configuration

(Из Википедии .)Домашняя страница (Github).

Есть несколько других в той же категории. Чтение о должно дать вам словарный запас для поиска других и сравнения, если это необходимо. Никс — новый соперник. Некоторые говорят «сложнее, но, может быть, в самый раз». также находится на месте происшествия.

Пример Ansible для имени хоста myhost, модульapt(заменить на yumили что-то еще):

ansible -K -i myhost, -m apt -a "name=tcpdump,tmux state=present" --become myhost

Список «tcpdump,tmux» может быть расширен запятыми. (Тот факт, что имя хоста myhostвстречается дважды в строке команды -, потому что мы используем не фиксированный список хостов, а специальный -hoc, с запятой в конце.)

Это только поверхностно, Ansible имеет обширную коллекцию модулей .

10
19.03.2021, 02:25

Если вы просто хотите установить кучу пакетов, то простой -вкладыш может сделать что-то вроде:

sudo bash -c 'for package in "tmux" "htop" "gimp"; do apt install -y --no-upgrade "$package"; done'

Цикл не является строго обязательным, но без него, если apt не сможет найти какую-либо из программ в списке, он не сможет установить ни один из других пакетов. Это может произойти, например, если вы переключитесь на более новую версию своего дистрибутива, а более старые пакеты больше не будут находиться в репозиториях. Если вы предпочитаете все или ничего, используйте

sudo apt install -y --no-upgrade tmux htop gimp

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

Быстрый и грязный способ сохранить их — просто скопировать каталог всех этих конфигураций в новую систему. Лучшим способом было бы поместить их под контроль версий с помощью таких инструментов, как git. Я использую комбинацию git, dotbot и рукописных скриптов для настройки своей системы.

Обновление

Один момент, который отсутствует в обсуждении до сих пор, заключается в том, что apt, как правило, не единственная система управления пакетами, необходимая для чего-либо, выходящего за рамки голых основ. Другими инструментами управления пакетами могут быть snap, pip, conda, cargoи многие другие. Это неявно рассматривается в ответе Алекса Стрэгиса. Ansibleсодержит огромное количество модулей, включая модули для управления пакетами, кроме apt, таких как snapи pip. Поскольку мой ответ сосредоточен на написании -вашего -собственного -сценария, я хотел бы остановиться на этом. Хорошо протестированный фреймворк, такой как Ansible, как правило, предпочтительнее для большинства задач, но самостоятельно -написанный код дает преимущество с точки зрения гибкости, на мой взгляд.

Небольшой пример каркаса

Я написал небольшой код на Python, который должен показать, как может выглядеть такая структура.

#!/usr/bin/env python3

import os
import re
import sys
import subprocess

def read_package_list(path):
    package_list=[]
    try:
        with open(os.path.realpath(path)) as f:
            for line in f:
                match = re.search(r'^(?!\s*$)(?!#)\w+',line)
                if match:
                    package_list.append(match.group(0))
            return package_list
    except Exception as e:
        print(e.message)
        print(e.args)
        sys.exit(1)    
    return package_list

def install_packages(command,package_list,err_log):
    try:
        with open(err_log,'w+') as f:
            for p in package_list:
                print('executing '+command+' '+str(p))
                out=subprocess.run(command+' '+p,shell=True,stderr=f)
    except Exception as e:
        print(e.message)
        print(e.args)
        sys.exit(1)

def main():
    args = sys.argv[1:]
    package_list = read_package_list(args[1])
    err_log=os.path.realpath(args[2])
    install_packages(args[0],package_list,err_log)

if __name__ == '__main__':
    main()

Основными компонентами являются функция для обработки списка пакетов, разделенных символами новой строки(read_package_list)и функция для выполнения команды установщика в оболочке(install_packages). Строки, содержащие только пробелы, и строки, начинающиеся с #, игнорируются при чтении в списке пакетов. mainобрабатывает аргументы, которые могут быть заданы в командной строке как installer command, packagefile, errorlog.

Что это мне дает?

Ну, вы можете просто использовать любую команду установщика, которая вам нравится

./installerscript.py 'apt install --dry-run' myaptpackages.txt apt_err.log
./installerscript.py 'snap install' mysnaps.txt snap_err.log
./installerscript.py 'pip install --user' mypy.txt py_err.log
./installerscript.py 'git clone' repos.txt git_err.log

Это может быть полезно, если кто-то ведет список пакетов, которые должны обрабатываться одинаково. Когда такая структура существует, ее легко улучшить. Можно было бы, например,настроить способ ведения журнала процесса установки или настроить обработку аргументов командной строки. Другой аспект заключается в том, что сценарий, вероятно, не должен выполнять каждую команду от имени пользователя root (, если он запущен от имени пользователя root ), как это происходит сейчас.

3
19.03.2021, 02:25

Если вы устанавливаете программное обеспечение из командной строки, то выполнение

grep "^sudo apt install" ~/.bash_history > system-setup.sh

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

1
19.03.2021, 02:25

Теги

Похожие вопросы