summaryrefslogtreecommitdiffstats
path: root/perl-install/install/share/po/ru.po
diff options
context:
space:
mode:
authorAlexey Loginov <alexl@mageia.org>2016-01-03 14:56:07 +0300
committerAlexey Loginov <alexl@mageia.org>2016-01-03 14:56:07 +0300
commitc6b45b3a493f1ef79c20cd223c40db5069f30f01 (patch)
treeec36c25f1024e8b2c78ea369ac066099590f5ea9 /perl-install/install/share/po/ru.po
parent8ea66a51d5403af699c975433cfa95188c1206a2 (diff)
downloaddrakx-c6b45b3a493f1ef79c20cd223c40db5069f30f01.tar
drakx-c6b45b3a493f1ef79c20cd223c40db5069f30f01.tar.gz
drakx-c6b45b3a493f1ef79c20cd223c40db5069f30f01.tar.bz2
drakx-c6b45b3a493f1ef79c20cd223c40db5069f30f01.tar.xz
drakx-c6b45b3a493f1ef79c20cd223c40db5069f30f01.zip
Update Russian translation
Diffstat (limited to 'perl-install/install/share/po/ru.po')
-rw-r--r--perl-install/install/share/po/ru.po261
1 files changed, 69 insertions, 192 deletions
diff --git a/perl-install/install/share/po/ru.po b/perl-install/install/share/po/ru.po
index 75cd8eef2..4be0af739 100644
--- a/perl-install/install/share/po/ru.po
+++ b/perl-install/install/share/po/ru.po
@@ -1,33 +1,31 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-#
+#
# Translators:
# akdengi <kazancas@gmail.com>, 2008
# Alexander Kazancev <kazancas@mandriva.ru>, 2008-2009
# Alexander Kazancev <kazancas@gmail.com>, 2008
# Alexander Kuzmenkov <rc@mezon.ru>, 2007
+# AlexL <loginov.alex.valer@gmail.com>, 2016
# Alice Lafox <alice@lafox.com.ua>, 2003
# Alice Lafox <alice@lafox.net>, 2004-2005
# Boris Zhalilo <daviongm@gmail.com>, 2014
# Анатолий Валерианович <ffox909@mail.ru>, 2014
+# Valentin XliN Saikov <saikov.vb@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: Mageia\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-01-02 14:54+0100\n"
-"PO-Revision-Date: 2015-06-23 14:14+0300\n"
+"PO-Revision-Date: 2016-01-02 17:47+0000\n"
"Last-Translator: AlexL <loginov.alex.valer@gmail.com>\n"
-"Language-Team: Russian (http://www.transifex.com/projects/p/mageia/language/"
-"ru/)\n"
-"Language: ru\n"
+"Language-Team: Russian (http://www.transifex.com/MageiaLinux/mageia/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
-"%100>=11 && n%100<=14)? 2 : 3);\n"
-"X-Generator: Poedit 1.6.9\n"
+"Language: ru\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#: ../../advertising/01_IM_mageia.pl:1
#, c-format
@@ -84,7 +82,8 @@ msgstr "Будьте свободными!"
msgid "Do you have further supplementary media?"
msgstr "Есть дополнительный носитель?"
-#. -PO: keep the double empty lines between sections, this is formatted a la LaTeX
+#. -PO: keep the double empty lines between sections, this is formatted a la
+#. LaTeX
#: any.pm:154
#, c-format
msgid ""
@@ -92,12 +91,7 @@ msgid ""
"\n"
"\n"
"Do you have a supplementary installation medium to configure?"
-msgstr ""
-"Был найден следующий носитель, который будет использован во время установки: "
-"%s.\n"
-"\n"
-"\n"
-"Если ли дополнительный носитель для настройки?"
+msgstr "Был найден следующий носитель, который будет использован во время установки: %s.\n\n\nЕсли ли дополнительный носитель для настройки?"
#: any.pm:162
#, c-format
@@ -127,16 +121,12 @@ msgstr "Адрес должен начинаться с ftp:// или http://"
#: any.pm:247
#, c-format
msgid "Contacting %s web site to get the list of available mirrors..."
-msgstr ""
-"Устанавливается соединение с веб-сайтом %s для загрузки списка доступных "
-"пакетов..."
+msgstr "Устанавливается соединение с веб-сайтом %s для загрузки списка доступных пакетов..."
#: any.pm:252
#, c-format
msgid "Failed contacting %s web site to get the list of available mirrors"
-msgstr ""
-"Не удалось соединиться с веб-сайтом %s, чтобы загрузить список доступных "
-"зеркал"
+msgstr "Не удалось соединиться с веб-сайтом %s, чтобы загрузить список доступных зеркал"
#: any.pm:262
#, c-format
@@ -183,9 +173,7 @@ msgstr "Дополнительный"
msgid ""
"Can't find a package list file on this mirror. Make sure the location is "
"correct."
-msgstr ""
-"Невозможно найти список пакетов на этом зеркале. Проверьте правильность "
-"адреса."
+msgstr "Невозможно найти список пакетов на этом зеркале. Проверьте правильность адреса."
#: any.pm:391
#, c-format
@@ -205,12 +193,9 @@ msgstr "Nonfree Release"
#: any.pm:433
#, c-format
msgid ""
-"Some hardware on your machine needs some non free firmwares in order for the "
-"free software drivers to work."
-msgstr ""
-"Для работы части оборудования на компьютере следует установить "
-"микропрограммы с закрытым кодом, необходимые для работы драйверов с открытым "
-"кодом."
+"Some hardware on your machine needs some non free firmwares in order for the"
+" free software drivers to work."
+msgstr "Для работы части оборудования на компьютере следует установить микропрограммы с закрытым кодом, необходимые для работы драйверов с открытым кодом."
#: any.pm:434
#, c-format
@@ -232,28 +217,20 @@ msgstr "В \"%s\" содержатся несвободные программы
msgid ""
"It also contains firmwares needed for certain devices to operate (eg: some "
"ATI/AMD graphic cards, some network cards, some RAID cards, ...)"
-msgstr ""
-"Там также содержатся пакеты с микрокодом, необходимым для работы некоторых "
-"устройств (например, некоторых видеокарт ATI/AMD, некоторых сетевых карт, "
-"некоторых карт RAID, ...)"
+msgstr "Там также содержатся пакеты с микрокодом, необходимым для работы некоторых устройств (например, некоторых видеокарт ATI/AMD, некоторых сетевых карт, некоторых карт RAID, ...)"
#: any.pm:475
#, c-format
msgid ""
-"\"%s\" contains software that can not be distributed in every country due to "
-"software patents."
-msgstr ""
-"В \"%s\" содержатся пакеты с программным обеспечением, которое нельзя "
-"свободно распространять в некоторых странах из-за нарушения патентных прав "
-"на это программное обеспечение."
+"\"%s\" contains software that can not be distributed in every country due to"
+" software patents."
+msgstr "В \"%s\" содержатся пакеты с программным обеспечением, которое нельзя свободно распространять в некоторых странах из-за нарушения патентных прав на это программное обеспечение."
#: any.pm:476
#, c-format
msgid ""
"It also contains software from \"%s\" rebuild with additional capabilities."
-msgstr ""
-"Также в \"%s\" содержатся пакеты, собранные с дополнительными возможностями, "
-"использование которых ограничивается патентами."
+msgstr "Также в \"%s\" содержатся пакеты, собранные с дополнительными возможностями, использование которых ограничивается патентами."
#: any.pm:482
#, c-format
@@ -280,7 +257,8 @@ msgstr "Выполняется поиск пакетов для обновлен
msgid "Removing packages prior to upgrade..."
msgstr "Удаляются пакеты перед обновлением..."
-#. -PO: keep the double empty lines between sections, this is formatted a la LaTeX
+#. -PO: keep the double empty lines between sections, this is formatted a la
+#. LaTeX
#: any.pm:881
#, c-format
msgid ""
@@ -288,11 +266,7 @@ msgid ""
"\n"
"\n"
"Do you really want to remove these packages?\n"
-msgstr ""
-"Следующие пакеты должны быть удалены, чтобы можно было обновить систему: %s\n"
-"\n"
-"\n"
-"Удалить эти пакеты?\n"
+msgstr "Следующие пакеты должны быть удалены, чтобы можно было обновить систему: %s\n\n\nУдалить эти пакеты?\n"
#: any.pm:1096
#, c-format
@@ -384,10 +358,7 @@ msgstr "Также необходимо отформатировать %s"
msgid ""
"Some hardware on your computer needs ``proprietary'' drivers to work.\n"
"You can find some information about them at: %s"
-msgstr ""
-"Для нормальной работы некоторых устройств компьютера требуются\n"
-"«несвободные» драйверы.\n"
-"Информация о них доступна на сайте %s"
+msgstr "Для нормальной работы некоторых устройств компьютера требуются\n«несвободные» драйверы.\nИнформация о них доступна на сайте %s"
#: interactive.pm:22
#, c-format
@@ -452,9 +423,7 @@ msgstr "Получения данных о пакетах из метаданн
#: pkgs.pm:111
#, c-format
msgid "No xml info for medium \"%s\", only partial result for package %s"
-msgstr ""
-"для источника «%s» отсутствует xml-info; для пакета %s получен только "
-"частичный результат"
+msgstr "для источника «%s» отсутствует xml-info; для пакета %s получен только частичный результат"
#: pkgs.pm:119
#, c-format
@@ -466,9 +435,7 @@ msgstr "Описания нет"
msgid ""
"Some packages requested by %s cannot be installed:\n"
"%s"
-msgstr ""
-"Некоторые пакеты, запрошенные %s, не могут быть установлены:\n"
-"%s"
+msgstr "Некоторые пакеты, запрошенные %s, не могут быть установлены:\n%s"
#: pkgs.pm:384 pkgs.pm:411
#, c-format
@@ -510,10 +477,7 @@ msgstr "Офисная рабочая станция"
msgid ""
"Office programs: wordprocessors (LibreOffice Writer, Kword), spreadsheets "
"(LibreOffice Calc, Kspread), PDF viewers, etc"
-msgstr ""
-"Офисные программы: текстовые процессоры (LibreOffice Writer, Kword), "
-"электронные таблицы (LibreOffice Calc, Kspread), программы для просмотра pdf "
-"и т.д."
+msgstr "Офисные программы: текстовые процессоры (LibreOffice Writer, Kword), электронные таблицы (LibreOffice Calc, Kspread), программы для просмотра pdf и т.д."
#: share/meta-task/compssUsers.pl:26
#, c-format
@@ -545,8 +509,7 @@ msgstr "Интернет-компьютер"
msgid ""
"Set of tools to read and send mail and news (mutt, tin..) and to browse the "
"Web"
-msgstr ""
-"Набор программ для работы с корреспонденцией (mutt, tin...) и веб-серфинга"
+msgstr "Набор программ для работы с корреспонденцией (mutt, tin...) и веб-серфинга"
#: share/meta-task/compssUsers.pl:42
#, c-format
@@ -730,18 +693,16 @@ msgid "Graphical Environment"
msgstr "Графическое окружение"
#: share/meta-task/compssUsers.pl:152
-#, fuzzy, c-format
+#, c-format
msgid "Plasma Workstation"
-msgstr "Рабочая станция"
+msgstr "Рабочая станция Plasma"
#: share/meta-task/compssUsers.pl:153
#, c-format
msgid ""
-"The K Desktop Environment, the basic graphical environment with a collection "
-"of accompanying tools"
-msgstr ""
-"K Desktop Environment - основная графическая среда с коллекцией "
-"сопроводительных утилит"
+"The K Desktop Environment, the basic graphical environment with a collection"
+" of accompanying tools"
+msgstr "K Desktop Environment - основная графическая среда с коллекцией сопроводительных утилит"
#: share/meta-task/compssUsers.pl:158
#, c-format
@@ -753,9 +714,7 @@ msgstr "Рабочая станция Gnome"
msgid ""
"A graphical environment with user-friendly set of applications and desktop "
"tools"
-msgstr ""
-"Графическая среда с удобным для пользователя набором приложений и утилит "
-"рабочего стола"
+msgstr "Графическая среда с удобным для пользователя набором приложений и утилит рабочего стола"
#: share/meta-task/compssUsers.pl:164
#, c-format
@@ -767,8 +726,7 @@ msgstr "Рабочая станция XFCE"
msgid ""
"A lighter graphical environment with user-friendly set of applications and "
"desktop tools"
-msgstr ""
-"Более лёгкая графическая среда с удобным набором приложений и инструментов"
+msgstr "Более лёгкая графическая среда с удобным набором приложений и инструментов"
#: share/meta-task/compssUsers.pl:169
#, c-format
@@ -870,22 +828,15 @@ msgstr "Мастеры настройки сервера"
msgid ""
"An error occurred, but I do not know how to handle it nicely.\n"
"Continue at your own risk."
-msgstr ""
-"Произошла ошибка, но я не знаю, как её корректно обработать.\n"
-"Продолжайте на свой собственный страх и риск."
+msgstr "Произошла ошибка, но я не знаю, как её корректно обработать.\nПродолжайте на свой собственный страх и риск."
#: steps.pm:460
#, c-format
msgid ""
"Some important packages did not get installed properly.\n"
"Either your cdrom drive or your cdrom is defective.\n"
-"Check the cdrom on an installed computer using \"rpm -qpl media/main/*.rpm"
-"\"\n"
-msgstr ""
-"Некоторые важные пакеты установились некорректно.\n"
-"Повреждён привод CDROM или компакт-диск.\n"
-"Проверьте вставленный в компьютер диск с помощью команды \"rpm -qpl media/"
-"main/*.rpm\"\n"
+"Check the cdrom on an installed computer using \"rpm -qpl media/main/*.rpm\"\n"
+msgstr "Некоторые важные пакеты установились некорректно.\nПовреждён привод CDROM или компакт-диск.\nПроверьте вставленный в компьютер диск с помощью команды \"rpm -qpl media/main/*.rpm\"\n"
#: steps_auto_install.pm:71 steps_stdio.pm:27
#, c-format
@@ -913,11 +864,7 @@ msgid ""
"Your system is low on resources. You may have some problem installing\n"
"%s. If that occurs, you can try a text install instead. For this,\n"
"press `F1' when booting on CDROM, then enter `text'."
-msgstr ""
-"Системе не хватает ресурсов. Во время установки %s могут\n"
-"возникнуть проблемы. В этом случае можно попробовать установку в\n"
-"текстовом режиме. Для этого после загрузки с диска нажмите `F1',\n"
-"а затем наберите 'text'."
+msgstr "Системе не хватает ресурсов. Во время установки %s могут\nвозникнуть проблемы. В этом случае можно попробовать установку в\nтекстовом режиме. Для этого после загрузки с диска нажмите `F1',\nа затем наберите 'text'."
#: steps_gtk.pm:242 steps_gtk.pm:754
#, c-format
@@ -1145,22 +1092,14 @@ msgstr "не настроен"
msgid ""
"The following installation media have been found.\n"
"If you want to skip some of them, you can unselect them now."
-msgstr ""
-"Найдены следующие источники для установки.\n"
-"Если нужно пропустить некоторые из них, сейчас с них можно снять флажки."
+msgstr "Найдены следующие источники для установки.\nЕсли нужно пропустить некоторые из них, сейчас с них можно снять флажки."
#: steps_gtk.pm:779 steps_interactive.pm:321
#, c-format
msgid ""
-"You have the option to copy the contents of the CDs onto the hard disk drive "
-"before installation.\n"
-"It will then continue from the hard disk drive and the packages will remain "
-"available once the system is fully installed."
-msgstr ""
-"Содержимое компакт-диска перед установкой можно скопировать на жёсткий "
-"диск.\n"
-"После этого установка продолжится с жёсткого диска, и пакеты будут доступны "
-"после полной установки системы."
+"You have the option to copy the contents of the CDs onto the hard disk drive before installation.\n"
+"It will then continue from the hard disk drive and the packages will remain available once the system is fully installed."
+msgstr "Содержимое компакт-диска перед установкой можно скопировать на жёсткий диск.\nПосле этого установка продолжится с жёсткого диска, и пакеты будут доступны после полной установки системы."
#: steps_gtk.pm:781 steps_interactive.pm:323
#, c-format
@@ -1234,39 +1173,25 @@ msgid ""
"\n"
"Warning : you should backup all your personal data before choosing \"New\n"
"Installation\"."
-msgstr ""
-"Установщик обнаружил, что существующая установка Mageia не\n"
-"может быть безопасно обновлена на %s.\n"
-"\n"
-"Рекомедуется заново установить систему, заменив существующую.\n"
-"\n"
-"Внимание: вы должны сделать копию всех ваших персональных данных, перед "
-"выбором \"Новая\n"
-"Установка\"."
+msgstr "Установщик обнаружил, что существующая установка Mageia не\nможет быть безопасно обновлена на %s.\n\nРекомедуется заново установить систему, заменив существующую.\n\nВнимание: вы должны сделать копию всех ваших персональных данных, перед выбором \"Новая\nУстановка\"."
#: steps_interactive.pm:264
#, c-format
msgid "CD/DVD"
-msgstr ""
+msgstr "CD/DVD"
#: steps_interactive.pm:264
-#, fuzzy, c-format
+#, c-format
msgid "Configuring CD/DVD"
-msgstr "Настраивается IDE"
+msgstr "Настройка CD/DVD"
#: steps_interactive.pm:354
#, c-format
msgid ""
"Change your Cd-Rom!\n"
-"Please insert the Cd-Rom labelled \"%s\" in your drive and press Ok when "
-"done.\n"
+"Please insert the Cd-Rom labelled \"%s\" in your drive and press Ok when done.\n"
"If you do not have it, press Cancel to avoid installation from this Cd-Rom."
-msgstr ""
-"Смените компакт-диск!\n"
-"\n"
-"Вставьте в привод компакт-диск под названием \"%s\", а затем нажмите 'ОК'.\n"
-"Если у вас его нет, нажмите 'Отмена', чтобы отказаться от установки с этого "
-"диска."
+msgstr "Смените компакт-диск!\n\nВставьте в привод компакт-диск под названием \"%s\", а затем нажмите 'ОК'.\nЕсли у вас его нет, нажмите 'Отмена', чтобы отказаться от установки с этого диска."
#: steps_interactive.pm:372
#, c-format
@@ -1278,18 +1203,14 @@ msgstr "Поиск доступных пакетов..."
msgid ""
"Your system does not have enough space left for installation or upgrade "
"(%dMB > %dMB)"
-msgstr ""
-"В вашей системе недостаточно свободного дискового пространства для установки "
-"или обновления (%d МБ > %d МБ)"
+msgstr "В вашей системе недостаточно свободного дискового пространства для установки или обновления (%d МБ > %d МБ)"
#: steps_interactive.pm:428
#, c-format
msgid ""
"Please choose load or save package selection.\n"
"The format is the same as auto_install generated files."
-msgstr ""
-"Выберите загрузку или сохранение выбора пакетов.\n"
-"Формат файлов такой же, как и у созданных при автоматической установке."
+msgstr "Выберите загрузку или сохранение выбора пакетов.\nФормат файлов такой же, как и у созданных при автоматической установке."
#: steps_interactive.pm:430
#, c-format
@@ -1341,9 +1262,7 @@ msgstr "Тип установки"
msgid ""
"You have not selected any group of packages.\n"
"Please choose the minimal installation you want:"
-msgstr ""
-"Не была выбрана ни одна группа пакетов.\n"
-"Выберите тип минимальной установки:"
+msgstr "Не была выбрана ни одна группа пакетов.\nВыберите тип минимальной установки:"
#: steps_interactive.pm:578
#, c-format
@@ -1433,12 +1352,12 @@ msgstr "Обновления"
#: steps_interactive.pm:740
#, c-format
msgid "You now have the opportunity to setup online media."
-msgstr "Теперь у вас есть возможность сконфигурировать интернет источники."
+msgstr "Теперь вы можете настроить сетевые хранилища пакетов."
#: steps_interactive.pm:741
#, c-format
msgid "This allows to install security updates."
-msgstr "Это позволяет установить обновления безопасности."
+msgstr "Это дает возможность устанавливать обновления безопасности."
#: steps_interactive.pm:742
#, c-format
@@ -1447,21 +1366,17 @@ msgid ""
"connection.\n"
"\n"
"Do you want to setup the update media?"
-msgstr ""
-"Чтобы сконфигурировать эти источники вы должны иметь \n"
-"работающее интернет соединение.\n"
-"\n"
-"Вы хотите сконфигурировать источники с обновлениями?"
+msgstr "Для настройки хранилищ пакетов вам понадобится работающее\nинтернет соединение.\nХотите настроить хранилище пакетов для обновления?"
#: steps_interactive.pm:762
-#, fuzzy, c-format
+#, c-format
msgid "Failure when adding medium"
-msgstr "не удалось добавить источник"
+msgstr "Не удалось добавить источник"
#: steps_interactive.pm:762
-#, fuzzy, c-format
+#, c-format
msgid "Retry?"
-msgstr "Повторить"
+msgstr "Повторить попытку?"
#: steps_interactive.pm:770
#, c-format
@@ -1474,15 +1389,7 @@ msgid ""
"connection.\n"
"\n"
"Do you want to install the updates?"
-msgstr ""
-"Сейчас можно загрузить обновлённые пакеты. Эти пакеты были обновлены после\n"
-"выхода дистрибутива. В них могут находиться исправления уязвимостей\n"
-"и других ошибок.\n"
-"\n"
-"Для загрузки этих пакетов необходимо наличие рабочего подключения\n"
-"к Интернету.\n"
-"\n"
-"Установить эти обновления?"
+msgstr "Сейчас можно загрузить обновлённые пакеты. Эти пакеты были обновлены после\nвыхода дистрибутива. В них могут находиться исправления уязвимостей\nи других ошибок.\n\nДля загрузки этих пакетов необходимо наличие рабочего подключения\nк Интернету.\n\nУстановить эти обновления?"
#. -PO: example: lilo-graphic on /dev/hda1
#: steps_interactive.pm:878
@@ -1509,18 +1416,14 @@ msgstr "Есть ли у вас звуковая карта ISA?"
#: steps_interactive.pm:956
#, c-format
msgid ""
-"Run \"alsaconf\" or \"sndconfig\" after installation to configure your sound "
-"card"
-msgstr ""
-"Для настройки звуковой карты запустите после установки утилиту \"alsaconf\" "
-"или \"sndconfig\"."
+"Run \"alsaconf\" or \"sndconfig\" after installation to configure your sound"
+" card"
+msgstr "Для настройки звуковой карты запустите после установки утилиту \"alsaconf\" или \"sndconfig\"."
#: steps_interactive.pm:958
#, c-format
msgid "No sound card detected. Try \"harddrake\" after installation"
-msgstr ""
-"Звуковая карта не обнаружена. Попробуйте запустить после установки утилиту "
-"\"harddrake\" "
+msgstr "Звуковая карта не обнаружена. Попробуйте запустить после установки утилиту \"harddrake\" "
#: steps_interactive.pm:966
#, c-format
@@ -1583,9 +1486,7 @@ msgstr "Подождите, это может занять некоторое в
msgid ""
"In this security level, access to the files in the Windows partition is "
"restricted to the administrator."
-msgstr ""
-"На данном уровне безопасности доступ к файлам на разделе Windows разрешён "
-"только администратору. "
+msgstr "На данном уровне безопасности доступ к файлам на разделе Windows разрешён только администратору. "
#: steps_interactive.pm:1114
#, c-format
@@ -1603,10 +1504,7 @@ msgid ""
"Some steps are not completed.\n"
"\n"
"Do you really want to quit now?"
-msgstr ""
-"Некоторые этапы не завершены.\n"
-"\n"
-"Действительно завершить работу?"
+msgstr "Некоторые этапы не завершены.\n\nДействительно завершить работу?"
#: steps_interactive.pm:1137
#, c-format
@@ -1618,7 +1516,8 @@ msgstr "Поздравляем"
msgid "Reboot"
msgstr "Перезагрузка"
-#. -PO: please keep the following messages very short: they must fit in the left list of the installer!!!
+#. -PO: please keep the following messages very short: they must fit in the
+#. left list of the installer!!!
#: steps_list.pm:16
#, c-format
msgid ""
@@ -1749,25 +1648,3 @@ msgid ""
"_: Keep these entry short\n"
"Exit"
msgstr "Выход"
-
-#~ msgid "CD-ROM"
-#~ msgstr "CD-ROM"
-
-#~ msgid "KDE Workstation"
-#~ msgstr "Рабочая станция KDE"
-
-#~ msgid "Plasma Desktop"
-#~ msgstr "Plasma Desktop"
-
-#~ msgid ""
-#~ "The Plasma Desktop, the basic graphical environment with a collection of "
-#~ "accompanying tools"
-#~ msgstr ""
-#~ "Базовая графическая среда Plasma Desktop и набор инструментов для работы "
-#~ "с ней"
-
-#~ msgid "IDE"
-#~ msgstr "IDE"
-
-#~ msgid "Preparing bootloader..."
-#~ msgstr "Подготавливается начальный загрузчик..."
use vars qw(@ISA $new_bootstrap); @ISA = qw(install_steps); #-###################################################################################### #- misc imports #-###################################################################################### use common; use partition_table; use fs::type; use install_steps; use install_interactive; use install_any; use install_messages; use detect_devices; use run_program; use devices; use fsedit; use loopback; use mouse; use modules; use modules::interactive; use lang; use keyboard; use any; use log; #-###################################################################################### #- In/Out Steps Functions #-###################################################################################### sub errorInStep { my ($o, $err) = @_; $o->ask_warn(N("Error"), [ N("An error occurred"), formatError($err) ]); } sub kill_action { my ($o) = @_; $o->kill; } #-###################################################################################### #- Steps Functions #-###################################################################################### #------------------------------------------------------------------------------ sub selectLanguage { my ($o) = @_; $o->{locale}{lang} = any::selectLanguage($o, $o->{locale}{lang}, $o->{locale}{langs} ||= {}); install_steps::selectLanguage($o); if ($o->isa('interactive::gtk')) { $o->ask_warn('', formatAlaTeX( "If you see this message it is because you chose a language for which DrakX does not include a translation yet; however the fact that it is listed means there is some support for it anyway. That is, once GNU/Linux will be installed, you will be able to at least read and write in that language; and possibly more (various fonts, spell checkers, various programs translated etc. that varies from language to language).")) if $o->{locale}{lang} !~ /^en/ && !lang::load_mo(); } else { #- no need to have this in po since it is never translated $o->ask_warn('', "The characters of your language can not be displayed in console, so the messages will be displayed in english during installation") if $ENV{LANGUAGE} eq 'C'; } } sub acceptLicense { my ($o) = @_; $o->{release_notes} = do { my $f = install_any::getFile('release-notes.txt'); join('', <$f>); }; return if $o->{useless_thing_accepted}; my $r = $::testing ? 'Accept' : 'Refuse'; $o->ask_from_({ title => N("License agreement"), cancel => N("Quit"), messages => formatAlaTeX(install_messages::main_license() . "\n\n\n" . install_messages::warning_about_patents()), interactive_help_id => 'acceptLicense', more_buttons => [ [ N("Release Notes"), sub { $o->ask_warn(N("Release Notes"), $o->{release_notes}) }, 1 ] ], callbacks => { ok_disabled => sub { $r eq 'Refuse' } }, }, [ { list => [ N_("Accept"), N_("Refuse") ], val => \$r, type => 'list', format => sub { translate($_[0]) } } ]) or do { if ($::globetrotter) { system("killall XFree86"); exec("/sbin/reboot"); } install_any::ejectCdrom(); $o->exit; }; } #------------------------------------------------------------------------------ sub selectKeyboard { my ($o, $clicked) = @_; my $from_usb = keyboard::from_usb(); my $l = keyboard::lang2keyboards(lang::langs($o->{locale}{langs})); if ($::expert || $clicked || !($from_usb || @$l && $l->[0][1] >= 90) || listlength(lang::langs($o->{locale}{langs})) > 1) { add2hash($o->{keyboard}, $from_usb); my @best = uniq($from_usb ? $from_usb->{KEYBOARD} : (), (map { $_->[0] } @$l), 'us_intl'); my $format = sub { translate(keyboard::KEYBOARD2text($_[0])) }; my $other; my $ext_keyboard = my $KEYBOARD = $o->{keyboard}{KEYBOARD}; $o->ask_from_( { title => N("Keyboard"), messages => N("Please choose your keyboard layout."), interactive_help_id => 'selectKeyboard', advanced_messages => N("Here is the full list of available keyboards"), advanced_label => N("More"), callbacks => { changed => sub { $other = $_[0] == 1 } }, }, [ if_(@best > 1, { val => \$KEYBOARD, type => 'list', format => $format, sort => 1, list => [ @best ] }), { val => \$ext_keyboard, type => 'list', format => $format, list => [ difference2([ keyboard::KEYBOARDs() ], \@best) ], advanced => @best > 1 } ]); $o->{keyboard}{KEYBOARD} = $other ? $ext_keyboard : $KEYBOARD; delete $o->{keyboard}{unsafe}; } keyboard::group_toggle_choose($o, $o->{keyboard}) or goto &selectKeyboard; install_steps::selectKeyboard($o); } #------------------------------------------------------------------------------ sub selectInstallClass { my ($o) = @_; if (my @l = install_any::find_root_parts($o->{fstab}, $o->{prefix})) { log::l("proposing to upgrade partitions " . join(" ", map { $_->{part}{device} } @l)); my @releases = uniq(map { $_->{release} } @l); if (@releases != @l) { #- same release name so adding the device to differentiate them: $_->{release} .= " ($_->{part}{device})" foreach @l; } my $p; $o->ask_from_({ title => N("Install/Upgrade"), messages => N("Is this an install or an upgrade?"), interactive_help_id => 'selectInstallClass', }, [ { val => \$p, list => [ @l, N_("Install") ], type => 'list', format => sub { ref($_[0]) ? N("Upgrade %s", $_[0]{release}) : translate($_[0]) } } ]); if (ref $p) { my $part = $p->{part}; log::l("choosing to upgrade partition $part->{device}"); $o->{migrate_device_names} = install_any::use_root_part($o->{all_hds}, $part, $o); foreach (grep { $_->{mntpoint} } @{$o->{fstab}}) { my ($options, $_unknown) = fs::mount_options::unpack($_); $options->{encrypted} or next; $o->ask_from_({ focus_first => 1 }, [ { label => N("Encryption key for %s", $_->{mntpoint}), hidden => 1, val => \$_->{encrypt_key} } ]); } $o->{isUpgrade} = $p->{release_file} =~ /redhat/ ? 'redhat' : 'mandrake'; } } } #------------------------------------------------------------------------------ sub selectMouse { my ($o, $force) = @_; $force ||= $o->{mouse}{unsafe}; if ($force) { my $prev = $o->{mouse}{type} . '|' . $o->{mouse}{name}; $o->ask_from_({ messages => N("Please choose your type of mouse."), interactive_help_id => 'selectMouse', }, [ { list => [ mouse::fullnames() ], separator => '|', val => \$prev, format => sub { join('|', map { translate($_) } split('\|', $_[0])) } } ]); $o->{mouse} = mouse::fullname2mouse($prev); } if ($force && $o->{mouse}{type} eq 'serial') { $o->{mouse}{device} = $o->ask_from_listf_raw({ title => N("Mouse Port"), messages => N("Please choose which serial port your mouse is connected to."), interactive_help_id => 'selectSerialPort', }, \&mouse::serial_port2text, [ mouse::serial_ports() ]) or return &selectMouse; } if (arch() =~ /ppc/ && $o->{mouse}{nbuttons} == 1) { #- set a sane default F11/F12 $o->{mouse}{button2_key} = 87; $o->{mouse}{button3_key} = 88; $o->ask_from('', N("Buttons emulation"), [ { label => N("Button 2 Emulation"), val => \$o->{mouse}{button2_key}, list => [ mouse::ppc_one_button_keys() ], format => \&mouse::ppc_one_button_key2text }, { label => N("Button 3 Emulation"), val => \$o->{mouse}{button3_key}, list => [ mouse::ppc_one_button_keys() ], format => \&mouse::ppc_one_button_key2text }, ]) or return; } if ($o->{mouse}{device} eq "usbmouse") { modules::interactive::load_category($o, $o->{modules_conf}, 'bus/usb', 1, 1); eval { devices::make("usbmouse"); modules::load(qw(hid mousedev usbmouse)); }; } $o->SUPER::selectMouse; 1; } #------------------------------------------------------------------------------ sub setupSCSI { my ($o) = @_; if (!$::noauto && arch() =~ /i.86/) { if ($o->{pcmcia} ||= detect_devices::real_pcmcia_probe()) { my $w = $o->wait_message(N("PCMCIA"), N("Configuring PCMCIA cards...")); my $results = install_any::configure_pcmcia($o->{modules_conf}, $o->{pcmcia}); undef $w; $results and $o->ask_warn('', $results); } } { my $_w = $o->wait_message(N("IDE"), N("Configuring IDE")); modules::load(modules::category2modules('disk/cdrom')); } modules::interactive::load_category($o, $o->{modules_conf}, 'bus/firewire', 1); my $have_non_scsi = detect_devices::hds(); #- at_least_one scsi device if we have no disks modules::interactive::load_category($o, $o->{modules_conf}, 'disk/ide|scsi|hardware_raid|firewire', 1, !$have_non_scsi); modules::interactive::load_category($o, $o->{modules_conf}, 'disk/ide|scsi|hardware_raid|firewire') if !detect_devices::hds(); #- we really want a disk! install_interactive::tellAboutProprietaryModules($o); install_any::getHds($o, $o); } sub ask_mntpoint_s { #- }{} my ($o, $fstab) = @_; my @fstab = grep { isTrueFS($_) } @$fstab; @fstab = grep { isSwap($_) } @$fstab if @fstab == 0; @fstab = @$fstab if @fstab == 0; die N("No partition available") if @fstab == 0; { my $_w = $o->wait_message('', N("Scanning partitions to find mount points")); install_any::suggest_mount_points($fstab, $o->{prefix}, 'uniq'); log::l("default mntpoint $_->{mntpoint} $_->{device}") foreach @fstab; } if (@fstab == 1) { $fstab[0]{mntpoint} = '/'; } else { $o->ask_from_({ messages => N("Choose the mount points"), interactive_help_id => 'ask_mntpoint_s', }, [ map { { label => partition_table::description($_), val => \$_->{mntpoint}, not_edit => 0, list => [ '', fsedit::suggestions_mntpoint(fs::get::empty_all_hds()) ], }; } @fstab ]) or return; } $o->SUPER::ask_mntpoint_s($fstab); } #------------------------------------------------------------------------------ sub doPartitionDisks { my ($o) = @_; if (arch() =~ /ppc/) { my $generation = detect_devices::get_mac_generation(); if ($generation =~ /NewWorld/) { #- mac partition table if (defined $partition_table::mac::bootstrap_part) { #- do not do anything if we've got the bootstrap setup #- otherwise, go ahead and create one somewhere in the drive free space } else { my $freepart = $partition_table::mac::freepart; if ($freepart && $freepart->{size} >= 1) { log::l("creating bootstrap partition on drive /dev/$freepart->{hd}{device}, block $freepart->{start}"); $partition_table::mac::bootstrap_part = $freepart->{part}; log::l("bootstrap now at $partition_table::mac::bootstrap_part"); my $p = { start => $freepart->{start}, size => 1 << 11, mntpoint => '' }; fs::type::set_pt_type($p, 0x401); fsedit::add($freepart->{hd}, $p, $o->{all_hds}, { force => 1, primaryOrExtended => 'Primary' }); $new_bootstrap = 1; } else { $o->ask_warn('', N("No free space for 1MB bootstrap! Install will continue, but to boot your system, you'll need to create the bootstrap partition in DiskDrake")); } } } elsif ($generation =~ /IBM/) { #- dos partition table $o->ask_warn('', N("You'll need to create a PPC PReP Boot bootstrap! Install will continue, but to boot your system, you'll need to create the bootstrap partition in DiskDrake")); } } if (!$o->{isUpgrade}) { install_interactive::partitionWizard($o); } } #------------------------------------------------------------------------------ sub rebootNeeded { my ($o) = @_; $o->ask_warn('', N("You need to reboot for the partition table modifications to take place")); install_steps::rebootNeeded($o); } #------------------------------------------------------------------------------ sub choosePartitionsToFormat { my ($o, $fstab) = @_; $o->SUPER::choosePartitionsToFormat($fstab); my @l = grep { !$_->{isMounted} && $_->{mntpoint} && (!isSwap($_) || $::expert) && (!isFat_or_NTFS($_) || $_->{notFormatted} || $::expert) && (!isOtherAvailableFS($_) || $::expert || $_->{toFormat}); } @$fstab; $_->{toFormat} = 1 foreach grep { isSwap($_) && !$::expert } @$fstab; return if @l == 0 || !$::expert && every { $_->{toFormat} } @l; #- keep it temporary until the guy has accepted $_->{toFormatTmp} = $_->{toFormat} || $_->{toFormatUnsure} foreach @l; $o->ask_from_( { messages => N("Choose the partitions you want to format"), interactive_help_id => 'formatPartitions', advanced_messages => N("Check bad blocks?"), }, [ map { my $e = $_; ({ text => partition_table::description($e), type => 'bool', val => \$e->{toFormatTmp} }, if_(!isLoopback($_) && !member($_->{fs_type}, 'reiserfs', 'xfs', 'jfs'), { text => partition_table::description($e), type => 'bool', advanced => 1, disabled => sub { !$e->{toFormatTmp} }, val => \$e->{toFormatCheck} })) } @l ] ) or die 'already displayed'; #- ok now we can really set toFormat foreach (@l) { $_->{toFormat} = delete $_->{toFormatTmp}; set_isFormatted($_, 0); } } sub formatMountPartitions { my ($o, $_fstab) = @_; my $w; catch_cdie { fs::formatMount_all($o->{all_hds}{raids}, $o->{fstab}, $o->{prefix}, sub { my ($msg) = @_; $w ||= $o->wait_message('', $msg); $w->set($msg); }); } sub { $@ =~ /fsck failed on (\S+)/ or return; $o->ask_yesorno('', N("Failed to check filesystem %s. Do you want to repair the errors? (beware, you can lose data)", $1), 1); }; undef $w; #- help perl (otherwise wait_message stays forever in newt) die N("Not enough swap space to fulfill installation, please add some") if availableMemory() < 40 * 1024; } #------------------------------------------------------------------------------ sub setPackages { my ($o, $rebuild_needed) = @_; my $w = $o->wait_message('', $rebuild_needed ? N("Looking for available packages and rebuilding rpm database...") : N("Looking for available packages...")); install_any::setPackages($o, $rebuild_needed); $w->set(N("Looking at packages already installed...")); pkgs::selectPackagesAlreadyInstalled($o->{packages}); if ($rebuild_needed) { $w->set(N("Finding packages to upgrade...")); pkgs::selectPackagesToUpgrade($o->{packages}); } } sub deselectFoundMedia { my ($o, $p) = @_; install_any::deselectFoundMedia($o, $p); } sub mirror2text { $crypto::mirrors{$_[0]} ? $crypto::mirrors{$_[0]}[0] . '|' . $_[0] : "-|URL" } sub askSupplMirror { my ($o, $message) = @_; my $u = $o->{updates} ||= {}; require crypto; my @mirrors = do { #- Direct the user to the community mirror tree for an install from a mini-iso $o->{distro_type} ||= 'community'; #- get the list of mirrors locally, to avoid weird bugs with making an #- http request before ftp at this point of the install crypto::mirrors($o->{distro_type}, 1); }; push @mirrors, '-'; $o->ask_from_( { messages => N("Choose a mirror from which to get the packages"), cancel => N("Cancel"), }, [ { separator => '|', format => \&mirror2text, list => \@mirrors, val => \$u->{mirror}, }, ], ) or $u->{mirror} = ''; delete $o->{updates}; if ($u->{mirror} eq '-') { return $o->ask_from_entry('', $message) || ''; } my $url = "ftp://$u->{mirror}$crypto::mirrors{$u->{mirror}}[1]"; $url =~ s!/(?:media/)?main/?\z!!; log::l("mirror chosen [$url]"); return $url; } sub selectSupplMedia { my ($o, $suppl_method) = @_; install_any::selectSupplMedia($o, $suppl_method); } #------------------------------------------------------------------------------ sub choosePackages { my ($o, $packages, $compssUsers, $_first_time) = @_; #- this is done at the very beginning to take into account #- selection of CD by user if using a cdrom. $o->chooseCD($packages) if install_any::method_allows_medium_change($o->{method}); my $w = $o->wait_message('', N("Looking for available packages...")); my $availableC = &install_steps::choosePackages; my $individual; require pkgs; my $min_size = pkgs::selectedSize($packages); unless ($min_size < $availableC) { undef $w; $o->ask_warn('', N("Your system does not have enough space left for installation or upgrade (%d > %d)", $min_size, $availableC)); install_steps::rebootNeeded($o); } my $min_mark = 4; my $b = pkgs::saveSelected($packages); my %all_compssUsers_flags = map { $_ => 1 } map { @{$_->{flags}} } @$compssUsers; my $_level = pkgs::setSelectedFromCompssList($packages, \%all_compssUsers_flags, $min_mark, 0); my $max_size = pkgs::selectedSize($packages) + 1; #- avoid division by zero. log::l("max size (level $min_mark) is : " . formatXiB($max_size)); pkgs::restoreSelected($b); undef $w; chooseGroups: $o->chooseGroups($packages, $compssUsers, $min_mark, \$individual, $max_size) if !$o->{isUpgrade} && $o->{meta_class} ne 'desktop'; ($o->{packages_}{ind}) = pkgs::setSelectedFromCompssList($packages, $o->{rpmsrate_flags_chosen}, $min_mark, $availableC); $o->choosePackagesTree($packages) or goto chooseGroups if $individual; install_any::warnAboutRemovedPackages($o, $o->{packages}); install_any::warnAboutNaughtyServers($o) or goto chooseGroups if !$o->{isUpgrade} && $o->{meta_class} ne 'firewall'; } sub choosePackagesTree { my ($o, $packages, $o_limit_to_medium) = @_; $o->ask_many_from_list('', N("Choose the packages you want to install"), { list => [ grep { !$o_limit_to_medium || pkgs::packageMedium($packages, $_) == $o_limit_to_medium } @{$packages->{depslist}} ], value => \&URPM::Package::flag_selected, label => \&URPM::Package::name, sort => 1, }); } sub loadSavePackagesOnFloppy { my ($o, $packages) = @_; $o->ask_from('', N("Please choose load or save package selection on floppy. The format is the same as auto_install generated floppies."), [ { val => \ (my $choice), list => [ N_("Load from floppy"), N_("Save on floppy") ], format => \&translate, type => 'list' } ]) or return; if ($choice eq 'Load from floppy') { while (1) { my $w = $o->wait_message(N("Package selection"), N("Loading from floppy")); log::l("load package selection from floppy"); my $O = eval { install_any::loadO(undef, 'floppy') }; if ($@) { undef $w; #- close wait message. $o->ask_okcancel('', N("Insert a floppy containing package selection")) or return; } else { install_any::unselectMostPackages($o); foreach (@{$O->{default_packages} || []}) { my $pkg = pkgs::packageByName($packages, $_); pkgs::selectPackage($packages, $pkg) if $pkg; } return 1; } } } else { log::l("save package selection to floppy"); install_any::g_default_packages($o, 'quiet'); } } sub chooseGroups { my ($o, $packages, $compssUsers, $min_level, $individual, $max_size) = @_; #- for all groups available, determine package which belongs to each one. #- this will enable getting the size of each groups more quickly due to #- limitation of current implementation. #- use an empty state for each one (no flag update should be propagated). my $b = pkgs::saveSelected($packages); install_any::unselectMostPackages($o); pkgs::setSelectedFromCompssList($packages, {}, $min_level, $max_size); my $system_size = pkgs::selectedSize($packages); my ($sizes, $pkgs) = pkgs::computeGroupSize($packages, $min_level); pkgs::restoreSelected($b); log::l("system_size: $system_size"); my %stable_flags = grep_each { $::b } %{$o->{rpmsrate_flags_chosen}}; delete $stable_flags{$_} foreach map { @{$_->{flags}} } @{$o->{compssUsers}}; my $compute_size = sub { my %pkgs; my %flags = %stable_flags; @flags{@_} = (); my $total_size; A: while (my ($k, $size) = each %$sizes) { Or: foreach (split "\t", $k) { foreach (split "&&") { exists $flags{$_} or next Or; } $total_size += $size; $pkgs{$_} = 1 foreach @{$pkgs->{$k}}; next A; } } log::l("computed size $total_size (flags " . join(' ', keys %flags) . ")"); log::l("chooseGroups: ", join(" ", sort keys %pkgs)); int $total_size; }; my ($size, $unselect_all); my $available_size = install_any::getAvailableSpace($o) / sqr(1024); my $size_to_display = sub { my $lsize = $system_size + $compute_size->(map { @{$_->{flags}} } grep { $_->{selected} } @$compssUsers); #- if a profile is deselected, deselect everything (easier than deselecting the profile packages) $unselect_all ||= $size > $lsize; $size = $lsize; N("Total size: %d / %d MB", pkgs::correctSize($size / sqr(1024)), $available_size); }; while (1) { if ($available_size < 200) { # too small to choose anything. Defaulting to no group chosen $_->{selected} = 0 foreach @$compssUsers; last; } $o->reallyChooseGroups($size_to_display, $individual, $compssUsers) or return; last if $::testing || pkgs::correctSize($size / sqr(1024)) < $available_size || every { !$_->{selected} } @$compssUsers; $o->ask_warn('', N("Selected size is larger than available space")); } $o->{rpmsrate_flags_chosen}{$_} = 0 foreach map { @{$_->{flags}} } grep { !$_->{selected} } @$compssUsers; $o->{rpmsrate_flags_chosen}{$_} = 1 foreach map { @{$_->{flags}} } grep { $_->{selected} } @$compssUsers; log::l("compssUsersChoice selected: ", join(', ', map { qq("$_->{path}|$_->{label}") } grep { $_->{selected} } @$compssUsers)); #- do not try to deselect package (by default no groups are selected). $o->{isUpgrade} or $unselect_all and install_any::unselectMostPackages($o); #- if no group have been chosen, ask for using base system only, or no X, or normal. if (!$o->{isUpgrade} && !any { $_->{selected} } @$compssUsers) { my $docs = !$o->{excludedocs}; my $minimal = !any { $_ } values %{$o->{rpmsrate_flags_chosen}}; $o->ask_from(N("Type of install"), N("You have not selected any group of packages. Please choose the minimal installation you want:"), [ { val => \$o->{rpmsrate_flags_chosen}{X}, type => 'bool', text => N("With X"), disabled => sub { $minimal } }, { val => \$docs, type => 'bool', text => N("With basic documentation (recommended!)"), disabled => sub { $minimal } }, { val => \$minimal, type => 'bool', text => N("Truly minimal install (especially no urpmi)") }, ], changed => sub { $o->{rpmsrate_flags_chosen}{X} = $docs = 0 if $minimal }, ) or return &chooseGroups; $o->{excludedocs} = !$docs || $minimal; #- reselect according to user selection. if ($minimal) { $o->{rpmsrate_flags_chosen}{$_} = 0 foreach keys %{$o->{rpmsrate_flags_chosen}}; } else { my $X = $o->{rpmsrate_flags_chosen}{X}; #- do not let setDefaultPackages modify this one install_any::setDefaultPackages($o, 'clean'); $o->{rpmsrate_flags_chosen}{X} = $X; } install_any::unselectMostPackages($o); } 1; } sub reallyChooseGroups { my ($o, $size_to_display, $individual, $compssUsers) = @_; my $size_text = &$size_to_display; my ($path, $all); $o->ask_from_({ messages => N("Package Group Selection"), interactive_help_id => 'choosePackages', callbacks => { changed => sub { $size_text = &$size_to_display } }, }, [ { val => \$size_text, type => 'label' }, {}, (map { my $old = $path; $path = $_->{path}; if_($old ne $path, { val => translate($path) }), { val => \$_->{selected}, type => 'bool', disabled => sub { $all }, text => translate($_->{label}), help => translate($_->{descr}), }; } @$compssUsers), if_($o->{meta_class} eq 'desktop', { text => N("All"), val => \$all, type => 'bool' }), if_($individual, { text => N("Individual package selection"), val => $individual, advanced => 1, type => 'bool' }), ]); if ($all) { $_->{selected} = 1 foreach @$compssUsers; } 1; } sub chooseCD { my ($o, $packages) = @_; my @mediums = grep { $_ != $install_any::boot_medium } pkgs::allMediums($packages); my @mediumsDescr; my %mediumsDescr; #- the boot medium is already selected. $mediumsDescr{pkgs::mediumDescr($packages, $install_any::boot_medium)} = 1; #- build mediumDescr according to mediums, this avoid asking multiple times #- all the medium grouped together on only one CD. foreach (@mediums) { my $descr = pkgs::mediumDescr($packages, $_); $packages->{mediums}{$_}{ignored} and next; exists $mediumsDescr{$descr} or push @mediumsDescr, $descr; $mediumsDescr{$descr} ||= $packages->{mediums}{$_}{selected}; } if (install_any::method_is_from_ISO_images($o->{method})) { $mediumsDescr{$_} = install_any::method_is_from_ISO_images($packages->{mediums}{$_}{method}) ? to_bool(install_any::find_ISO_image_labelled($_)) : 1 foreach @mediumsDescr; } elsif ($o->{method} eq "cdrom") { #- if no other medium available or a poor beginner, we are choosing for him! #- note first CD is always selected and should not be unselected! return if @mediumsDescr == () || !$::expert; # $o->set_help('chooseCD'); $o->ask_many_from_list('', N("If you have all the CDs in the list below, click Ok. If you have none of those CDs, click Cancel. If only some CDs are missing, unselect them, then click Ok."), { list => \@mediumsDescr, label => sub { N("Cd-Rom labeled \"%s\"", $_[0]) }, val => sub { \$mediumsDescr{$_[0]} }, }) or do { $mediumsDescr{$_} = 0 foreach @mediumsDescr; #- force unselection of other CDs. }; } #- restore true selection of medium (which may have been grouped together) foreach (@mediums) { my $descr = pkgs::mediumDescr($packages, $_); $packages->{mediums}{$_}{ignored} and next; $packages->{mediums}{$_}{selected} = $mediumsDescr{$descr}; log::l("select status of medium $_ is $packages->{mediums}{$_}{selected}"); } } #------------------------------------------------------------------------------ sub installPackages { my ($o, $packages) = @_; my ($current, $total) = (0, 0); my $w = $o->wait_message(N("Installing"), N("Preparing installation")); my $old = \&pkgs::installCallback; local *pkgs::installCallback = sub { my ($data, $type, $id, $subtype, $_amount, $total_) = @_; if ($type eq 'user' && $subtype eq 'install') { $total = $total_; } elsif ($type eq 'inst' && $subtype eq 'start') { my $p = $data->{depslist}[$id]; $w->set(N("Installing package %s\n%d%%", $p->name, $total && 100 * $current / $total)); $current += $p->size; } else { goto $old } }; #- the modification is not local as the box should be living for other package installation. #- BEWARE this is somewhat duplicated (but not exactly from gtk code). undef *install_any::changeMedium; *install_any::changeMedium = sub { my ($method, $medium) = @_; #- if not using a cdrom medium or an iso image, always abort. return if !install_any::method_allows_medium_change($method); my $name = pkgs::mediumDescr($o->{packages}, $medium); local $| = 1; print "\a"; my $r = $name !~ /commercial/i || ($o->{useless_thing_accepted2} ||= $o->ask_from_list_('', formatAlaTeX(install_messages::com_license()), [ N_("Accept"), N_("Refuse") ], "Accept") eq "Accept"); if ($method =~ /-iso$/) { $r = install_any::changeIso($name); } else { $r &&= $o->ask_okcancel('', N("Change your Cd-Rom! Please insert the Cd-Rom labelled \"%s\" in your drive and press Ok when done. If you do not have it, press Cancel to avoid installation from this Cd-Rom.", $name), 1); } return $r; }; my $install_result; catch_cdie { $install_result = $o->install_steps::installPackages($packages) } sub { if ($@ =~ /^error ordering package list: (.*)/) { $o->ask_yesorno('', [ N("There was an error ordering packages:"), $1, N("Go on anyway?") ], 1) and return 1; ${$_[0]} = "already displayed"; } elsif ($@ =~ /^error installing package list: (.*)/) { $o->ask_yesorno('', [ N("There was an error installing packages:"), $1, N("Go on anyway?") ], 1) and return 1; ${$_[0]} = "already displayed"; } 0; }; if ($pkgs::cancel_install) { $pkgs::cancel_install = 0; die "setstep choosePackages\n"; } $install_result; } sub afterInstallPackages($) { my ($o) = @_; my $_w = $o->wait_message('', N("Post-install configuration")); $o->SUPER::afterInstallPackages; } sub updateModulesFromFloppy { my ($o) = @_; $o->ask_okcancel('', N("Please insert the Update Modules floppy in drive %s", $o->{updatemodules}), 1) or return; $o->SUPER::updateModulesFromFloppy; } #------------------------------------------------------------------------------ sub configureNetwork { my ($o) = @_; require network::ethernet; modules::load_category($o->{modules_conf}, network::ethernet::get_eth_categories()); if ($o->{meta_class} eq 'firewall') { require network::netconnect; network::netconnect::main($o->{netcnx} ||= {}, $o, $o->{modules_conf}, $o->{netc}, $o->{mouse}, $o->{intf}, 0, 1); } else { require network::network; network::network::easy_dhcp($o->{modules_conf}, $o->{netc}, $o->{intf}) and $o->{netcnx}{type} = 'lan'; $o->SUPER::configureNetwork; } } #------------------------------------------------------------------------------ sub installUpdates { my ($o) = @_; my $u = $o->{updates} ||= {}; $o->hasNetwork or return; if (is_empty_hash_ref($u)) { $o->ask_yesorno_({ messages => formatAlaTeX( N("You now have the opportunity to download updated packages. These packages have been updated after the distribution was released. They may contain security or bug fixes. To download these packages, you will need to have a working Internet connection. Do you want to install the updates?")), interactive_help_id => 'installUpdates', }) or return; } #- bring all interface up for installing crypto packages. install_interactive::upNetwork($o); #- update medium available and working. my $update_medium; do { require crypto; eval { my @mirrors = do { my $_w = $o->wait_message('', N("Contacting Mandrakelinux web site to get the list of available mirrors..."));