Проверка ssh-соединения с github

Как пользоваться apt

1. Обновление пакетов

Сначала давайте обновим список пакетов apt из репозиториев. Репозитории находятся на удалённых серверах и когда утилита apt ищет пакет для установки, естественно, что она не обращается ко всем репозиториям подряд чтобы узнать где он находится. В системе уже есть сохранённых кэш информации о том, какие пакеты вообще есть и где их можно скачать. Для обновления этого кэша используйте команду update:

Во время загрузки URL репозиториев обозначаются специальными префиксами, вот что они означают:

  • Hit (Сущ) — список не изменился с момента предыдущей загрузки;
  • Ign (Игн) — репозиторий игнорируется, либо он слишком новый, либо произошла незначительная ошибка во время загрузки;
  • Get (Пол) — доступна новая версия и она будет загружена.

Когда кэш обновлен вы можете посмотреть для каких пакетов доступны обновления:

Аналогично можно посмотреть установленные пакеты apt:

Или всех доступных:

Затем можно обновить все пакеты в системе:

2. Установка пакетов

Чтобы установить пакет apt используйте команду install, например, для установки программы Gimp используйте команду install:

Если пакет установился неверно и вы хотите его переустановить, можно использовать опцию —reinstall:

Как видите, опции можно указывать не только перед командой, но и после неё, аналогично можно установить несколько пакетов сразу, например:

Чтобы не подтверждать установку вручную используем опцию -y. Допустим вы установили пакет с помощью dpkg и теперь хотите установить для него зависимости, запустите команду install без параметров с опцией -f или —fix-broken:

Можно скачать deb пакет в текущую папку без установки:

Скачивать пакеты надо от имени обычного пользователя, иначе тогда они не будут доступны для работы с ними. Если вам нужно установить пакет из файла, просто передайте путь к файлу команде install:

Чтобы установить определенную версию пакета просто укажите нужную версию после имени пакета через знак =, например:

Чтобы найти доступные версии можно использовать команду policy. Она отображает информацию о том какая версия установлена, а также какие версии доступны:

Если вы не знаете как точно называется пакет, можно выполнить поиск пакетов apt с помощью команды search:

3. Удаление пакетов

Чтобы удалить ненужный пакет используйте команду remove:

Однако если вы изменяли какие-либо конфигурационные файлы из состава пакета, то при таком способе удаления они останутся в системе, чтобы удалить всё полностью используйте команду purge:

Чтобы удалить лишние пакеты, которые в системе больше не нужны выполните команду autoremove:

А для очистки кэша пакетов — autoclean:

Другие потенциальные условия

  • Могут возникнуть ошибки сборки, связанные с отсутствием файлов и указывающие, что для их скачивания следует использовать NuGet restore. Однако выполнение восстановления может сказать: «все пакеты уже установлены и нет никаких восстановлений». В этом случае удалите папку (при использовании ) или файл (при использовании PackageReference) и снова запустите инструкцию RESTORE. Если ошибка продолжает возникать, используйте или из командной строки, чтобы очистить папки и Cache, как описано в разделе .

  • При получении проекта из системы управления версиями папки вашего проекта могут быть сделаны доступными только для чтения. Измените разрешения для папок и попробуйте восстановить пакеты еще раз.

  • Возможно, вы используете старую версию NuGet. Ознакомьтесь с последними рекомендуемыми версиями на странице nuget.org/downloads. Для Visual Studio 2015 рекомендуется версия 3.6.0.

При возникновении других проблем сообщите о них на GitHub, чтобы мы могли получить у вас дополнительные сведения.

Регистрация сведений о проблеме, отчета об ошибке, запроса на функцию

Функция обработки проблем в репозитории продуктов WSL позволяет:

Выполнять поиск сведений о существующих проблемах, чтобы найти информацию, связанную с возникшей проблемой

Обратите внимание, что в строке поиска можно удалить is:open, чтобы включить в результаты поиска проблемы, которые уже были решены. Рассмотрите возможность комментирования или одобрения любых открытых проблем, чтобы выразить свою заинтересованность в их продвижении в качестве приоритетных.

Регистрировать сведения о новых проблемах

Если вы обнаружили проблему с WSL, о которой нет упоминаний, вы можете нажать зеленую кнопку New issue (Новая проблема), а затем выбрать элемент WSL — Bug Report (WSL — отчет об ошибках). Вам нужно будет включить название проблемы, номер сборки Windows (выполните , чтобы узнать номер текущей сборки), независимо от того, используете ли вы WSL 1 или WSL 2, текущую версию ядра Linux (выполните или ), номер версии дистрибутива (выполните ), а также любые другие версии используемого программного обеспечения, сведения о действиях для воспроизведения, ожидаемом поведении, фактическом поведении, а также журналы диагностики, если они доступны и применимы. Дополнительные сведения см. в разделе, посвященном вкладу в WSL.

Отправить запрос на функцию, нажав зеленую кнопку New issue (Новая проблема) и выбрав Feature request (Запрос на функцию). Вам нужно будет ответить на несколько вопросов, описывающих ваш запрос.

Кроме того, вы можете сделать следующее:

  • Зарегистрировать сведения о проблеме с документацией, используя репозиторий документов WSL. Чтобы внести изменения в документацию по WSL, ознакомьтесь с руководством для участников разработки портала «Документация» Майкрософт.
  • Зарегистрировать сведения о проблеме с Терминалом Windows, используя репозиторий продуктов Терминала Windows, если проблема связана с Терминалом Windows, консолью Windows или пользовательским интерфейсом командной строки.

Ответ 5

Единый вход SSH обычно достигается с помощью аутентификации с открытым ключом и агента аутентификации. Вы можете легко добавить свой тестовый ключ виртуальной машины к существующему агенту аутентификации (см. Пример ниже). Существуют и другие методы, такие как gssapi / kerberos, но они более сложные.

sshpass

В ситуациях, когда password доступен единственный метод аутентификации, который можно использовать sshpass для автоматического ввода пароля.  Во всех трех вариантах пароль виден или хранится в виде открытого текста:

Анонимный канал (рекомендуется sshpass)

# Create a pipe

PIPE=$(mktemp -u)

mkfifo -m 600 $PIPE

# Attach it to file descriptior 3

exec 3<>$PIPE

# Delete the directory entry

rm $PIPE

# Write your password in the pipe

 echo ‘my_secret_password’ >&3

# Connect with sshpass -d

sshpass -d3 ssh user@host

# Close the pipe when done

exec 3>&-

Это довольно громоздко в bash, возможно, проще с языками программирования. Другой процесс может подключиться к вашему pipe / fd до того, как будет записан пароль. Окно возможностей довольно короткое и ограничивается вашими процессами или root.

Переменная окружения

# Устновка вашего пароля в переменные среды

 export SSHPASS=’my_secret_password’

# Коннект с sshpass -e

sshpass -e ssh user@host

Вы и пользователь root можете читать переменные среды вашего процесса (например, ваш пароль) во время работы sshpass ( cat /proc/<pid>/environ | tr ‘\0’ ‘\n’ | grep ^SSHPASS=). Окно возможностей намного длиннее, но по-прежнему ограничено вашими собственными процессами или root, а не другими пользователями.

Аргумент командной строки (наименее безопасный)

 sshpass -p my_secret_password ssh user@host

Это удобно, но менее безопасно, как описано на странице руководства. Аргументы командной строки видны всем пользователям (например ps -ef | grep sshpass). sshpass пытается скрыть аргумент, но по-прежнему есть окно, в течение которого все пользователи могут видеть ваш пароль, переданный по аргументу.

Аутентификация с открытым ключом SSH

# Generate a key pair

# Do NOT leave the passphrase empty

ssh-keygen

# Copy it to the remote host (added to .ssh/authorized_keys)

ssh-copy-id user@host

Пароль очень важен. Любой, кто каким-либо образом получит файл закрытого ключа, не сможет использовать его без парольной фразы.

Настройте агент аутентификации SSH

# Start the agent

eval `ssh-agent`

# Add the identity (private key) to the agent

ssh-add /path/to/private-key

# Enter key passphrase (one time only, while the agent is running)

Подключайтесь как обычно

ssh user@host

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

Как активировать LTO-оптимизации при сборке пакета?¶

Актуальные релизы Fedora автоматически включают LTO оптимизации для всех собираемых пакетов.

Если в проекте применяются статические библиотеки (в т.ч. для внутренних целей), то экспортируем ряд внутри секции :

export AR=%{_bindir}/gcc-ar
export RANLIB=%{_bindir}/gcc-ranlib
export NM=%{_bindir}/gcc-nm

В случае использования системы сборки cmake, воспользуемся штатной функцией переопределения встроенных параметров:

%cmake -G Ninja \
    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DCMAKE_AR=%{_bindir}/gcc-ar \
    -DCMAKE_RANLIB=%{_bindir}/gcc-ranlib \
    -DCMAKE_NM=%{_bindir}/gcc-nm \
    ..

Автозапуск ssh-agent в Git под Windows

Ssh-agent является безопасным способом хранения и использования ваших SSH-ключей.

Замечание. Если вы используете Git Shell, устанавливаемый с GitHub Desktop, вам не нужно выполнять описанные ниже шаги. GitHub Desktop автоматически запускает ssh-agent. Вы можете запустить ssh-agent автоматически при запуске оболочки Bash или Git.

Вы можете запустить ssh-agent автоматически при открытии оболочки Bash или Git. Скопируйте строки ниже и вставьте их в файл или в оболочке Git:

Замечание. Если ваш приватный ключ не хранится в или , вы должны добавить путь к ним с помощью команды добавления ssh для того, чтобы ваша агент аутентификации SSH знал, где их искать. Например:

Теперь при первоначальном запуске Git Bash вам будет предложено ввести кодовую фразу:

Initializing new SSH agent…
succeeded
Enter passphrase for /c/Users/вы/.ssh/id_rsa:
Identity added: /c/Users/вы/.ssh/id_rsa (/c/Users/вы/.ssh/id_rsa)
Welcome to Git (version 1.6.0.2-preview20080923)

Run ‘git help git’ to display the help index.
Run ‘git help ‘ to display help for specific commands.
Run ‘git help ‘ to display help for specific commands.

Процесс ssh-agent будет продолжаться до тех пор, пока вы не разрегистрируетесь, не выключите компьютер или не закроете процесс.

Если вы хотите, чтобы ssh-agent «забыл» ваш ключ через некоторое время, сконфигурируйте его запуск следующим способом: .

Шаг 1 — Создание пары ключей

Первый шаг — создание пары ключей на клиентской системе (обычно на вашем компьютере):

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

После ввода команды вы должны увидеть следующее:

Нажмите ENTER, чтобы сохранить пару ключей в подкаталог  домашнего каталога или укажите альтернативный путь.

Если вы ранее создали пару ключей SSH, вы можете увидеть следующую строку:

Если вы решите перезаписать ключ на диске, вы больше не сможете выполнять аутентификацию с помощью предыдущего ключа. Будьте осторожны при выборе варианта yes, потому что этот процесс уничтожает ключи, и его нельзя отменить.

Затем вы должны увидеть следующую строку:

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

Вывод затем должен выглядеть примерно следующим образом:

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

В Qt Creator отсутствует документация. Как исправить?¶

Если Qt Creator при попытке загрузить документацию выдаёт ошибку Error loading: qthelp://org.qt-project.qtcreator.472/doc/index.html, выберем пункт меню Tools – Options – Help – Documentation – Add, затем вручную добавим следующие файлы:

/usr/share/doc/qt5/qmake.qch
/usr/share/doc/qt5/qtconcurrent.qch
/usr/share/doc/qt5/qtcore.qch
/usr/share/doc/qt5/qtdbus.qch
/usr/share/doc/qt5/qtgui.qch
/usr/share/doc/qt5/qtnetwork.qch
/usr/share/doc/qt5/qtnetworkauth.qch
/usr/share/doc/qt5/qtopengl.qch
/usr/share/doc/qt5/qtplatformheaders.qch
/usr/share/doc/qt5/qtprintsupport.qch
/usr/share/doc/qt5/qtsql.qch
/usr/share/doc/qt5/qttestlib.qch
/usr/share/doc/qt5/qtwidgets.qch
/usr/share/doc/qt5/qtxml.qch
/usr/share/doc/qt5/qtxmlpatterns.qch
/usr/share/doc/qtcreator/qtcreator.qch
/usr/share/doc/qtcreator/qtcreator-dev.qch

Как настроить автоматическое монтирование VeraCrypt томов при загрузке?¶

Откроем файл в :

sudoedit /etc/crypttab

Добавим в конец файла строку вида:

foo-bar UUID=XXXXXX /etc/keys/foo-bar.key tcrypt-veracrypt

Здесь foo-bar – внутреннее имя, которое будет использоваться dev-mapper, XXXXXX – , либо полный путь к файлу контейнера, /etc/keys/foo-bar.key – полный путь к ключевому файлу, либо файлу с паролем (разрыв строки в конце файла не ставится).

Откроем файл :

sudoedit /etc/fstab

Добавим в конец строку вида:

/dev/mapper/foo-bar /media/data auto defaults,x-systemd.automount 0 0

Здесь foo-bar – внутреннее имя, указанное ранее в crypttab, а /media/data – точка монтирования.

Вход в SSH без пароля (с использованием файлов ключей)

Вход в SSH по публичному ключу (без пароля) очень удобен и безопасен.

Процесс настройки аутентификации по публичному ключу очень простой:

  1. Командой создаётся пара «публичный ключ — приватный ключ».
  2. Публичный ключ копируется на компьютер с сервером SSH, то есть на компьютер, к которому будет осуществляться подключение и на котором будут выполнятся команды.
  3. Затем подключение выполняется обычным способом, но ввод пароля уже не требуется.

Публичный ключ, который копируется на удалённый сервер, не является секретным. Один и тот же ключ можно использовать на разных серверах. Главное — хранить в секрете приватный ключ.

Сгененировать ключи и скопировать их на удалённый хост можно буквально тремя командами. Для генерации пары ключей используется программа ssh-keygen, она включена в пакет ssh и если SSH у вас уже настроен, то дополнительно устанавливать ничего не нужно.

У программы ssh-keygen много функций и возможностей, начнём с рассмотрения процедуры генерации ключей, которая выполняется элементарно.

Если вы успели залогиниться на удалённой системе, разлогинтесь. После этого наберите:

ssh-keygen -t rsa

У нас спрашивают имя файла, не нужно ничего вводить, будет использовано имя по умолчанию. Также спрашивается пароль. Этот пароль позволяет установить дополнительную защиту — при подключении с помощью ключей не будет спрашиваться пароль пользователя, но будет спрашиваться пароль самого ключа. Устанавливать пароль необязательно.

В результате будет создано два файла:

  • ~/.ssh/id_rsa
  • ~/.ssh/id_rsa.pub

Первый файл нужно хранить в секрете. Второй файл нужно скопировать на удалённый компьютер, где запущен сервер SSH.

Теперь на удалённой машине нам нужно создать каталог .ssh. В предыдущей части мы уже узнали, на удалённой системе по SSH. Запустите команду вида:

ssh ПОЛЬЗОВАТЕЛЬ@АДРЕСАТ mkdir .ssh

Например:

ssh mial@192.168.1.36 mkdir .ssh

Теперь нам нужно скопировать содержимое файла id_rsa.pub на удалённую машину в файл ~/.ssh/authorized_keys. Сделать это очень просто (не забываем менять данные на свои):

cat .ssh/id_rsa.pub | ssh ПОЛЬЗОВАТЕЛЬ@АДРЕСАТ 'cat >> .ssh/authorized_keys'

Например:

cat .ssh/id_rsa.pub | ssh mial@192.168.1.36 'cat >> .ssh/authorized_keys'

Теперь выполняем подключение с помощью клиента SSH, но пароль у нас больше спрашиваться не будет.

Шаг 4 — Отключение аутентификации по паролю на вашем сервере

Если вам удалось войти в ваш удалённый аккаунт на удалённом хосте по  SSH без ввода пароля, вы успешно настроили аутентификацию по ключу SSH  для вашего аккаунта. Однако возможность входить на сервер с  использованием пароля всё есть активна, что означает, что ваш сервер  уязвим для атак с перебором пароля (brute-force attacks).

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

После завершения описанных далее процедур вход по  паролю станет недоступен, поэтому очень важно убедиться, что у вас  остаётся доступ к вашему серверу

Как только вы убедитесь, что аккаунт вашего удалённого пользователя  имеет привилегии администратора, войдите на сервер с использованием  аутентификации по ключу SSH, используя либо аккаунт , либо аккаунт пользователя с привилегиями . Далее откройте конфигурационный файл демона SSH:

Внутри файла найдите директиву .  Она может быть закомментирована. Раскомментируйте её при необходимости и  установите её значение в “no”. Это отключит возможность входа на сервер  по паролю.

/etc/ssh/sshd_config

Сохраните и закройте файл нажав + , затем для подтверждения сохранения файла, а далее для выхода из текстового редактора nano. Для применения внесённых изменений нам необходимо перезапустить сервис :

В качестве меры предосторожности откройте новое окно терминала и  проверьте, что соединение по SSH работает корректно, перед тем, как  закрывать текущую сессию:

После проверки работоспособности SSH соединения, вы можете закрыть все открытые сессии с сервером.

Теперь демон SSH на вашем сервере с Ubuntu работает только с ключами SSH. Аутентификация по паролю полностью отключена.

Как включить и безопасно настроить сервер SSH?¶

Сначала установим и активируем sshd:

sudo dnf install openssh-server
sudo systemctl enable --now sshd.service

Создадим собственный файл конфигурации, в который будем вносить изменения:

sudo touch /etc/ssh/sshd_config.d/00-foobar.conf
sudo chmod 0600 /etc/ssh/sshd_config.d/00-foobar.conf

Имя файла начинается с 00, т.к., согласно документации OpenSSH, приоритет среди всех файлов конфигурации имеет та директива, которая была указана раньше.

Отредактируем созданный файл для внесения своих изменений:

sudoedit /etc/ssh/sshd_config.d/00-foobar.conf

Отключим вход суперпользователем:

PermitRootLogin no

Запретим вход по паролям (будет доступна лишь аутентификация по ключам):

PasswordAuthentication no
PermitEmptyPasswords no

Сохраним изменения и перезапустим sshd:

Приложение падает. Как мне его отладить?¶

Для начала рекомендуется (хотя и не обязательно) установить отладочную информацию для данного пакета:

sudo dnf debuginfo-install foo-bar

После завершения процесса отладки символы можно снова удалить.

Чтобы получить бэктрейс падения, нужно выполнить в терминале:

gdb /usr/bin/foo-bar 2>&1 | tee ~/backtrace.log

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

Далее получившийся файл следует загрузить на любой сервис размещения текстовых файлов.

Также рекомендуется ещё сделать трассировку приложения до момента падения:

strace -o ~/trace.log /usr/bin/foo-bar

Создание роли

Роли в Ansible используются для логического разделения плейбука. Они имеют строгий синтаксис и файловую структуру. Таким образом, конфигурация становится более упорядоченной и понятной для дальнейшей поддержки.

И так, для ролей должна быть четкая файловая структура — создаем каталоги:

mkdir -p /etc/ansible/roles/nginx/tasks

mkdir -p /etc/ansible/roles/epel/tasks

* в данном случае мы создали каталоги nginx, epel и tasks внутри каталога roles. В ansible это означает, что мы создали роли с названием nginx и epel, а файл main.yml, который мы поместим в каталоги tasks будет описывать задачи данных ролей.

Создаем файл с описанием задач для роли nginx:

vi /etc/ansible/roles/nginx/tasks/main.yml


— name: Install Nginx Web Server on RedHat Family
  yum:
    name=nginx
    state=latest
  when:
    ansible_os_family == «RedHat»
  notify:
    — nginx systemd
— name: Install Nginx Web Server on Debian Family
  apt:
    name=nginx
    state=latest
  when:
    ansible_os_family == «Debian»
  notify:
    — nginx systemd

* где 

  • — — начало файла YAML; 
  • name — название для роли (может быть любым);
  • yum/apt — используемый модуль для установки приложения; 
  • yum/apt name — название пакета, которое мы устанавливаем; 
  • yum/apt state — состояние пакета, которое должно контролироваться ролью;
  • when — условие, при котором данная роль будет выполняться;
  • notify — обработчик, который будет вызван в случае успешного выполнения задачи. При необходимости, можно задать несколько обработчиков;

* В данном примере мы создали простую задачу для роли по развертыванию nginx. На системы RPM установка выполняется с помощью модуля yum, на deb — apt. Версия должна быть последней (latest); после установки пакета, необходимо разрешить автозапуск сервиса и запустить его.
* при установке пакетов также следует учитывать, что некоторые могут иметь разные названия в разных системах. Например, Apache в RMP-системах называется httpd, в deb — apache2.

Создаем файл с описанием задач для роли epel:

vi /etc/ansible/roles/epel/tasks/main.yml


— name: Install EPEL Repo
  yum:
    name=epel-release
    state=present

Обратите внимание, что в плейбуке выше мы задействовали notify, но не задали handlers — в качестве примера, мы вынесем его в отдельный файл:

mkdir /etc/ansible/roles/nginx/handlers

vi /etc/ansible/roles/nginx/handlers/main.yml


— name: nginx systemd
  systemd:
    name: nginx
    enabled: yes
    state: started

* handlers — описание обработчика, который может быть вызван с помощью notify; systemd — модуль для управления юнитами systemd; systemd enabled — разрешает или запрещает сервис; systemd state — состояние, которое должно быть у сервиса. В данном примере мы указываем, что у демона nginx должно быть состояние started и разрешен автозапуск (enabled).

Как сменить работу с HTTPS на SSH

Если у вас есть локальный (на вашем рабочем компьютере) репозиторий полученный по https, очень просто сменить доступ на SSH.

Для этого убедитесь что доступ по HTTPS, для этого выведите список remote:

ссылки начинаются c https, а значит вы не можете ни загрузить ни получить обновления удаленного репозитория.

Зайдите в репозиторий и скопируйте SSH ссылку доступа, перейдите в локальный репозиторий и удалите текущий remote origin:

и добавьте новый, последняя строка в команде это ссылка доступа SSH:

проверьте список удаленных репозиториев:

и если у вас формат без https в начале ссылки, то все выполнено верно, можно работать с репозиторием и проверить командой

На этом вопросы с доступом к вашим репозиториям на гитхабе закрыт!

Чистого кода и красивых коммитов!

Установление SSH-подключения к виртуальной машине с помощью клиента SSH

С помощью открытого ключа, развернутого на виртуальной машине Azure, и закрытого ключа в локальной системе установите SSH-подключение к виртуальной машине, используя ее IP-адрес или DNS-имя. Замените azureuser и myvm.westus.cloudapp.azure.com в приведенной команде, указав имя пользователя администратора и полное доменное имя (или IP-адрес).

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

Если виртуальная машина использует политику доступа JIT, запросите доступ, прежде чем подключиться к виртуальной машине. Дополнительные сведения о политике JIT см. в статье Управление доступом к виртуальным машинам с помощью JIT-доступа.

Файл ресурсов project.assets.json не найден

Полное сообщение об ошибке.

Если используется формат управления PackageReference, который проверяет, установлены ли на компьютере все необходимые пакеты, в файле определена схема зависимостей проекта. Этот файл создается динамически во время восстановления пакета. Поэтому он обычно не добавляется в систему управления версиями. В результате эта ошибка возникает при попытке выполнить сборку проекта с помощью такого средства, как , которое не восстанавливает пакеты автоматически.

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: