Недопустимое имя пакета при расширении диска

Обновлено: 07.07.2024

    в файле package.json вашего проекта, используя ключ сборки на верхнем уровне:

или через --config

вариант. По умолчанию используется электронный-строитель.yml .

Также поддерживаются форматы json , json5, toml или js (экспортированная конфигурация или функция, создающая конфигурацию).

Если вы хотите использовать файл js, не называйте его electronic-builder.js . Оно будет конфликтовать с именем пакета electronic-builder.

Если вы хотите использовать toml, установите yarn add toml --dev .

Большинство параметров принимают значение null — например, чтобы явно установить, что значок DMG должен быть значком тома по умолчанию из ОС, а правила по умолчанию не должны применяться (т. е. использовать значок приложения в качестве значка DMG), задайте для dmg.icon значение null. .

Шаблон имени файла артефакта¶

Макрос $ поддерживается в дополнение к файловым макросам.

Переменные среды из файла¶

Файл env electronic-builder.env в текущем каталоге (пример). Поддерживается только при использовании CLI.

Как читать документы¶

  • Название необязательного свойства — обычное, обязательное — полужирное.
  • Тип указывается после имени свойства: Array | Нить . Подобное объединение означает, что можно указать либо строку (**/*), либо массив строк (["**/*", "!foo.js"]).

Конфигурация¶

  • appId = com.electron.$ Строка | «undefined» — идентификатор приложения. Используется как CFBundleIdentifier для MacOS и как идентификатор пользовательской модели приложения для Windows (только цель NSIS, Squirrel.Windows не поддерживается). Настоятельно рекомендуется установить явный идентификатор.
  • productName Строка | «undefined» — как имя, но позволяет вам указать имя продукта для вашего исполняемого файла, которое содержит пробелы и другие специальные символы, не разрешенные в свойстве имени. Если внутри конфигурации сборки не указано, используется свойство productName, определенное на верхнем уровне package.json. Если не указано на верхнем уровне package.json , используется свойство name.
  • авторское право = Copyright © год $ String | "undefined" – удобочитаемая строка авторских прав для приложения.
  • каталоги Каталоги метаданных | «не определено»
  • mac MacConfiguration – параметры, связанные со сборкой целей macOS.
  • mas MasConfiguration — параметры MAS (Магазин приложений для Mac).
  • masDev MasConfiguration — параметры разработки MAS (Магазин приложений для Mac) (цель mas-dev).
  • dmg DmgOptions — параметры DMG для macOS.
  • pkg PkgOptions — параметры PKG для macOS.
  • win WindowsConfiguration — параметры, относящиеся к сборке целей Windows.
  • nsis NsisOptions
  • nsisWeb NsisWebOptions | «не определено»
  • портативный PortableOptions | «не определено»
  • AppXOptions
  • squirrelWindows SquirrelWindowsOptions
  • linux LinuxConfiguration — параметры, относящиеся к сборке целей Linux.
  • deb DebOptions — параметры пакета Debian.
  • snap SnapOptions — параметры привязки.
  • appImage AppImageOptions — параметры AppImage.
  • flatpak FlatpakOptions | «undefined» – параметры Flatpak.
  • Pacman LinuxTargetSpecificOptions
  • об/мин LinuxTargetSpecificOptions
  • FreeBSD LinuxTargetSpecificOptions
  • P5p LinuxTargetSpecificOptions
  • apk LinuxTargetSpecificOptions
  • includeSubNodeModules = false Логическое значение — следует ли включать все каталоги подмодулей node_modules

buildDependenciesFromSource = false Логическое значение — следует ли создавать собственные зависимости приложения из исходного кода.

nodeGypRebuild = false Boolean — следует ли выполнять перестроение node-gyp перед началом упаковки приложения.

Не используйте npm (ни .npmrc ) для настройки электронных заголовков. Вместо этого используйте node-gyp-rebuild для электронного построения.

Массив npmArgs | Строка | «undefined» — дополнительные аргументы командной строки для использования при установке собственных зависимостей приложения.

npmRebuild = true Boolean — следует ли перестраивать собственные зависимости перед началом упаковки приложения.

buildVersion Строка | «undefined» — версия сборки. Сопоставляется со свойством метаданных CFBundleVersion в macOS и со свойством метаданных FileVersion в Windows. По умолчанию версия . Если определена среда TRAVIS_BUILD_NUMBER, APPVEYOR_BUILD_NUMBER, CIRCLE_BUILD_NUM, BUILD_NUMBER, bamboo.buildNumber или CI_PIPELINE_IID, она будет использоваться как версия сборки ( version.build_number ).

electronCompile Boolean — использовать ли электронную компиляцию для компиляции приложения. По умолчанию имеет значение true, если в зависимостях выполняется электронная компиляция. И false, если в devDependencies или не указано.

electronDist Строка | module:app-builder-lib/out/configuration.__type — возвращает путь к пользовательской сборке Electron (например, ~/electron/out/R). Zip-файлы должны следовать шаблону electronic-v$-$-$.zip , в противном случае предполагается, что это распакованный каталог приложения Electron

electronDownload — параметры электронной загрузки.

  • Строка версии
  • Строка кэша | «undefined» — расположение кеша.
  • зеркальная строка | «undefined» – зеркало.
  • строгое логическое значение SSL
  • isVerifyChecksum Boolean
  • платформа «дарвин» | «линукс» | «выигрыш32» | "мас"
  • архивная строка

electronBranding ElectronBrandingOptions — брендинг, используемый дистрибутивами Electron. Это необходимо, если ответвление изменило файл BRANDING.json Electron.

electronVersion Строка | «undefined» — версия электрона, для которой вы упаковываете. По умолчанию используется версия электрона, электронная предустановленная или электронная предустановленная зависимость компиляции.

расширяет массив | Строка | «undefined» — имя встроенного пресета конфигурации (в настоящее время поддерживается только react-cra) или любое количество путей к файлам конфигурации (относительно каталога проекта).

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

Если в приложении есть зависимости react-scripts, react-cra будет установлен автоматически. Установите значение null, чтобы отключить автоматическое обнаружение.

extraMetadata any — добавить свойства в package.json .

  • forceCodeSigning = false Boolean — будет ли происходить сбой, если приложение не подписано (чтобы предотвратить неподписанное приложение, если конфигурация подписи кода неверна).
  • nodeVersion Строка | «undefined» — только фреймворки на основе libui Версия NodeJS, для которой вы упаковываете. Вы можете установить для него значение current, чтобы установить версию Node.js, которую вы используете для запуска.
  • запускUiVersion Boolean | Строка | «undefined» — только фреймворки на основе libui Версия LaunchUI, для которой вы упаковываете. Применимо только для Windows. По умолчанию используется версия, подходящая для используемой версии платформы.
  • фреймворк Строка | «undefined» — имя фреймворка. Один из электрона, протона, либуи. По умолчанию электрон .
  • модуль beforePack:app-builder-lib/out/configuration.__type | Строка | «undefined» — функция (или путь к файлу или идентификатору модуля), которая должна быть запущена перед упаковкой.

afterPack — функция (или путь к файлу или идентификатору модуля), которая будет выполняться после упаковки (но перед упаковкой в ​​распространяемый формат и подписью).

afterSign — функция (или путь к файлу или идентификатору модуля), которая будет выполняться после упаковки и подписи (но до упаковки в распространяемый формат).

artifactBuildStarted module:app-builder-lib/out/configuration.__type | Строка | «undefined» — функция (или путь к файлу или идентификатору модуля), которая будет выполняться при запуске сборки артефакта.

модуль ArtifactBuildCompleted:app-builder-lib/out/configuration.__type | Строка | «undefined» — функция (или путь к файлу или идентификатору модуля), которая будет выполняться после завершения сборки артефакта.

afterAllArtifactBuild — функция (или путь к файлу или идентификатору модуля), которая будет запущена после сборки всех артефактов.

Модуль msiProjectCreated:app-builder-lib/out/configuration.__type | Строка | «undefined» — проект MSI, созданный на диске, но еще не упакованный в пакет .msi.

appxManifestCreated module:app-builder-lib/out/configuration.__type | Строка | «undefined» — манифест Appx создан на диске — еще не упакован в пакет .appx.

onNodeModuleFile — функция (или путь к файлу или идентификатору модуля), которая будет выполняться для каждого файла модуля узла.

beforeBuild (контекст: BeforeBuildContext) => Обещание | null — функция (или путь к файлу или идентификатору модуля), которая должна быть запущена перед установкой или перестроением зависимостей. Работает, когда для npmRebuild установлено значение true . При разрешении значения false установка или перестроение зависимостей будут пропущены.

Если указано, а node_modules отсутствуют, проверка зависимостей в производственной среде не будет выполняться.

  • remoteBuild = true Логическое значение — следует ли собирать с помощью службы сборки Electron, если цель не поддерживается в текущей ОС.
  • includePdb = false Boolean – включать ли файлы PDB.
  • removePackageScripts = true Boolean — следует ли удалять поле скриптов из файлов package.json.
  • removePackageKeywords = true Boolean — следует ли удалять поле ключевых слов из файлов package.json.

Переопределение параметров платформы¶

Следующие параметры также могут быть установлены для каждой платформы (клавиши верхнего уровня mac, linux и win), если это необходимо.

appId = com.electron.$ Строка | «undefined» — идентификатор приложения. Используется как CFBundleIdentifier для MacOS и как идентификатор пользовательской модели приложения для Windows (только цель NSIS, Squirrel.Windows не поддерживается). Настоятельно рекомендуется установить явный идентификатор.

имя_артефакта Строка | «undefined» — шаблон имени файла артефакта. По умолчанию $-$.$ (некоторые цели могут иметь другие значения по умолчанию, см. соответствующие параметры).

executableName Строка | «undefined» — имя исполняемого файла. По умолчанию productName .

сжатие = обычное «сохранение» | «нормальный» | «максимум» | «undefined» — уровень сжатия. Если вы хотите быстро протестировать сборку, магазин может значительно сократить время сборки.максимум не приводит к заметной разнице в размерах, но увеличивает время сборки.

files Конфигурация файлов.

extraResources Конфигурация дополнительных ресурсов.

extraFiles Конфигурация дополнительных файлов.

asar = true AsarOptions | логический | «undefined» — упаковывать ли исходный код приложения в архив, используя формат архива Electron.

Модули узла, которые должны быть распакованы, будут обнаружены автоматически, вам не нужно явно устанавливать asarUnpack — отправьте сообщение о проблеме, если это не сработает.

asarРаспаковать массив | Строка | «undefined» — шаблоны универсальных объектов относительно каталога приложения, которые указывают, какие файлы распаковывать при создании архива asar.

добавочная строка | Массив — расширение (минус начальная точка). например png .

имя Строка | «неопределенное» — Имя. например PNG По умолчанию расширение .

описание Строка | «undefined» — только для Windows. Описание.

MIMEType Строка | «undefined» — только для Linux. MIME-тип.

значок Строка | «undefined» — путь к значку (.icns для MacOS и .ico для Windows) относительно сборки (каталог ресурсов сборки). По умолчанию используется $.icns / $.ico (если указано несколько расширений, используется первое) или значок приложения.

Не поддерживается в Linux, при необходимости создайте файл (значок по умолчанию будет x-office-document ). Не поддерживается в MSI.

role = Editor String — только для macOS Роль приложения по отношению к типу. Значение может быть Editor , Viewer , Shell или None . Соответствует CFBundleTypeRole .

isPackage Boolean — только для macOS Распространяется ли документ в виде пакета. Если установлено значение true, каталог пакета рассматривается как файл. Соответствует LSTypeIsPackage .

rank = строка по умолчанию — только для macOS Рейтинг приложения по типу. Значение может быть Owner , Default , Alternate или None . Соответствует LSHandlerRank .

  • name Строка — имя. например URL-адрес IRC-сервера .
  • schemes Array — схемы. например ["irc", "ircs"] .
  • role = Редактор «Редактор» | «Зритель» | «Ракушка» | «Нет» — только для macOS роль приложения по отношению к типу.

forceCodeSigning Boolean — произойдет ли сбой, если приложение не будет подписано кодом.

electronUpdaterCompatibility String | «undefined» — диапазон совместимости с электронными обновлениями.

опубликовать Параметры публикации.

detectUpdateChannel = true Логическое значение — следует ли определять канал обновления из компонентов предварительной версии приложения. например если версия 0.12.1-alpha.1, для канала будет установлено значение alpha. В противном случае до последнего .

generateUpdatesFilesForAllChannels = false Логическое значение — см. раздел Создание и выпуск с использованием каналов.

releaseInfo — информация о выпуске. Предназначен для использования в командной строке:

  • имя_релиза Строка | «undefined» — название выпуска.
  • releaseNotes Строка | «не определено» — примечания к выпуску.
  • releaseNotesFile Строка | «undefined» — путь к файлу примечаний к выпуску. По умолчанию это release-notes-$.md (где платформа является текущей платформой — mac , linux или windows ) или release-notes.md в ресурсах сборки.
  • releaseDate String — дата выпуска.

Метаданные¶

Некоторые стандартные поля должны быть определены в package.json .

name String — имя приложения.

description String — описание приложения.

домашняя страница Строка | «undefined» — URL-адрес главной страницы проекта (проект пакета NuGet (необязательно) или URL-адрес пакета Linux (обязательно)).

лицензия Строка | «undefined» — только для Linux. Название лицензии.

Репозиторий Строка | Информация о репозитории | «undefined» — репозиторий.

build Configuration — конфигурация электронного сборщика.

Proton Native¶

Чтобы упаковать приложение Proton Native, задайте для параметра protonNodeVersion текущую или конкретную версию NodeJS, для которой вы упаковываете. В настоящее время поддерживаются только macOS и Linux.

Управление версиями сборки¶

CFBundleVersion (macOS) и FileVersion (Windows) будут автоматически установлены на version.build_number на сервере CI (поддерживаются Travis, AppVeyor, CircleCI и Bamboo).

Крюки¶

Во всех примерах предполагается, что вы используете последнюю версию Node.js 8.11.x или выше.

до упаковки¶

Функция (или путь к файлу или идентификатору модуля), которая должна быть запущена перед пакетом.

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

Файл myBeforePackHook.js в корневом каталоге проекта:

афтерпак¶

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

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

Файл myAfterPackHook.js в корневом каталоге проекта:

послезнак¶

Функция (или путь к файлу или идентификатору модуля), которая будет выполняться после упаковки и подписи (но до упаковки в распространяемый формат).

Настройка аналогична afterPack (см. выше).

afterAllArtifactBuild¶

Функция (или путь к файлу или идентификатору модуля), которая будет запущена после создания всех артефактов.

Настройка аналогична afterPack (см. выше).

onNodeModuleFile¶

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

Всем привет, сегодня я столкнулся с этой ошибкой. Эта операция не разрешена для недопустимого пакета диска в Windows Server 2008 R2 при восстановлении динамического диска. Перед заменой жесткого диска в рабочем компьютере я переделал диск с системой в динамический. Я установил новый диск в свой компьютер и начал устанавливать систему. Закончив, я подключил старый диск через переходник USB-SATA и приготовился копировать данные, как вдруг обнаружил, что диск в системе числится «недействительным»:

Заходим в управление дисками и видим, что наш диск находится в Динамическом недопустимом состоянии.

Контекстное меню диска предложило один более-менее подходящий вариант (преобразование динамического диска в базовый привело бы к потере данных) - выберите Переактивировать диск:

Попытка выполнить «повторную активацию» вернула ошибку. Эта операция не разрешена для недопустимого пакета диска

Решение: решение не было найдено сразу, потому что оно не было слишком очевидным.

Итак, запустим DMDE от имени администратора:

В появившемся меню выбора диска определите нужное вам устройство (у меня это Physical Drive 1) и нажмите OK:

По завершении операции инициализации появится окно с предложением выбрать раздел. Нас интересует нулевой сектор. Наведите на него курсор и нажмите «Закрыть»:

Включите режим редактирования с помощью меню «Правка» -> «Режим редактирования»:

Теперь замените значения 42h на 07h (как в обычном текстовом редакторе)

Открываем раздел «Дисковые устройства», выбираем диск, с которым мы производили последние манипуляции, отключаем его и снова включаем:

Управление дисками в Windows 7 — отличный инструмент для перераспределения места на локальных дисках, удаления локальных дисков, создания их. То есть по функционалу этот инструмент представляет собой практически облегченную версию таких программ, как Partition magic и других программ управления дисками. А теперь я покажу вам, как он управляется.

Мой план действий таков:

Как сказал Н.С. Хрущев, "Цели определены, задачи поставлены, за работу, товарищи!"

Инструмент управления дисками можно найти по следующему адресу: Пуск — Панель управления — Администрирование — Управление компьютером — Управление дисками. Верхний блок этого окна содержит список локальных дисков, нижний показывает распределение места между ними и всеми подключенными носителями.


Чтобы сжать локальный диск D, щелкните по нему правой кнопкой и выберите пункт «Сжать том». Появится такое окно



В этом окне выберите, насколько вам нужно сжать локальный диск, и мы сразу сможем увидеть, сколько места останется на этом диске. Итак, вводим размер, до которого будем сжимать диск и нажимаем «Сжать».

Через некоторое время внизу окна "Управление дисками" появится страшная черная область, но не пугайтесь, все идет по плану.


Это черная область, это нераспределенная область жесткого диска.

Первый пункт плана выполнен, переходим ко второму: Создание нового локального диска размером 25 ГБ. Для этого щелкните правой кнопкой мыши по этой черной области и выберите пункт «Создать простой том». Откроется «Мастер создания нового простого тома»






А вот и "Уляля".


Все получилось. Новый локальный диск 25 Гб. созданный.Более того, как только он будет создан, вам будет предложено его открыть, как будто вы вставили диск или флешку, это хорошо.

Перейдем к пункту 3. Давайте увеличим созданный локальный диск для оставшегося свободного места. Для этого щелкните правой кнопкой мыши на новом диске и выберите пункт «Расширить том». Откроется окно «Мастер расширения тома».




Итак, последний этап, чтобы вернуть все обратно, для этого необходимо удалить локальный диск "Уляля" и расширить диск D. Чтобы удалить локальный диск, щелкните правой кнопкой мыши на нужном диске и выберите пункт "Удалить том". .". Мы увидим предупреждение о том, что все данные на этом диске будут уничтожены.


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


Хочу также сказать, что расширить диск С за счет этой нераспределенной области было невозможно, т.к. расширение локального диска возможно только тогда, когда к нему примыкает нераспределенная область. То есть эта черная область должна располагаться рядом с локальным диском С. Но есть решение, хоть и немного "геморичное".

Для расширения диска С (в моей ситуации, когда он не примыкает к нераспределенной области) нужно: максимально сжать локальный диск D, создать новый том, перенести туда информацию с диска D, удалить локальный диск D, а затем расширить локальный диск C, затем присвоить букву D только что созданному разделу и расширить его на оставшееся место. Это такой долгий процесс. Удачи!

Разбить диск в Windows 7 можно с помощью встроенной утилиты Управление дисками, делать это очень удобно и не нужно прибегать к сторонним программам, так называемым менеджерам разделов, таким как Acronis. Но если честно, в особо интересных случаях, в которые любят вникать начинающие пользователи, а также при установке нескольких операционных систем, без этих программ все равно не обойтись. Чтобы показать вам все наглядно, я установил в системный блок дополнительный жесткий диск и на нем продемонстрирую вам, как это сделать.

Разметка диска в Windows 7

На написание этой статьи меня подтолкнуло письмо нашего посетителя, которое пришло мне на почту.

  • "Здравствуйте. Прочитал ваши статьи и себе семерку установил, представляете, но я просто переживал и забыл разбить диск на перед установкой на два раздела, один под операционку, другой под свою личные данные, у вас на сайте есть статьи, но я их понял для Windows XP, а как насчет меня?"

Итак, запускаем нашу программу: Пуск->Компьютер->Управление,


в этом окне вы можете увидеть всю информацию о жестких дисках, подключенных к вашему компьютеру. Используя возможности Управления Дисками, мы можем не только Разбить диск в Windows 7 на два и более раздела, но и увеличить размер томов, сжать их и удалить, присоединить, в общем без соответствующих знаний такие вещи можно быть сделано здесь, так что давайте будем осторожны.
В окне программы Управление дисками видно, что у меня три жестких диска.
Диск 0, это первый жесткий диск, отсчет идет не с единицы, а с нуля, помните. Его объем составляет 232,88 ГБ.
Диск 1-> второй жесткий диск в системе, его объем составляет 465,76 ГБ
Диск 2 -> третий жесткий диск, емкостью 232,88 ГБ, вы можете заметить, что его размер такой же, как первый.


Все операции будем проводить с диском номер 2, то есть с третьим, самым последним. Самое главное, Диск 2 не пустой, на нем файлы и не просто, а операционная система Windows 7, у меня их два, с ним ничего не должно произойти в процессе наших действий и все файлы останутся целыми и он загрузится .


Сначала разделите диск на две части, наведите указатель мыши на Диск 2 и щелкните правой кнопкой мыши том в раскрывающемся меню, выберите Сжать том,



Ответ программы Доступное пространство для сжатия -> 222361 МБ или приблизительно 217 ГБ.
Далее нам нужно указать, насколько мы будем сжимать -> Размер сжимаемого пространства цифра 222361 МБ или 217 ГБ,


если мы сейчас согласимся и нажмем Compress, то размер первого тома с операционной системой окажется очень маленьким, Общий размер после сжатия составляет >16112 МБ или 15 ГБ.


Поэтому, например, я сделаю два тома примерно одинаковыми и укажу размер 115361 МБ или 112 ГБ, как видите, он сразу изменился Общий размер после сжатия до цифры 123112 МБ или 120 ГБ, то есть , диск (D:) после сжатия будет иметь размер 120 ГБ, а нераспределенное пространство для нового раздела будет 112 ГБ.

Вы пытаетесь выполнить установку на диске, на котором либо нет места, либо нет прав на запись.

  • Освободить место на диске или
  • Установите папку tmp где-нибудь с большим пространством: npm config set tmp /path/to/big/drive/tmp или
  • Создайте Node самостоятельно и установите его в доступном для записи месте с большим количеством места.

Необходимо установить git. Или вам может потребоваться добавить информацию о git в свой профиль npm. Вы можете сделать это из командной строки или на веб-сайте. Дополнительную информацию см. в разделе «Управление настройками профиля».

Запуск Vagrant box в Windows завершается сбоем из-за проблем с длиной пути

@drmyersii прошел через множество болезненных проб и ошибок, чтобы найти работающее решение, включающее длинные пути Windows и некоторую пользовательскую конфигурацию Vagrant:

В приведенном выше коде я добавляю \\?\ к абсолютному пути к текущему каталогу. Это фактически заставит Windows API разрешить увеличение переменной MAX_PATH (обычно ограничено значением 260). Узнайте больше о максимальном пути. Это происходит во время создания общей папки, которая намеренно обрабатывается VBoxManage, а не методом Vagrant «synced_folder». Последний бит довольно понятен; мы создаем новую общую папку, а затем убеждаемся, что она монтируется каждый раз, когда к машине обращаются или трогают ее, поскольку Vagrant любит перезагружать свои монтирования/общие папки при каждой загрузке.

npm использует только URL-адреса git: и ssh+git: для репозиториев GitHub, ломая прокси-серверы

Я исправил эту проблему для нескольких моих коллег, выполнив следующие две команды:

Одна вещь, которую мы заметили, это то, что используемый .gitconfig не всегда соответствует ожидаемому, поэтому, если вы работаете на машине, которая изменила домашний путь к общему диску, вам необходимо убедиться, что ваш .gitconfig одинаков на обоих ваших общий диск и в c:\users\[ваш пользователь]\

Вы пытаетесь подключить SSL к незашифрованной конечной точке. Чаще всего это происходит из-за ошибки конфигурации прокси-сервера (см. также это полезное, хотя и устаревшее, руководство). В этом случае вам не нужно отключать strict-ssl — вам может понадобиться настроить файл CA / CA для использования с вашим прокси, но гораздо лучше потратить время на то, чтобы разобраться в этом, чем отключать защиту SSL.

Эта проблема возникает, если вы используете Node 0.6. Пожалуйста, обновитесь до Node 0.8 или выше. Подробнее см. в этом сообщении.

Вы также можете попробовать следующие обходные пути: npm config set ca "" или npm config set strict-ssl false

  • обновите версию npm npm install npm -g --ca=""
  • скажите вашей текущей версии npm использовать известные регистраторы npm config set ca=""

Не найдено/ошибка сервера

  • Скорее всего, это временный сбой реестра npm. Проверьте состояние сервера npm и повторите попытку позже.
  • Если ошибка повторяется, возможно, опубликованный пакет поврежден. Свяжитесь с владельцем пакета и попросите его опубликовать новую версию пакета.
  • Возможный временный сбой реестра npm или поврежденный кэш локального сервера. Очистите кеш npm и/или повторите попытку позже.
  • Это может быть вызвано корпоративными прокси-серверами, которые предоставляют HTML-ответы на запросы package.json. Проверьте конфигурацию прокси-сервера npm.
  • Убедитесь, что проблема не связана с пакетом, который вы пытаетесь установить (например, с неверным package.json ).

Много ошибок ENOENT/ENOTEMPTY в выводе

cb() никогда не вызывалась! при использовании сжатых зависимостей

ошибки входа в npm

Если проблема не в этом или вы видите сообщение "не следует смешивать password_sha и pbkdf2", тогда

и обычно это работает.

npm зависает в Windows на addRemoteTarball

Проверьте, установлены ли в вашем .npmrc два временных каталога:

Ищите строки, определяющие переменную конфигурации tmp. Если вы найдете более одного, удалите все, кроме одного.

В этом приложении описываются распространенные проблемы и ошибки, связанные с libvirt, а также инструкции по их устранению.

Найдите ошибку в таблице ниже и перейдите по соответствующей ссылке в разделе "Решение", чтобы получить подробные сведения об устранении неполадок.

Таблица А.1. Распространенные ошибки libvirt

Гость может общаться с другими гостями, но не может подключиться к хост-компьютеру после настройки на использование сетевого интерфейса macvtap (или type='direct').

А.19.1. libvirtd не удалось запустить

Примечание

Эта строка по умолчанию закомментирована, чтобы libvirt не создавал лишние сообщения журнала. После диагностики проблемы рекомендуется еще раз прокомментировать эту строку в файле /etc/libvirt/libvirtd.conf.

Справочная страница libvirtd показывает, что отсутствующий файл cacert.pem используется в качестве полномочий TLS, когда libvirt запускается в режиме прослушивания соединений TCP/IP. Это означает, что передается параметр --listen.

Примечание

Для получения дополнительной информации о сертификатах ЦС и настройке системной аутентификации см. главу "Управление сертификатами и центрами сертификации" в Руководстве по идентификации домена, аутентификации и политике Red Hat Enterprise Linux 7.

Не используйте TLS; вместо этого используйте голый TCP. В /etc/libvirt/libvirtd.conf установите listen_tls = 0 и listen_tcp = 1. Значения по умолчанию: listen_tls = 1 и listen_tcp = 0 .

Не передавайте параметр --listen. В /etc/sysconfig/libvirtd.conf измените переменную LIBVIRTD_ARGS.

А.19.2. URI не удалось подключиться к гипервизору

А.19.2.1. Не удается прочитать сертификат ЦС

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

При указании qemu://system или qemu://session в качестве URI подключения virsh пытается подключиться к системе или сеанс соответственно. Это связано с тем, что virsh распознает текст после второй косой черты как хост.

Используйте три косые черты для подключения к локальному хосту. Например, если указать qemu:///system, virsh подключится к экземпляру system libvirtd на локальном хосте.

URI правильный (например, qemu[+tls]://server/system ), но сертификаты неправильно настроены на вашем компьютере. Информацию о настройке TLS см. на веб-сайте основной ветки разработки libvirt.

А.19.2.2. не удалось подключиться к серверу по адресу 'host:16509': в соединении отказано

Демон libvirt не прослушивает порты TCP даже после изменения конфигурации в /etc/libvirt/libvirtd.conf:

А.19.2.3. Ошибка аутентификации

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

Отредактируйте файл /etc/libvirt/libvirtd.conf и задайте для параметра auth_tcp значение sasl . Чтобы проверить:

А.19.2.4. Разрешение отклонено

А.19.3. Ошибка загрузки PXE (или DHCP) в гостевой системе

Гостевая виртуальная машина запускается успешно, но затем либо не может получить IP-адрес от DHCP, либо загружается с использованием протокола PXE, либо и то, и другое. Существует две распространенные причины этой ошибки: установленное для моста длительное время задержки пересылки и когда пакет iptables и ядро ​​не поддерживают правила изменения контрольной суммы.

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

Если задержка пересылки больше времени ожидания PXE- или DHCP-клиента гостя, операция клиента завершится ошибкой, и гость либо не сможет загрузиться (в случае PXE), либо не сможет получить IP-адрес (в случае в случае DHCP).

В этом случае измените задержку пересылки на мосту на 0, отключите STP на мосту или и то, и другое.

Примечание

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

Если у гостя есть интерфейсы, подключающиеся к виртуальной сети, управляемой libvirt, отредактируйте определение сети и перезапустите ее. Например, отредактируйте сеть по умолчанию с помощью следующей команды:

Примечание

delay='0' и stp='on' являются настройками по умолчанию для виртуальных сетей, поэтому этот шаг необходим только в том случае, если конфигурация по умолчанию была изменена.

Если гостевой интерфейс подключен к хост-мосту, настроенному вне libvirt, измените настройку задержки.

Добавьте или отредактируйте следующие строки в файле /etc/sysconfig/network-scripts/ifcfg-name_of_bridge, чтобы включить STP с задержкой в ​​0 секунд:

Примечание

Если name_of_bridge не является корневым мостом в сети, задержка этого моста в конечном итоге будет сброшена до времени задержки, настроенного для корневого моста. Чтобы этого не произошло, отключите STP на name_of_bridge.

Гость пытается получить IP-адрес от DHCP-сервера, работающего непосредственно на узле.

iptables 1.4.10 была первой версией, в которую было добавлено расширение libxt_CHECKSUM. Это происходит, если в журналах libvirtd появляется следующее сообщение:

Важно

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

При возникновении этих условий UDP-пакеты, отправляемые с хоста гостю, имеют невычисленные контрольные суммы. Из-за этого UDP-пакеты хоста кажутся недействительными для гостевого сетевого стека.

Чтобы решить эту проблему, отмените любой из четырех пунктов выше. Лучшее решение — обновить iptables хоста и ядро ​​до iptables-1.4.10 или новее, если это возможно. В противном случае наиболее конкретным решением является отключение драйвера vhost-net для этого конкретного гостя. Для этого отредактируйте гостевую конфигурацию с помощью этой команды:

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

Чтобы исправить это, остановите firewalld с помощью команды service firewalld stop, а затем перезапустите libvirt с помощью команды service libvirtd restart.

Примечание

Кроме того, если файл /etc/sysconfig/network-scripts/ifcfg-имя_сети настроен правильно, вы можете убедиться, что гость получит IP-адрес, используя команду dhclient от имени пользователя root на гость.

А.19.4. Гость может получить доступ к внешней сети, но не может получить доступ к хосту при использовании интерфейса macvtap

Гостевая виртуальная машина может взаимодействовать с другими гостями, но не может подключаться к хост-машине после настройки на использование сетевого интерфейса macvtap (также известного как type='direct').

Даже если вы не подключаетесь к агрегатору портов виртуального Ethernet (VEPA) или коммутатору с поддержкой VN-Link, интерфейсы macvtap могут быть полезны. Установка режима моста для такого интерфейса позволяет гостевой системе напрямую подключаться к физической сети очень простым способом без проблем с настройкой (или несовместимости с NetworkManager), которые могут сопровождать использование традиционного хост-устройства моста.

Однако, когда гостевая виртуальная машина настроена на использование сетевого интерфейса type='direct', такого как macvtap, несмотря на то, что у нее есть возможность общаться с другими гостями и другими внешними хостами в сети, гость не может общаться со своими хост.

Эта ситуация на самом деле не является ошибкой — это определенное поведение macvtap. Из-за того, что физический Ethernet хоста подключен к мосту macvtap, трафик на этот мост от гостей, который перенаправляется на физический интерфейс, не может быть возвращен обратно в стек IP хоста. Кроме того, трафик из стека IP хоста, который отправляется на физический интерфейс, не может быть возвращен обратно на мост macvtap для пересылки гостям.

Используйте libvirt для создания изолированной сети и создайте второй интерфейс для каждой гостевой виртуальной машины, подключенной к этой сети. Затем хост и гости могут напрямую общаться через эту изолированную сеть, сохраняя при этом совместимость с NetworkManager .

Процедура А.8. Создание изолированной сети с помощью libvirt

Добавьте и сохраните следующий XML-код в файле /tmp/isolated.xml. Если сеть 192.168.254.0/24 уже используется в вашей сети, вы можете выбрать другую сеть.

Рисунок А.3. Изолированный сетевой XML

Используя virsh edit name_of_guest, отредактируйте конфигурацию каждого гостя, использующего macvtap для своего сетевого подключения, и добавьте новое в раздел, аналогичный следующему (обратите внимание, что эта строка не является обязательной):< /p>

Рисунок А.4. XML устройства интерфейса

Теперь гости могут связаться с хостом по адресу 192.168.254.1, а хост сможет связаться с гостями по IP-адресу, который они получили от DHCP (или вы можете вручную настроить IP-адреса для гостей). ). Поскольку эта новая сеть изолирована только для хоста и гостей, все остальные сообщения от гостей будут использовать интерфейс macvtap. Для получения дополнительной информации см. Раздел 23.17.8, «Сетевые интерфейсы».

А.19.5. Не удалось добавить правило для исправления контрольных сумм ответов DHCP в сети 'default'

Если проблема, с которой вы столкнулись, заключается в том, что гостевые виртуальные машины не могут получить IP-адреса через DHCP, это сообщение можно игнорировать.

Если это так, см. раздел A.19.3, «Сбой загрузки PXE (или DHCP) на гостевой системе» для получения дополнительной информации об этой ситуации.

А.19.6. Не удалось добавить мост br0 порт vnet0: нет такого устройства

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

Чтобы убедиться, что мостовое устройство, указанное в сообщении об ошибке, не существует, используйте команду оболочки ip addr show br0 .

Используйте virsh либо для редактирования настроек существующего моста или сети, либо для добавления устройства моста в конфигурацию хост-системы.

Используйте virsh edit name_of_guest, чтобы изменить определение для использования уже существующего моста или сети.

Для libvirt версии 0.9.8 и выше устройство-мост можно создать с помощью команды virsh iface-bridge. Это создает мостовое устройство br0 с подключенным eth0 , физическим сетевым интерфейсом, который установлен как часть моста:

Необязательно: при необходимости удалите этот мост и восстановите исходную конфигурацию eth0 с помощью этой команды:

Для более старых версий libvirt можно вручную создать мостовое устройство на хосте. Инструкции см. в разделе 6.4.3, «Сетевые мосты с помощью libvirt».

А.19.7. Миграция завершается с ошибкой: невозможно определить адрес

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

В этом случае хосту назначения ( 192.168.122.12 ) присвоено имя 'newyork'. По какой-то причине libvirtd, запущенный на этом хосте, не может преобразовать имя в IP-адрес, который можно было бы отправить обратно и при этом по-прежнему использовать. По этой причине он вернул имя хоста 'newyork', надеясь, что исходный libvirtd справится с разрешением имени более успешно. Это может произойти, если DNS настроен неправильно или в файле /etc/hosts имя хоста связано с локальным петлевым адресом ( 127.0.0.1 ).

Обратите внимание, что адрес, используемый для переноса данных, не может быть автоматически определен из адреса, используемого для подключения к целевому libvirtd (например, из qemu+tcp://192.168.122.12/system ). Это связано с тем, что для связи с целевым libvirtd исходному libvirtd может потребоваться использовать сетевую инфраструктуру, отличную от типа, который требуется virsh (возможно, работающему на отдельной машине).

Лучшее решение — правильно настроить DNS, чтобы все хосты, участвующие в миграции, могли разрешать все имена хостов.

Если DNS нельзя настроить для этого, список всех хостов, используемых для миграции, можно добавить вручную в файл /etc/hosts на каждом из хостов. Однако трудно поддерживать согласованность таких списков в динамической среде.

Если имена хостов нельзя сделать разрешимыми каким-либо образом, virsh migrate поддерживает указание хоста миграции:

Назначение libvirtd примет URI tcp://192.168.122.12 и добавит автоматически сгенерированный номер порта. Если это нежелательно (например, из-за настроек брандмауэра), номер порта можно указать в этой команде:

Еще один вариант — использовать туннельную миграцию. Туннелированная миграция не создает отдельного соединения для данных миграции, а вместо этого туннелирует данные через соединение, используемое для связи с целевым libvirtd (например, qemu+tcp://192.168.122.12/system ):

А.19.8. Сбой переноса из-за невозможности разрешить доступ к пути к диску: нет такого файла или каталога

Гостевая виртуальная машина (или домен) не может быть перенесена, так как libvirt не может получить доступ к образу(ам) диска:

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

Настройте и подключите общее хранилище в одном месте на обоих хостах. Самый простой способ сделать это — использовать NFS:

Процедура A.9. Настройка общего хранилища

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

Смонтируйте экспортированный каталог в общем месте на всех хостах, на которых работает libvirt. Например, если IP-адрес сервера NFS — 192.168.122.1, смонтируйте каталог с помощью следующих команд:

Примечание

Невозможно экспортировать локальный каталог с одного хоста с помощью NFS и смонтировать его по тому же пути на другом хосте — каталог, используемый для хранения образов дисков, должен быть смонтирован из общего хранилища на обоих хостах.Если это не настроено правильно, гостевая виртуальная машина может потерять доступ к своим образам дисков во время миграции, потому что демон libvirt исходного хоста может изменить владельца, разрешения и метки SELinux на образах дисков после того, как он успешно мигрирует гостя к месту назначения. .

Если libvirt обнаружит, что образы дисков смонтированы из общего хранилища, эти изменения не будут внесены.

А.19.9. При запуске libvirtd отсутствуют гостевые виртуальные машины

Существуют различные возможные причины этой проблемы. Выполнение этих тестов поможет определить причину этой ситуации:

Если вы используете машину AMD, убедитесь, что модули ядра kvm_amd вместо этого вставлены в ядро, используя аналогичную команду lsmod | grep kvm_amd в корневой оболочке.

Примечание

Хотя это редкость, поддержка виртуализации KVM может быть скомпилирована в ядро. В этом случае модули не нужны.

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

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

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

А.19.10. Распространенные ошибки XML

Инструмент libvirt использует XML-документы для хранения структурированных данных. Множество распространенных ошибок возникает с документами XML, когда они передаются в libvirt через API. Несколько распространенных ошибок XML, включая ошибочные теги XML, недопустимые значения и отсутствующие элементы, подробно описаны ниже.

А.19.10.1. Редактирование определения домена

Хотя это не рекомендуется, иногда необходимо отредактировать XML-файл гостевой виртуальной машины (или домена) вручную. Чтобы получить доступ к гостевому XML для редактирования, используйте следующую команду:

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

Важно

При использовании команды редактирования в virsh для редактирования XML-документа сохраните все изменения перед выходом из редактора.

После сохранения XML-файла используйте команду xmllint, чтобы проверить правильность формата XML, или команду virt-xml-validate, чтобы проверить наличие проблем с использованием:

Если ошибки не возвращаются, XML-описание правильно сформировано и соответствует схеме libvirt. Хотя схема не учитывает все ограничения, исправление обнаруженных ошибок улучшит устранение неполадок.

Эти документы содержат определения состояний и конфигураций для гостей. Эти документы создаются автоматически и не должны редактироваться вручную. Ошибки в этих документах содержат имя файла поврежденного документа. Имя файла допустимо только на хост-компьютере, указанном в URI, который может видеть компьютер, на котором была запущена команда.

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

А.19.10.2. Ошибки синтаксиса XML

Синтаксические ошибки обнаруживаются синтаксическим анализатором XML. Сообщение об ошибке содержит информацию для определения проблемы.

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

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

Читайте также: