# Copyright (C) 2004 Free Software Foundation, Inc.
# Omi Azad <omi@altruists.org>, 2004.
# Khandakar Mujahidul Islam <suzan@BengaLinux.Org>, 2004.
# Progga <progga@BengaLinux.Org>, 2004.
# Jamil Ahmed <jamil@BengaLinux.Org>, 2004, 2005.
# Samia <mailsamia2001@yahoo.com>, 2005.
#
msgid ""
msgstr ""
"Project-Id-Version: DrakX HEAD\n"
"POT-Creation-Date: 2012-07-29 11:51+0300\n"
"PO-Revision-Date: 2005-03-19 23:18+0600\n"
"Last-Translator: Samia <mailsamia2001@yahoo.com>\n"
"Language-Team: Bangla <mdk-translation@bengalinux.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: any.pm:262 any.pm:972 diskdrake/interactive.pm:645
#: diskdrake/interactive.pm:869 diskdrake/interactive.pm:931
#: diskdrake/interactive.pm:1036 diskdrake/interactive.pm:1266
#: diskdrake/interactive.pm:1324 do_pkgs.pm:241 do_pkgs.pm:286
#: harddrake/sound.pm:270 interactive.pm:587 pkgs.pm:285
#, c-format
msgid "Please wait"
msgstr "অনুগ্রহ করে অপেক্ষা করুন"
#: any.pm:262
#, c-format
msgid "Bootloader installation in progress"
msgstr "বুট লোডার ইনস্টল করা হচ্ছে"
#: any.pm:273
#, c-format
msgid ""
"LILO wants to assign a new Volume ID to drive %s. However, changing\n"
"the Volume ID of a Windows NT, 2000, or XP boot disk is a fatal Windows "
"error.\n"
"This caution does not apply to Windows 95 or 98, or to NT data disks.\n"
"\n"
"Assign a new Volume ID?"
msgstr ""
"LILO %s ড্রাইভে একটি নতুন ভলিউম আই-ডি দিতে চায়। যাই হোক, উইন্ডোজ এন-টি,\n"
"২০০০, অথবা এক্স-পি'র বুট ডিস্কের ভলিউম আই-ডি পরিবর্তনে এগুলো একটি দুর্ভাগ্যজনক "
"উইন্ডোজ সমস্যা।\n"
"নতুন একটি ভলিউম আই-ডি দেয়া হবে?"
#: any.pm:284
#, c-format
msgid "Installation of bootloader failed. The following error occurred:"
msgstr "Bootloader ইনষ্টলেশন ব্যর্থ হয়েছে। এ সমস্ত ত্রুটি ঘটেছে:"
#: any.pm:290
#, c-format
msgid ""
"You may need to change your Open Firmware boot-device to\n"
" enable the bootloader. If you do not see the bootloader prompt at\n"
" reboot, hold down Command-Option-O-F at reboot and enter:\n"
" setenv boot-device %s,\\\\:tbxi\n"
" Then type: shut-down\n"
"At your next boot you should see the bootloader prompt."
msgstr ""
"বুট-লোডার সক্রিয় করার আপনাকে আপনার ওপেন ফার্মওয়্যার বুট-যন্ত্র পরিবর্তন\n"
" করতে হতে পারে। যদি রিবুট করার পর কোন বুটলোডার প্রম্প্ট না দেখেন, তাহলে\n"
" রিবুটের কমান্ড অপশনে যান এবং টাইপ করুন: setenv boot-device %s,\\\\:tbxi\n"
" তারপর টাইপ করুন: shut-down\n"
"পরবর্তীতে বুট হওয়ার সময় বুটলোডার প্রম্প্ট দেখতে পাওয়া উচিত।"
#: any.pm:330
#, c-format
msgid ""
"You decided to install the bootloader on a partition.\n"
"This implies you already have a bootloader on the hard disk drive you boot "
"(eg: System Commander).\n"
"\n"
"On which drive are you booting?"
msgstr ""
"আপনি একটি পার্টিশনে বুটলোডার ইনস্টল করার সিন্ধান্ত নিয়েছেন।\n"
"আপনাকে জানানো যাচ্ছে যে যেই হার্ড ড্রাইভ থেকে বুট করেন সেটাতে আগে থেকেই বুটলোডার "
"আছে\n"
"(যেমন: সিস্টেম কমান্ডার)।\n"
"\n"
"আপনি কোন ড্রাইভ থেকে বুট করছেন?"
#: any.pm:341
#, fuzzy, c-format
msgid "Bootloader Installation"
msgstr "বুট লোডার ইনস্টল করা হচ্ছে"
#: any.pm:345
#, c-format
msgid "Where do you want to install the bootloader?"
msgstr "আপনি bootloader টি কোথায় ইনস্টল করতে চান?"
#: any.pm:369
#, fuzzy, c-format
msgid "First sector (MBR) of drive %s"
msgstr "ড্রাইভের প্রথম সেক্টর (MBR)"
#: any.pm:371
#, c-format
msgid "First sector of drive (MBR)"
msgstr "ড্রাইভের প্রথম সেক্টর (MBR)"
#: any.pm:373
#, c-format
msgid "First sector of the root partition"
msgstr "রুট পার্টিশনের প্রথম সেক্টর"
#: any.pm:375
#, c-format
msgid "On Floppy"
msgstr "ফ্লপি তে"
#: any.pm:377 pkgs.pm:281 ugtk2.pm:526
#, c-format
msgid "Skip"
msgstr "উপেক্ষা"
#: any.pm:412
#, c-format
msgid "Boot Style Configuration"
msgstr "বুটের ধরণ কনফিগারেশন"
#: any.pm:428 any.pm:461 any.pm:462
#, c-format
msgid "Bootloader main options"
msgstr "বুটলোডারের আসল অপশনসমুহ"
#: any.pm:432
#, c-format
msgid "Bootloader"
msgstr "বুটলোডার"
#: any.pm:433 any.pm:465
#, c-format
msgid "Bootloader to use"
msgstr "ব্যবহারের জন্য বুটলোডার"
#: any.pm:436 any.pm:468
#, c-format
msgid "Boot device"
msgstr "বুট ডিভাইস"
#: any.pm:439
#, c-format
msgid "Main options"
msgstr ""
#: any.pm:440
#, c-format
msgid "Delay before booting default image"
msgstr "স্বাভাবিক ইমেজ লোড করার আগে দেরী করো"
#: any.pm:441
#, c-format
msgid "Enable ACPI"
msgstr "ACPI এনেবল করো"
#: any.pm:442
#, fuzzy, c-format
msgid "Enable SMP"
msgstr "ACPI এনেবল করো"
#: any.pm:443
#, fuzzy, c-format
msgid "Enable APIC"
msgstr "ACPI এনেবল করো"
#: any.pm:445
#, fuzzy, c-format
msgid "Enable Local APIC"
msgstr "ACPI এনেবল করো"
#: any.pm:446 security/level.pm:63
#, c-format
msgid "Security"
msgstr "সিকিউরিটি"
#: any.pm:447 any.pm:907 any.pm:926 authentication.pm:249
#: diskdrake/smbnfs_gtk.pm:181
#, c-format
msgid "Password"
msgstr "পাসওয়ার্ড"
#: any.pm:450 authentication.pm:260
#, c-format
msgid "The passwords do not match"
msgstr "পাসওয়ার্ডটি মিলছে না"
#: any.pm:450 authentication.pm:260 diskdrake/interactive.pm:1499
#, c-format
msgid "Please try again"
msgstr "অনুগ্রহ করে আবার চেষ্ট করুন"
#: any.pm:452
#, fuzzy, c-format
msgid "You cannot use a password with %s"
msgstr "আপনি %s মাউন্ট পয়েন্টের জন্য একটি এনক্রিপটেড ফাইল ব্যবহার করতে পারবেন"
#: any.pm:456 any.pm:910 any.pm:928 authentication.pm:250
#, c-format
msgid "Password (again)"
msgstr "পাসওয়ার্ড (পুনরায়)"
#: any.pm:457
#, c-format
msgid "Clean /tmp at each boot"
msgstr "প্রতি বুটে /tmp পরিষ্কার করো"
#: any.pm:467
#, c-format
msgid "Init Message"
msgstr "Init বার্তা"
#: any.pm:469
#, c-format
msgid "Open Firmware Delay"
msgstr "বিলম্বিত ওপেন ফার্মওয়্যার"
#: any.pm:470
#, c-format
msgid "Kernel Boot Timeout"
msgstr "কার্নাল বুটের সময় অতিক্রান্ত হয়েছে"
#: any.pm:471
#, c-format
msgid "Enable CD Boot?"
msgstr "সিডি বুট সক্রিয় করা হবে?"
#: any.pm:472
#, c-format
msgid "Enable OF Boot?"
msgstr "OF বুট সক্রিয় করা হবে?"
#: any.pm:473
#, c-format
msgid "Default OS?"
msgstr "স্বাভাবিক অবস্থায় ব্যবহৃত OS?"
#: any.pm:547
#, c-format
msgid "Image"
msgstr "ইমেজ"
#: any.pm:548 any.pm:562
#, c-format
msgid "Root"
msgstr "Root"
#: any.pm:549 any.pm:575
#, c-format
msgid "Append"
msgstr "যুক্ত"
#: any.pm:551
#, c-format
msgid "Xen append"
msgstr ""
#: any.pm:553
#, c-format
msgid "Requires password to boot"
msgstr ""
#: any.pm:555
#, c-format
msgid "Video mode"
msgstr "ভিডিওর ধরণ"
#: any.pm:557
#, c-format
msgid "Initrd"
msgstr "Initrd"
#: any.pm:558
#, c-format
msgid "Network profile"
msgstr "নেটওয়ার্ক প্রোফাইল"
#: any.pm:567 any.pm:572 any.pm:574 diskdrake/interactive.pm:411
#, c-format
msgid "Label"
msgstr "শিরোনাম"
#: any.pm:569 any.pm:577 harddrake/v4l.pm:438
#, c-format
msgid "Default"
msgstr "স্বাভাবিক"
#: any.pm:576
#, c-format
msgid "NoVideo"
msgstr "কোন ভিডিও নেই"
#: any.pm:587
#, c-format
msgid "Empty label not allowed"
msgstr "খালি শিরোনাম গ্রহণযোগ্য নয়"
#: any.pm:588
#, c-format
msgid "You must specify a kernel image"
msgstr "আপনাকে অবশ্যই একটি কার্নালের ইমেজ নির্ধারণ করে দিতে হবে"
#: any.pm:588
#, c-format
msgid "You must specify a root partition"
msgstr "আপনাকে অবশ্যই একটি রুট পার্টিশন নির্ধারণ করে দিতে হবে"
#: any.pm:589
#, c-format
msgid "This label is already used"
msgstr "এই শিরোনামটি আগেই ব্যবহার হয়েছে"
#: any.pm:607
#, c-format
msgid "Which type of entry do you want to add?"
msgstr "আপনি কি ধরণের এন্ট্রি যোগ করতে চান?"
#: any.pm:608
#, c-format
msgid "Linux"
msgstr "লিনাক্স"
#: any.pm:608
#, c-format
msgid "Other OS (SunOS...)"
msgstr "অন্যান্য OS (SunOS...)"
#: any.pm:609
#, c-format
msgid "Other OS (MacOS...)"
msgstr "অন্যান্য OS (MacOS...)"
#: any.pm:609
#, c-format
msgid "Other OS (Windows...)"
msgstr "অন্যান্য OS (Windows...)"
#: any.pm:656
#, fuzzy, c-format
msgid "Bootloader Configuration"
msgstr "বুটের ধরণ কনফিগারেশন"
#: any.pm:657
#, c-format
msgid ""
"Here are the entries on your boot menu so far.\n"
"You can create additional entries or change the existing ones."
msgstr ""
"এপর্যন্ত আপনার বুটমেনুর এন্ট্রিগুলি এখানে।\n"
"আপনি অন্যান্য এন্ট্রি তৈরী করতে পারেন অথবা আগের এন্ট্রিগুলি পরিবর্তন করতে পারেন।"
#: any.pm:868
#, c-format
msgid "access to X programs"
msgstr "X প্রোগ্রামসমূহে প্রবেশাধিকার"
#: any.pm:869
#, c-format
msgid "access to rpm tools"
msgstr "RPM টুলে প্রবেশাধিকার"
#: any.pm:870
#, c-format
msgid "allow \"su\""
msgstr "\"su\" গ্রহন করো"
#: any.pm:871
#, c-format
msgid "access to administrative files"
msgstr "এডমিনিষ্ট্রেশন সংক্রান্ত ফাইলে প্রবেশাধিকার"
#: any.pm:872
#, c-format
msgid "access to network tools"
msgstr "নেটওয়ার্ক টুলে প্রবেশাধিকার"
#: any.pm:873
#, c-format
msgid "access to compilation tools"
msgstr "compilation টুলে প্রবেশাধিকার"
#: any.pm:879
#, c-format
msgid "(already added %s)"
msgstr "(%s আগেই যোগ করা হয়েছে)"
#: any.pm:885
#, c-format
msgid "Please give a user name"
msgstr "অনুগ্রহ করে একটি উইজার নেম দিন"
#: any.pm:886
#, fuzzy, c-format
msgid ""
"The user name must start with a lower case letter followed by only lower "
"cased letters, numbers, `-' and `_'"
msgstr "ইউজারনেমে অবশ্যই ছোটহাতের অক্ষর, নম্বর \"-\" এবং \"_\" থাকতে হবে"
#: any.pm:887
#, c-format
msgid "The user name is too long"
msgstr "ইউজারনেমটি অনেক বড়"
#: any.pm:888
#, c-format
msgid "This user name has already been added"
msgstr "এই ইউজারনেমটি এর আগেই যোগ করা হয়েছে"
#: any.pm:894 any.pm:930
#, c-format
msgid "User ID"
msgstr "ব্যবহারকারীর ID"
#: any.pm:894 any.pm:931
#, c-format
msgid "Group ID"
msgstr "দলের ID"
#: any.pm:895
#, fuzzy, c-format
msgid "%s must be a number"
msgstr "অপশন %s-কে অবশ্যই একটি সংখ্যা হতে হবে!"
#: any.pm:896
#, c-format
msgid "%s should be above 500. Accept anyway?"
msgstr ""
#: any.pm:900
#, fuzzy, c-format
msgid "User management"
msgstr "ব্যবহারকারীনাম"
#: any.pm:905
#, c-format
msgid "Enable guest account"
msgstr ""
#: any.pm:906 authentication.pm:236
#, c-format
msgid "Set administrator (root) password"
msgstr "আ্যাডমিনিস্ট্রেটর (root) পাসওয়ার্ড সেট করুন"
#: any.pm:912
#, fuzzy, c-format
msgid "Enter a user"
msgstr ""
"একটি ইউজার প্রবেশ করান\n"
"%s"
#: any.pm:914
#, c-format
msgid "Icon"
msgstr "আইকন"
#: any.pm:917
#, c-format
msgid "Real name"
msgstr "আসল নাম"
#: any.pm:924
#, c-format
msgid "Login name"
msgstr "লগ-ইন নাম"
#: any.pm:929
#, c-format
msgid "Shell"
msgstr "শেল"
#: any.pm:972
#, c-format
msgid "Please wait, adding media..."
msgstr "মাধ্যম যোগ করা হচ্ছে, অনুগ্রহ করে অপেক্ষা করুন..."
#: any.pm:1004 security/l10n.pm:14
#, c-format
msgid "Autologin"
msgstr "সয়ংক্রিয় লগ-ইন"
#: any.pm:1005
#, c-format
msgid "I can set up your computer to automatically log on one user."
msgstr ""
"আমি আপনার কম্পিউটারকে সয়ংক্রিয়ভাবে একটি ইউজারকে লগইন করার জন্য সেট করতে পারি।"
#: any.pm:1006
#, fuzzy, c-format
msgid "Use this feature"
msgstr "এই সুবিধাটি কি আপনি ব্যবহার করতে চান?"
#: any.pm:1007
#, c-format
msgid "Choose the default user:"
msgstr "স্বাভাবিক ব্যবহারকারীকে পছন্দ করুন:"
#: any.pm:1008
#, c-format
msgid "Choose the window manager to run:"
msgstr "রান করার জন্য উইন্ডো ম্যানেজারকে পছন্দ করুন:"
#: any.pm:1019 any.pm:1039 any.pm:1107
#, c-format
msgid "Release Notes"
msgstr "সংস্করণ মন্তব্য"
#: any.pm:1046 any.pm:1395 interactive/gtk.pm:817
#, c-format
msgid "Close"
msgstr "বন্ধ"
#: any.pm:1093
#, c-format
msgid "License agreement"
msgstr "লাইসেন্স এগ্রিমেন্ট"
#: any.pm:1095 diskdrake/dav.pm:26
#, c-format
msgid "Quit"
msgstr "বাহির"
#: any.pm:1102
#, fuzzy, c-format
msgid "Do you accept this license ?"
msgstr "আপনার কি আরও একটি আছে?"
#: any.pm:1103
#, c-format
msgid "Accept"
msgstr "গ্রহণ"
#: any.pm:1103
#, c-format
msgid "Refuse"
msgstr "অস্বীকার"
#: any.pm:1129 any.pm:1191
#, c-format
msgid "Please choose a language to use"
msgstr "ব্যবহার করার জন্য একটি ভাষা পছন্দ করুন"
#: any.pm:1157
#, fuzzy, c-format
msgid ""
"%s can support multiple languages. Select\n"
"the languages you would like to install. They will be available\n"
"when your installation is complete and you restart your system."
msgstr ""
"Mageia বাভিন্ন ভাষা সমর্থন করে।\n"
"আপনি যেই ভাষাটি ইনস্টল করতে চান তা পছন্দ করুন।\n"
"ইনস্টল শেষে রি-স্টার্ট করার পরে সেই ভাষাগুলি উপলব্ধ হবে।"
#: any.pm:1159 fs/partitioning_wizard.pm:174
#, c-format
msgid "Mageia"
msgstr ""
#: any.pm:1160
#, fuzzy, c-format
msgid "Multiple languages"
msgstr "সমস্থ ভাষা"
#: any.pm:1169 any.pm:1200
#, c-format
msgid "Old compatibility (non UTF-8) encoding"
msgstr ""
#: any.pm:1170
#, c-format
msgid "All languages"
msgstr "সমস্থ ভাষা"
#: any.pm:1192
#, c-format
msgid "Language choice"
msgstr "পছন্দনীয় ভাষা"
#: any.pm:1246
#, c-format
msgid "Country / Region"
msgstr "দেশ / স্থান"
#: any.pm:1247
#, c-format
msgid "Please choose your country"
msgstr "অনুগ্রহ করে তোমার দেশ পছন্দ করো।"
#: any.pm:1249
#, c-format
msgid "Here is the full list of available countries"
msgstr "উপলব্ধ সমস্থ দেশের নাম এখানে রয়েছে"
#: any.pm:1250
#, c-format
msgid "Other Countries"
msgstr "অন্যান্য দেশসমুহ"
#: any.pm:1250 interactive.pm:488 interactive/gtk.pm:445
#, c-format
msgid "Advanced"
msgstr "উন্নত"
#: any.pm:1256
#, c-format
msgid "Input method:"
msgstr "ইনপুট মাধ্যম:"
#: any.pm:1259
#, c-format
msgid "None"
msgstr "একটিও না"
#: any.pm:1340
#, c-format
msgid "No sharing"
msgstr "শেয়ারিং নেই"
#: any.pm:1340
#, c-format
msgid "Allow all users"
msgstr "সব ব্যবহারকারীদের গ্রহণ করো"
#: any.pm:1340
#, c-format
msgid "Custom"
msgstr "ব্যবস্থা"
#: any.pm:1344
#, c-format
msgid ""
"Would you like to allow users to share some of their directories?\n"
"Allowing this will permit users to simply click on \"Share\" in konqueror "
"and nautilus.\n"
"\n"
"\"Custom\" permit a per-user granularity.\n"
msgstr "আপনি কি ব্যবহারকারীদের কিছু ডিরেক্টরি শেয়ার করতে দিতে চান?\n"
#: any.pm:1356
#, c-format
msgid ""
"NFS: the traditional Unix file sharing system, with less support on Mac and "
"Windows."
msgstr ""
"NFS: ঐতিহ্যগত ইউনিক্স ফাইল শেয়ারিং সিস্টেম, যা ম্যাক এবং উইন্ডোজে স্বল্প সমর্থিত।"
#: any.pm:1359
#, c-format
msgid ""
"SMB: a file sharing system used by Windows, Mac OS X and many modern Linux "
"systems."
msgstr ""
"SMB: উইন্ডোজ, ম্যাক ও-এস এক্স এবং অনেক আধুনিক লিনাক্স সিস্টেম কর্তৃক ব্যবহৃত ফাইল "
"শেয়ারিং সিস্টেম।"
#: any.pm:1367
#, c-format
msgid ""
"You can export using NFS or SMB. Please select which you would like to use."
msgstr ""
"আপনি NFS বা SMB ব্যবহার করে ফাইল পাঠাতে পারেন। যেটি আপনি ব্যবহার করতে চান "
"অনুগ্রহ করে নির্বাচন করুন।"
#: any.pm:1395
#, c-format
msgid "Launch userdrake"
msgstr "userdrake শুরু করো"
#: any.pm:1397
#, c-format
msgid ""
"The per-user sharing uses the group \"fileshare\". \n"
"You can use userdrake to add a user to this group."
msgstr ""
"প্রত্যেক ব্যবহারকারী গ্রুপের \"ফাইল ভাগাভাগি\" ভাগাভাগি করতে পারেন। \n"
"এই গ্রুপে একজণ ব্যবহারকারী যোগ করতে আপনি userdrake ব্যবহার করতে পারেন।"
#: any.pm:1504
#, fuzzy, c-format
msgid ""
"You need to logout and back in again for changes to take effect. Press OK to "
"logout now."
msgstr "পরিবর্তন কার্যকর করার পূর্বে আপনাকে লগ-আউট করে তারপর পুণরায় লগ-ইন করতে হবে"
#: any.pm:1508
#, c-format
msgid "You need to log out and back in again for changes to take effect"
msgstr "পরিবর্তন কার্যকর করার পূর্বে আপনাকে লগ-আউট করে তারপর পুণরায় লগ-ইন করতে হবে"
#: any.pm:1543
#, c-format
msgid "Timezone"
msgstr "টাইমজোন"
#: any.pm:1543
#, c-format
msgid "Which is your timezone?"
msgstr "আপনার টাইমজোন কি?"
#: any.pm:1566 any.pm:1568
#, c-format
msgid "Date, Clock & Time Zone Settings"
msgstr ""
#: any.pm:1569
#, c-format
msgid "What is the best time?"
msgstr ""
#: any.pm:1573
#, fuzzy, c-format
msgid "%s (hardware clock set to UTC)"
msgstr "হার্ডওয়্যারে ঘড়ি GMT-এ সেট করা"
#: any.pm:1574
#, fuzzy, c-format
msgid "%s (hardware clock set to local time)"
msgstr "হার্ডওয়্যারে ঘড়ি GMT-এ সেট করা"
#: any.pm:1576
#, c-format
msgid "NTP Server"
msgstr "NTP সার্ভার"
#: any.pm:1577
#, c-format
msgid "Automatic time synchronization (using NTP)"
msgstr "সয়ংক্রিয়ভাবে সময় মেলাও (NTP ব্যবহার করে)"
#: authentication.pm:24
#, c-format
msgid "Local file"
msgstr "লোকাল ফাইল"
#: authentication.pm:25
#, c-format
msgid "LDAP"
msgstr "LDAP"
#: authentication.pm:26
#, c-format
msgid "NIS"
msgstr "NIS"
# সাম
#: authentication.pm:27
#, c-format
msgid "Smart Card"
msgstr "স্মার্ট কার্ড"
#: authentication.pm:28 authentication.pm:215
#, c-format
msgid "Windows Domain"
msgstr "উইন্ডোজ ডোমেইন"
#: authentication.pm:29
#, c-format
msgid "Kerberos 5"
msgstr ""
#: authentication.pm:65
#, c-format
msgid "Local file:"
msgstr "লোকাল ফাইল:"
#: authentication.pm:65
#, c-format
msgid ""
"Use local for all authentication and information user tell in local file"
msgstr ""
"লোকাল ফাইলে থাকা ব্যবহারকারীর সকল বিশ্বাসযোগ্যতা ও তথ্যের জন্য লোকাল ব্যবহার করুন"
#: authentication.pm:66
#, c-format
msgid "LDAP:"
msgstr "LDAP:"
#: authentication.pm:66
#, c-format
msgid ""
"Tells your computer to use LDAP for some or all authentication. LDAP "
"consolidates certain types of information within your organization."
msgstr ""
"কিছু অথবা সব নির্ভরযোগ্যতার আপনার কম্পিউটারকে LDAP ব্যবহার করতে বলুন। LDAP আপনার "
"অর্গানাইজেশনের বিভিন্ন ধরনের তথ্যকে আরও সুদৃড় করে"
#: authentication.pm:67
#, c-format
msgid "NIS:"
msgstr "NIS:"
#: authentication.pm:67
#, c-format
msgid ""
"Allows you to run a group of computers in the same Network Information "
"Service domain with a common password and group file."
msgstr ""
"সার্বজনীন পাসওয়ার্ড ও গ্রুপ ফাইলসহ আপনি কম্পিউটারের একটি গ্রুপকে একই নেটওয়ার্ক তথ্য "
"সার্ভিস ডোমেইনে চলার অনুমতি দেবে।"
#: authentication.pm:68
#, c-format
msgid "Windows Domain:"
msgstr "উইন্ডোজ ডোমেইন:"
#: authentication.pm:68
#, c-format
msgid ""
"Winbind allows the system to retrieve information and authenticate users in "
"a Windows domain."
msgstr ""
"উইনবাইন্ড আপনার সিস্টেমকে একটি উইন্ডোজ ডোমেইনের তথ্য ও নির্ভরযোগ্য ব্যবহারকারীদের "
"পুনরুদ্ধারের অনুমতি দেবে।"
#: authentication.pm:69
#, c-format
msgid "Kerberos 5 :"
msgstr ""
#: authentication.pm:69
#, c-format
msgid "With Kerberos and LDAP for authentication in Active Directory Server "
msgstr ""
#: authentication.pm:106 authentication.pm:140 authentication.pm:159
#: authentication.pm:160 authentication.pm:186 authentication.pm:210
#: authentication.pm:865
#, c-format
msgid " "
msgstr ""
#: authentication.pm:107 authentication.pm:141 authentication.pm:187
#: authentication.pm:211
#, fuzzy, c-format
msgid "Welcome to the Authentication Wizard"
msgstr "ডোমেইন অনুমোদন প্রয়োজন"
#: authentication.pm:109
#, c-format
msgid ""
"You have selected LDAP authentication. Please review the configuration "
"options below "
msgstr ""
#: authentication.pm:111 authentication.pm:166
#, c-format
msgid "LDAP Server"
msgstr "LDAP সার্ভার"
#: authentication.pm:112 authentication.pm:167
#, fuzzy, c-format
msgid "Base dn"
msgstr "LDAP বেইজ dn"
#: authentication.pm:113
#, c-format
msgid "Fetch base Dn "
msgstr ""
#: authentication.pm:115 authentication.pm:170
#, c-format
msgid "Use encrypt connection with TLS "
msgstr ""
#: authentication.pm:116 authentication.pm:171
#, c-format
msgid "Download CA Certificate "
msgstr ""
#: authentication.pm:118 authentication.pm:151
#, c-format
msgid "Use Disconnect mode "
msgstr ""
#: authentication.pm:119 authentication.pm:172
#, fuzzy, c-format
msgid "Use anonymous BIND "
msgstr "Anonymous বাইন্ড ব্যবহার করুন "
#: authentication.pm:120 authentication.pm:123 authentication.pm:125
#: authentication.pm:129
#, c-format
msgid " "
msgstr ""
#: authentication.pm:121 authentication.pm:173
#, c-format
msgid "Bind DN "
msgstr ""
#: authentication.pm:122 authentication.pm:174
#, fuzzy, c-format
msgid "Bind Password "
msgstr "পাসওয়ার্ড"
#: authentication.pm:124
#, c-format
msgid "Advanced path for group "
msgstr ""
#: authentication.pm:126
#, fuzzy, c-format
msgid "Password base"
msgstr "পাসওয়ার্ড"
#: authentication.pm:127
#, fuzzy, c-format
msgid "Group base"
msgstr "দলের ID"
#: authentication.pm:128
#, c-format
msgid "Shadow base"
msgstr ""
#: authentication.pm:143
#, c-format
msgid ""
"You have selected Kerberos 5 authentication. Please review the configuration "
"options below "
msgstr ""
#: authentication.pm:145
#, fuzzy, c-format
msgid "Realm "
msgstr "আসল নাম"
#: authentication.pm:147
#, fuzzy, c-format
msgid "KDCs Servers"
msgstr "LDAP সার্ভার"
#: authentication.pm:149
#, c-format
msgid "Use DNS to locate KDC for the realm"
msgstr ""
#: authentication.pm:150
#, c-format
msgid "Use DNS to locate realms"
msgstr ""
#: authentication.pm:155
#, fuzzy, c-format
msgid "Use local file for users information"
msgstr "সার্ভারের জন্য libsafe ব্যবহার করো"
#: authentication.pm:156
#, fuzzy, c-format
msgid "Use LDAP for users information"
msgstr "হার্ড ড্রাইভের তথ্য"
#: authentication.pm:162
#, c-format
msgid ""
"You have selected Kerberos 5 for authentication, now you must choose the "
"type of users information "
msgstr ""
#: authentication.pm:168
#, c-format
msgid "Fecth base Dn "
msgstr ""
#: authentication.pm:189
#, c-format
msgid ""
"You have selected NIS authentication. Please review the configuration "
"options below "
msgstr ""
#: authentication.pm:191
#, c-format
msgid "NIS Domain"
msgstr "NIS ডোমেইন"
#: authentication.pm:192
#, c-format
msgid "NIS Server"
msgstr "NIS সার্ভার"
#: authentication.pm:213
#, c-format
msgid ""
"You have selected Windows Domain authentication. Please review the "
"configuration options below "
msgstr ""
#: authentication.pm:217
#, fuzzy, c-format
msgid "Domain Model "
msgstr "ডোমেইন"
#: authentication.pm:219
#, c-format
msgid "Active Directory Realm "
msgstr ""
#: authentication.pm:220
#, fuzzy, c-format
msgid "DNS Domain"
msgstr "NIS ডোমেইন"
#: authentication.pm:221
#, fuzzy, c-format
msgid "DC Server"
msgstr "LDAP সার্ভার"
#: authentication.pm:235 authentication.pm:251
#, c-format
msgid "Authentication"
msgstr "অনুমোদন"
#: authentication.pm:237
#, c-format
msgid "Authentication method"
msgstr "নির্ভরযোগ্য নিয়ম"
#. -PO: keep this short or else the buttons will not fit in the window
#: authentication.pm:242
#, c-format
msgid "No password"
msgstr "পাসওয়ার্ড ছাড়া"
#: authentication.pm:263
#, c-format
msgid "This password is too short (it must be at least %d characters long)"
msgstr "এই পাসওয়ার্ডটি খুবই ছোট (এটা অবশ্যই %d অক্ষরের হতে হবে)"
#: authentication.pm:373
#, c-format
msgid "Cannot use broadcast with no NIS domain"
msgstr "কোন NIS ডোমেইন ছাড়া ব্রডকাষ্ট ব্যবহার করা যাবেনা"
#: authentication.pm:860
#, c-format
msgid "Select file"
msgstr "ফাইল সিলেক্ট করো"
#: authentication.pm:866
#, fuzzy, c-format
msgid "Domain Windows for authentication : "
msgstr "ডোমেইন অনুমোদন প্রয়োজন"
#: authentication.pm:868
#, c-format
msgid "Domain Admin User Name"
msgstr "ডোমেইন অ্যাডমিনের ব্যবহারকারীনাম"
#: authentication.pm:869
#, c-format
msgid "Domain Admin Password"
msgstr "ডোমেইন অ্যাডমিনের পাসওয়ার্ড"
#. -PO: these messages will be displayed at boot time in the BIOS, use only ASCII (7bit)
#: bootloader.pm:978
#, c-format
msgid ""
"Welcome to the operating system chooser!\n"
"\n"
"Choose an operating system from the list above or\n"
"wait for default boot.\n"
"\n"
msgstr ""
"Welcome to the operating system chooser!\n"
"\n"
"Choose an operating system from the list above or\n"
"wait for default boot.\n"
"\n"
#: bootloader.pm:1156
#, c-format
msgid "LILO with text menu"
msgstr "টেক্সট মেনুর সাথে LILO"
#: bootloader.pm:1157
#, c-format
msgid "GRUB with graphical menu"
msgstr ""
#: bootloader.pm:1158
#, c-format
msgid "GRUB with text menu"
msgstr ""
#: bootloader.pm:1159
#, c-format
msgid "Yaboot"
msgstr "Yaboot"
#: bootloader.pm:1160
#, c-format
msgid "SILO"
msgstr ""
#: bootloader.pm:1244
#, c-format
msgid "not enough room in /boot"
msgstr "/boot -এ বেশী জায়গা নেই"
#: bootloader.pm:1970
#, c-format
msgid "You cannot install the bootloader on a %s partition\n"
msgstr "আপনি %s পার্টিশনে বুটলোডার ইনস্টল করতে পারবেননা\n"
# renumber = রি-নাম্বার লিখলাম। আসলটা আমি জানিনা
#: bootloader.pm:2091
#, c-format
msgid ""
"Your bootloader configuration must be updated because partition has been "
"renumbered"
msgstr ""
"পার্টিশন রি-নাম্বার করার কারনে আপনার বুটলোডারের কনফিগারেশন অবশ্যই আপডেট করতে হবে"
#: bootloader.pm:2104
#, c-format
msgid ""
"The bootloader cannot be installed correctly. You have to boot rescue and "
"choose \"%s\""
msgstr ""
"বুটলোডার সঠিকভাবে ইনস্টল হতে পারবেনা। আপনাকে rescue বুট করতে হবে এবং \"%s\" "
"পছন্দ করতে হবে"
#: bootloader.pm:2105
#, c-format
msgid "Re-install Boot Loader"
msgstr "বুট লোডার রি-ইনস্টল করো"
#: common.pm:142
#, fuzzy, c-format
msgid "B"
msgstr "কেবি"
#: common.pm:142
#, c-format
msgid "KB"
msgstr "কেবি"
#: common.pm:142
#, c-format
msgid "MB"
msgstr "এমবি"
#: common.pm:142
#, c-format
msgid "GB"
msgstr "জিবি"
#: common.pm:142 common.pm:151
#, c-format
msgid "TB"
msgstr "টিবি"
#: common.pm:159
#, c-format
msgid "%d minutes"
msgstr "%d মিনিট"
#: common.pm:161
#, c-format
msgid "1 minute"
msgstr "১ মিনিট"
#: common.pm:163
#, c-format
msgid "%d seconds"
msgstr "%d সেকেন্ড"
#: common.pm:393
#, c-format
msgid "command %s missing"
msgstr ""
#: diskdrake/dav.pm:17
#, c-format
msgid ""
"WebDAV is a protocol that allows you to mount a web server's directory\n"
"locally, and treat it like a local filesystem (provided the web server is\n"
"configured as a WebDAV server). If you would like to add WebDAV mount\n"
"points, select \"New\"."
msgstr ""
"WebDAV একটি প্রোটোকল যা আপনাকে স্থানীয়ভাবে একটি ওয়েব সার্ভারের ডিরেক্টরি মাউন্ট "
"করার অনুমতি\n"
"দেয়, এবং এটাকে একটি স্থানীয় ফাইলসিস্টেম হিসেবে মনে করুন(সরবরাহকৃত ওয়েব সার্ভারটি "
"WebDAV সার্ভার\n"
"হিসেবে কন্ফিগার করা)। যদি আপনি WebDAV মাউন্ট পয়েন্ত যুক্ত করতে চান, তবে \"নতুন\" "
"বেছে নিন।"
#: diskdrake/dav.pm:25
#, c-format
msgid "New"
msgstr "নতুন"
#: diskdrake/dav.pm:63 diskdrake/interactive.pm:418 diskdrake/smbnfs_gtk.pm:75
#, c-format
msgid "Unmount"
msgstr "আন-মাউন্ট"
#: diskdrake/dav.pm:64 diskdrake/interactive.pm:414 diskdrake/smbnfs_gtk.pm:76
#, c-format
msgid "Mount"
msgstr "মাউন্ট"
#: diskdrake/dav.pm:65
#, c-format
msgid "Server"
msgstr "সার্ভার"
#: diskdrake/dav.pm:66 diskdrake/interactive.pm:408
#: diskdrake/interactive.pm:722 diskdrake/interactive.pm:740
#: diskdrake/interactive.pm:744 diskdrake/removable.pm:23
#: diskdrake/smbnfs_gtk.pm:79
#, c-format
msgid "Mount point"
msgstr "মাউন্ট পয়েন্ট"
#: diskdrake/dav.pm:67 diskdrake/interactive.pm:410
#: diskdrake/interactive.pm:1163 diskdrake/removable.pm:24
#: diskdrake/smbnfs_gtk.pm:80
#, c-format
msgid "Options"
msgstr "অপশন"
#: diskdrake/dav.pm:68 interactive.pm:387 interactive/gtk.pm:453
#, c-format
msgid "Remove"
msgstr "মুছে ফেলো"
#: diskdrake/dav.pm:69 diskdrake/hd_gtk.pm:193 diskdrake/removable.pm:26
#: diskdrake/smbnfs_gtk.pm:82 interactive/http.pm:151
#, c-format
msgid "Done"
msgstr "হয়েছে"
#: diskdrake/dav.pm:78 diskdrake/hd_gtk.pm:133 diskdrake/hd_gtk.pm:299
#: diskdrake/interactive.pm:247 diskdrake/interactive.pm:260
#: diskdrake/interactive.pm:456 diskdrake/interactive.pm:527
#: diskdrake/interactive.pm:545 diskdrake/interactive.pm:550
#: diskdrake/interactive.pm:712 diskdrake/interactive.pm:1002
#: diskdrake/interactive.pm:1054 diskdrake/interactive.pm:1209
#: diskdrake/interactive.pm:1222 diskdrake/interactive.pm:1225
#: diskdrake/interactive.pm:1499 diskdrake/smbnfs_gtk.pm:42 do_pkgs.pm:23
#: do_pkgs.pm:28 do_pkgs.pm:44 do_pkgs.pm:60 do_pkgs.pm:65 do_pkgs.pm:82
#: fsedit.pm:246 interactive/http.pm:117 interactive/http.pm:118
#: modules/interactive.pm:19 scanner.pm:95 scanner.pm:106 scanner.pm:113
#: scanner.pm:120 wizards.pm:96 wizards.pm:100 wizards.pm:122
#, c-format
msgid "Error"
msgstr "ত্রুটি"
#: diskdrake/dav.pm:86
#, c-format
msgid "Please enter the WebDAV server URL"
msgstr "অনুগ্রহ করে WebDAV সার্ভারের URL প্রবেশ করান"
#: diskdrake/dav.pm:90
#, c-format
msgid "The URL must begin with http:// or https://"
msgstr "URL অবশ্যই http:// অথবা https:// দিয়ে শুরু করতে হবে"
#: diskdrake/dav.pm:106 diskdrake/hd_gtk.pm:424 diskdrake/interactive.pm:306
#: diskdrake/interactive.pm:391 diskdrake/interactive.pm:597
#: diskdrake/interactive.pm:815 diskdrake/interactive.pm:880
#: diskdrake/interactive.pm:1034 diskdrake/interactive.pm:1076
#: diskdrake/interactive.pm:1077 diskdrake/interactive.pm:1309
#: diskdrake/interactive.pm:1347 diskdrake/interactive.pm:1498 do_pkgs.pm:19
#: do_pkgs.pm:39 do_pkgs.pm:57 do_pkgs.pm:77 harddrake/sound.pm:399
#, c-format
msgid "Warning"
msgstr "নোটিশ"
#: diskdrake/dav.pm:106
#, fuzzy, c-format
msgid "Are you sure you want to delete this mount point?"
msgstr "আপনি কি এই বাটনে ক্লিক করতে চান?"
#: diskdrake/dav.pm:124
#, c-format
msgid "Server: "
msgstr "সার্ভার:"
#: diskdrake/dav.pm:125 diskdrake/interactive.pm:501
#: diskdrake/interactive.pm:1371 diskdrake/interactive.pm:1459
#, c-format
msgid "Mount point: "
msgstr "মাউন্ট পয়েন্ট:"
#: diskdrake/dav.pm:126 diskdrake/interactive.pm:1466
#, c-format
msgid "Options: %s"
msgstr "অপশন: %s"
#: diskdrake/hd_gtk.pm:61 diskdrake/interactive.pm:301
#: diskdrake/smbnfs_gtk.pm:22 fs/mount_point.pm:108
#: fs/partitioning_wizard.pm:55 fs/partitioning_wizard.pm:238
#: fs/partitioning_wizard.pm:246 fs/partitioning_wizard.pm:285
#: fs/partitioning_wizard.pm:433 fs/partitioning_wizard.pm:496
#: fs/partitioning_wizard.pm:579 fs/partitioning_wizard.pm:582
#, c-format
msgid "Partitioning"
msgstr "পার্টিশন করা হচ্ছে"
#: diskdrake/hd_gtk.pm:73
#, c-format
msgid "Click on a partition, choose a filesystem type then choose an action"
msgstr ""
#: diskdrake/hd_gtk.pm:115 diskdrake/interactive.pm:1184
#: diskdrake/interactive.pm:1194 diskdrake/interactive.pm:1247
#, c-format
msgid "Read carefully"
msgstr "সতর্কতার সাথে পড়ো"
#: diskdrake/hd_gtk.pm:115
#, c-format
msgid "Please make a backup of your data first"
msgstr "অনুগ্রহ করে প্রথমে আপনার ডাটার একটি ব্যাকআপ করে নিন"
#: diskdrake/hd_gtk.pm:116 diskdrake/interactive.pm:240
#, c-format
msgid "Exit"
msgstr "বাহির"
#: diskdrake/hd_gtk.pm:116
#, c-format
msgid $entry->{xen} ? #: diskdrake/hd_gtk.pm:188 fs/partitioning_wizard.pm:555 interactive.pm:653
#: interactive/gtk.pm:809 interactive/gtk.pm:827 interactive/gtk.pm:848
#: ugtk2.pm:936
if_($entry->{root}, $entry->{root} =~ /loop7/ ? "root=707" : "root=$entry->{root}"), #- special to workaround bug in kernel (see #ifdef CONFIG_BLK_DEV_LOOP)
$entry->{append},
if_($entry->{'read-write'}, 'rw'),
if_($vga && $vga ne "normal", "vga=$vga"));
push @conf, "module " . $_ foreach @{$entry->{modules} || []};
if ($entry->{initrd}) {
# split partition from initrd path and place
# it to a separate 'root' entry.
# Grub2's mkconfig takes initrd entry 'as is',
# but grub2 fails to load smth like '(hd0,1)/boot/initrd' taken from grub-legacy
my $initrd_path = $file2grub->($entry->{initrd});
if ($initrd_path =~ /^(\([^\)]+\))/) {
push @conf, "root $1";
$initrd_path =~ s/^(\([^\)]+\))//;
}
push @conf, join(' ', $entry->{xen} ? 'module' : 'initrd', $initrd_path);
}
} else {
my $dev = eval { device_string2grub($entry->{kernel_or_dev}, \@legacy_floppies, \@sorted_hds) };
if (!$dev) {
log::l("dropping bad entry $entry->{label} for unknown device $entry->{kernel_or_dev}");
next;
}
push @conf, $title;
push @conf, grep { $entry->{$_} } 'lock';
if ($entry->{type} ne 'grub_configfile' || $entry->{configfile} !~ /grub\.cfg/ || !$entry->{root}) {
push @conf, join(' ', $entry->{rootnoverify} ? 'rootnoverify' : 'root', $dev);
}
if ($entry->{table}) {
if (my $hd = fs::get::device2part($entry->{table}, \@sorted_hds)) {
if (my $bios = find_index { $hd eq $_ } @sorted_hds) {
#- boot off the nth drive, so reverse the BIOS maps
my $nb = sprintf("0x%x", 0x80 + $bios);
$entry->{mapdrive} ||= { '0x80' => $nb, $nb => '0x80' };
}
}
}
if ($entry->{mapdrive}) {
push @conf, map_each { "map ($::b) ($::a)" } %{$entry->{mapdrive}};
}
push @conf, "makeactive" if $entry->{makeactive};
# grub.cfg is grub2 config, can't use it as configfile for grub-legacy
if ($entry->{type} eq 'grub_configfile' && $entry->{configfile} !~ /grub\.cfg/) {
push @conf, "configfile $entry->{configfile}";
} elsif ($entry->{linux}) {
push @conf, "root $entry->{root}", "kernel $entry->{linux}";
push @conf, "initrd $entry->{initrd}" if $entry->{initrd};
} else {
push @conf, "chainloader +1";
}
}
}
my $f = "$::prefix/boot/grub/menu.lst";
log::l("writing grub config to $f");
renamef($f, $f . ($o_backup_extension || '.old'));
output_with_perm($f, 0600, map { "$_\n" } @conf);
}
{
my $f = "$::prefix/boot/grub/install.sh";
my $boot_dev = device_string2grub($bootloader->{boot}, \@legacy_floppies, \@sorted_hds);
my $files_dev = device2grub(fs::get::root_($fstab, 'boot'), \@sorted_hds);
renamef($f, $f . ($o_backup_extension || '.old'));
output_with_perm($f, 0755,
"grub --device-map=/boot/grub/device.map --batch <<EOF
root $files_dev
setup --stage2=/boot/grub/stage2 $boot_dev
quit
EOF
");
}
check_enough_space();
}
sub configure_kdm_BootManager {
my ($name) = @_;
eval { common::update_gnomekderc_no_create("$::prefix/etc/kde/kdm/kdmrc", 'Shutdown' => (
BootManager => $name
)) };
}
sub sync_partition_data_to_disk {
my ($part) = @_;
common::sync();
if ($part->{fs_type} eq 'xfs') {
run_program::rooted($::prefix, 'xfs_freeze', '-f', $part->{mntpoint});
run_program::rooted($::prefix, 'xfs_freeze', '-u', $part->{mntpoint});
}
}
sub _dev_to_MBR_backup {
my ($dev) = @_;
$dev =~ s!/dev/!!;
$dev =~ s!/!_!g;
"$::prefix/boot/boot.backup.$dev";
}
sub save_previous_MBR_bootloader {
my ($dev) = @_;
my $t;
open(my $F, $dev);
CORE::read($F, $t, 0x1b8); #- up to disk magic
output(_dev_to_MBR_backup($dev), $t);
}
sub restore_previous_MBR_bootloader {
my ($dev) = @_;
log::l("restoring previous bootloader on $dev");
output($dev, scalar cat_(_dev_to_MBR_backup($dev)));
}
sub install_grub2 {
my ($bootloader, $all_hds) = @_;
my $error;
write_grub2($bootloader, $all_hds);
my $boot = $bootloader->{boot};
# if (member($boot, map { "/dev/$_->{device}" } @{$all_hds->{hds}}) {
if ($boot =~ /\d$/) {
run_program::rooted($::prefix, 'grub2-install', '2>', \$error, '--grub-setup=/bin/true', $boot) or die "grub2-install failed: $error";
} else {
run_program::rooted($::prefix, 'grub2-install', '2>', \$error, $boot) or die "grub2-install failed: $error";
}
setVarsInSh("$::prefix/boot/grub2/drakboot.conf", { boot => $boot });
}
sub install_grub {
my ($bootloader, $all_hds) = @_;
write_grub($bootloader, $all_hds);
if (!$::testing) {
if ($bootloader->{previous_boot} && $bootloader->{previous_boot} eq $bootloader->{boot}) {
# nothing to do (already installed in {boot})
} else {
if ($bootloader->{previous_boot}) {
restore_previous_MBR_bootloader(delete $bootloader->{previous_boot});
}
if (fs::get::device2part($bootloader->{boot}, [ fs::get::hds($all_hds) ])) {
save_previous_MBR_bootloader($bootloader->{boot});
$bootloader->{previous_boot} = $bootloader->{boot};
}
}
my @files = grep { /(stage1|stage2|_stage1_5)$/ } glob("$::prefix/lib/grub/*/*");
cp_af(@files, "$::prefix/boot/grub");
sync_partition_data_to_disk(fs::get::root([ fs::get::fstab($all_hds) ], 'boot'));
install_raw_grub();
}
configure_kdm_BootManager('Grub');
}
sub install_raw_grub() {
log::l("Installing boot loader...");
my $error;
run_program::rooted($::prefix, "sh", "2>", \$error, '/boot/grub/install.sh') or die "grub failed: $error";
}
sub when_config_changed_grub2 {
my ($_bootloader) = @_;
#- do not do anything
}
sub when_config_changed_grub {
my ($_bootloader) = @_;
#- do not do anything
update_copy_in_boot($_) foreach glob($::prefix . boot_copies_dir() . '/*.link');
}
=item action($bootloader, $action, @para)
Calls the C<$action> function with @para parameters:
$actions->($bootloader, @para)
If needed, the function name will be resolved to call a boot loader specific function (eg: for LILO/GRUB/...)
=cut
sub action {
my ($bootloader, $action, @para) = @_;
my $main_method = main_method($bootloader->{method});
my $f = $bootloader::{$action . '_' . $main_method} or die "unknown bootloader method $bootloader->{method} ($action)";
$f->($bootloader, @para);
}
=item install($bootloader, $all_hds)
Writes back the boot loader config. Calls the proper write_XYZ() function.
=cut
sub install {
my ($bootloader, $all_hds) = @_;
if (my $part = fs::get::device2part($bootloader->{boot}, [ fs::get::fstab($all_hds) ])) {
die N("You cannot install the bootloader on a %s partition\n", $part->{fs_type})
if member($part->{fs_type}, qw(btrfs xfs));
}
$bootloader->{keytable} = keytable($bootloader->{keytable});
action($bootloader, 'install', $all_hds);
}
sub ensure_pkg_is_installed {
my ($do_pkgs, $bootloader) = @_;
my %pkg = ('grub2' => glob_("/sys/firmware/efi/*") ? 'grub2-efi' : 'grub2');
my %h = ('grub2' => 'grub2-install');
my $main_method = main_method($bootloader->{method});
if (member($main_method, qw(grub grub2 lilo))) {
$do_pkgs->ensure_binary_is_installed($pkg{$main_method} || $main_method, $h{$main_method} || $main_method, 1) or return 0;
if ($bootloader->{method} eq 'grub-graphic') {
$do_pkgs->ensure_is_installed('mageia-gfxboot-theme', '/usr/share/gfxboot/themes/Mageia/boot/message', 1) or return 0;
}
}
1;
}
sub parse_grub2_config {
my ($l, $grubcfg, $part) = @_;
my ($linux, $menuentry, $root, $root_dev, $initrd);
foreach (cat_($grubcfg)) {
chomp;
if (/^menuentry\s+['"]([^']+)["']/) {
if ($menuentry && $root) {
my $parttype = partition_table::raw::typeOfMBR($root_dev);
if ((!$parttype || $parttype eq "empty") && $linux) {
push @$l, { menuentry => $menuentry, bootpart => $part, root => $root, linux => $linux, initrd => $initrd, grub_conf => $grubcfg };
}
}
$menuentry = $1;
$root = $linux = undef;
} elsif (/set root='(\([^\)]+\))'/) {
$root = $1;
if ($root =~ /\(([^,]+),msdos(\d+)\)/) {
my $dev_title = "/" . $1;
my $part_num = $2;
my $dec_part_num = $part_num-1;
$dev_title =~ s!hd!dev/sd!;
$dev_title =~ tr/0123456789/abcdefghi/;
$root_dev = $part_num ? $dev_title . $part_num : $dev_title;
$root =~ s/msdos$part_num/$dec_part_num/;
}
} elsif (/^\s+linux\s+(.+)/) {
$linux = $1;
} elsif (/^\s+initrd\s+(.+)/) {
$initrd = $1;
}
}
}
=item find_other_distros_grub_conf($fstab)
Returns a list of other distros' grub.conf
=cut
sub find_other_distros_grub_conf {
my ($fstab) = @_;
my @unknown_true_fs =
grep { isTrueLocalFS($_) &&
(!$_->{mntpoint} || !member($_->{mntpoint}, '/home', fs::type::directories_needed_to_boot()));
} @$fstab;
log::l("looking for configured grub on partitions " . join(' ', map { $_->{device} } @unknown_true_fs));
my @l;
foreach my $part (@unknown_true_fs) {
my $handle = any::inspect($part, $::prefix) or next;
foreach my $bootdir ('', '/boot') {
my $f = find { -e "$handle->{dir}$bootdir/$_" } 'grub.conf', 'grub/menu.lst' or next;
push @l, { bootpart => $part, bootdir => $bootdir, grub_conf => "$bootdir/$f" };
}
foreach my $bootdir ('', '/boot', '/boot/grub', '/boot/grub2') {
my $f = find { -e "$handle->{dir}$bootdir/$_" } 'grub.cfg' or next;
my $parttype = partition_table::raw::typeOfMBR($part->{device});
if (!$parttype || $parttype eq "empty") {
parse_grub2_config(\@l, "$handle->{dir}/$bootdir/$f", $part);
} else {
push @l, { bootpart => $part, bootdir => $bootdir, grub_conf => "$bootdir/$f" };
}
}
if (my $f = common::release_file($handle->{dir})) {
my $h = common::parse_release_file($handle->{dir}, $f, $part);
$h->{name} = $h->{release};
push @l, $h;
} elsif ($handle && -e "$handle->{dir}/etc/issue") {
my ($s, $dropped) = cat_("$handle->{dir}/etc/issue") =~ /^([^\\\n]*)(.*)/;
log::l("found /etc/issue: $s (removed: $dropped)");
push @l, { name => $s, part => $part };
}
}
my $root;
my $set_root = sub {
my ($v) = @_;
$root and log::l("don't know what to do with $root->{name} ($root->{part}{device})");
$root = $v;
};
my @found;
while (my $e = shift @l) {
if ($e->{name}) {
$set_root->($e);
} else {
if (@l && $l[0]{name}) {
$set_root->(shift @l);
}
my $ok;
if ($root && $root->{part} == $e->{bootpart} && $e->{bootdir}) {
# easy case: /boot is not a separate partition
$ok = 1;
} elsif ($root && $root->{part} != $e->{bootpart} && !$e->{bootdir}) {
log::l("associating '/' $root->{part}{device} with '/boot' $e->{bootpart}{device}");
$ok = 1;
}
if ($ok) {
add2hash($e, $root);
undef $root;
} elsif ($root) {
log::l("weird case for grub conf in $e->{bootpart}{device}, keeping '/' from $root->{part}{device}");
} else {
log::l("could not recognise the distribution for $e->{grub_conf} in $e->{bootpart}{device}");
}
$e->{name} ||= "Linux $e->{bootpart}{device}";
push @found, $e;
}
}
$set_root->(undef);
@found;
}
sub update_for_renumbered_partitions {
my ($in, $renumbering, $all_hds) = @_;
my @configs = grep { $_->{content} } config_files();
$_->{new} = $_->{orig} = $_->{content} foreach @configs;
my @sorted_hds; {
my $grub2dev = read_grub_device_map();
map_each {
$sorted_hds[$1] = fs::get::device2part($::b, $all_hds->{hds}) if $::a =~ /hd(\d+)/;
} %$grub2dev;
}
#- NB: we make the changes with an added string inside so that hda5 is only renamed once to hda6
foreach (@$renumbering) {
my ($old, $new) = @$_;
log::l("renaming $old -> $new");
(my $lnew = $new) =~ s/(\d+)$/__DRAKX_DONE__$1/;
$_->{new} =~ s/\b$old/$lnew/g foreach @configs;
any { $_->{name} eq 'grub' } @configs or next;
my ($old_grub, $new_grub) = map { device_string2grub($_, [], \@sorted_hds) } $old, $new;
log::l("renaming $old_grub -> $new_grub");
(my $lnew_grub = $new_grub) =~ s/\)$/__DRAKX_DONE__)/;
$_->{new} =~ s/\Q$old_grub/$lnew_grub/g foreach @configs;
}
$_->{new} =~ s/__DRAKX_DONE__//g foreach @configs;
my @changed_configs = grep { $_->{orig} ne $_->{new} } @configs or return 1; # no need to update
$in->ask_okcancel('', N("Your bootloader configuration must be updated because partition has been renumbered")) or return;
foreach (@changed_configs) {
renamef("$::prefix/$_->{file}", "$::prefix/$_->{file}.old");
output("$::prefix/$_->{file}", $_->{new});
}
my $main_method = detect_main_method($all_hds);
my @needed = map {
$_ eq 'grub' ? 'grub_install' : $_;
} $main_method ? $main_method : ('lilo', 'grub');
if (intersection(\@needed, [ map { $_->{name} } @changed_configs ])) {
$in->ask_warn('', N("The bootloader cannot be installed correctly. You have to boot rescue and choose \"%s\"",
N("Re-install Boot Loader")));
}
1;
}
=back
=cut
1;
|