home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2007 January, February, March & April
/
Chip-Cover-CD-2007-02.iso
/
boot
/
i386
/
root
/
usr
/
share
/
YaST2
/
include
/
repair
/
osr_module_packages.ycp
< prev
next >
Wrap
Text File
|
2006-11-29
|
17KB
|
526 lines
/**
* File:
* osr_module_packages.ycp
*
* Module:
* YaST2 Repair packages module.
*
* Summary:
* YaST2 Repair. Automatic error detection & repair tool for Linux.
*
* Author:
* Johannes Buchhold <jbuch@suse.de>
*
* $Id: osr_module_packages.ycp 23769 2005-06-21 12:18:10Z jsuchome $
*/
{
textdomain "repair";
import "Popup";
import "Report";
import "Stage";
import "OSRCommon";
import "OSRPkg";
import "OSRPkgVerify";
import "OSRSummary";
import "OSRStatus";
import "OSRSystem";
import "OSRFstab";
import "OSRPopup";
import "OSR";
//////////////////////////////////////////////////////////////////////
//
// DETECTION METHODS
//
//////////////////////////////////////////////////////////////////////
/**
* Mount all partitions specified in the fstab
*/
define boolean OSRPackagesMountAll()``{
if( ! OSRFstab::ReadedSuccessfully())
OSRCommon::ProvideList("just_umounted", OSRFstab::UmountAllFrom( OSRSystem::TargetRoot()));
list<map> mounted = OSRFstab::MountAll( OSRSystem::TargetRoot());
list<map> success = filter(map mpe , mounted, ``(mpe["status"]:false == true));
if( mounted == nil )
{
// summary text
OSRSummary::DetectError("",_("Target system was not initialized"));
OSRStatus::Cancel();
return false;
}
list<map> failed = filter(map mpe, mounted, ``(mpe["status"]:true == false));
if( size(failed) > 0 )
{
OSRSummary::DetectProblem("",
// summary text
sformat(_("Following devices cannot be mounted:<br>%1"),
mergestring(maplist(map mpe, failed, ``(sformat("%1",mpe["partition"]:""))), "<br>")));
}
else {
// summary text
OSRSummary::DetectOK("", _("Target system initialized"));
}
OSRCommon::ProvideBoolean("mounted_all", true );
OSRCommon::ProvideList("just_mounted", union( OSRCommon::RequireList("just_mounted"), success));
return true;
}
/**
*
*/
define boolean OSRPackagesDBFind() ``{
/////////////////////////////////////////////////////////////////////////
//
//
//
/////////////////////////////////////////////////////////////////////////
if ( OSRPkg::CheckDB (OSRSystem::TargetRoot()))
{
// summary text
OSRSummary::DetectOK ("",_("Package database was found"));
OSRCommon::ProvideBoolean ("package_db_found", true);
}
else
{
// summary text
OSRSummary::DetectError ("", _("No package database was found"));
OSRSummary::SetRepairSummary (OSRPkg::RepairDB(),
// summary header
_("Initializing new package database..."),
// summary text
_("Successfully initialized new package database"),
// summary text
_("Skipped initializing new package database"),
// summary text
_("Initialization of the new package database was not successful"));
}
// now check the correct product version: (#45306)
if (! OSRPkg::CheckProductVersions ())
{
// error text in summary
OSRSummary::DetectError ("", _("Different versions of products"));
OSRStatus::ErrorSeverityModuleBlocking ();
// error popup, %1 is tool name
Popup::Error (sformat (_("You are using %1 from a product
different than the installed one.
Because the package database of the installed product
can be broken, only the package database on the installation
media can be used for package database checking.
Checking the package database is not possible and will be skipped."),
OSRCommon::tool_name));
}
return true;
}
/**
*
*/
define boolean OSRPackagesCheckMinimumSelection()``{
/////////////////////////////////////////////////////////////////////////
//
//
//
/////////////////////////////////////////////////////////////////////////
if ( OSRPkg::CheckMinimum(""))
{
// summary text
OSRSummary::DetectOK("",_("Minimum required packages were found"));
OSRCommon::ProvideBoolean("package_minimal_selection", true);
}
else {
OSRSummary::DetectError("",
// summary text
_("Some packages of the minimum requirement were missing"));
OSRSummary::SetRepairSummary(OSRPkg::InstallMissing(true),
// summary heder
_("Installing missing packages..."),
// summary text
_("Installation of missing packages was successful"),
// summary text
_("Installation of missing packages was skipped"),
// summary text
_("Installation of missing packages was not successful"));
}
return true;
}
/**
*
*/
define boolean OSRPackagesVerifyPackages(string what)``{
/////////////////////////////////////////////////////////////////////////
//
//
//
/////////////////////////////////////////////////////////////////////////
symbol ret = OSRPkg::VerifyPackages("", what, false, true );
if( ret == `abort || ret == `cancel )
{
// summary text
OSRSummary::DetectOmit("", _("Package verification was canceled"));
}
else if (ret == `error || ret == `different_products)
{
// summary text
OSRSummary::DetectError("", _("Package verification failed"));
}
else if ( size( OSRPkg::missing_packages ) > 0 )
{
OSRSummary::SetRepairSummary( OSRPkg::InstallMissing(true),
"",
// summary text
_("Reinstallation of unverified packages was successful"),
// summary text
_("Reinstallation of unverified packages was skipped"),
// summary text
_("Reinstallation of unverified packages was not successful"));
}
else if ( size( OSRPkg::missing_packages ) == 0 )
{
// summary text
OSRSummary::DetectOK("", _("All packages were verified successfully"));
}
//Not a second verify process!!
OSRStatus::DetectOK();
OSRCommon::ProvideBoolean("package_verified", true);
return true;
}
/**
* wrapper
*/
define boolean OSRPackagesVerifyBasePackages() ``{
return OSRPackagesVerifyPackages ("base");
}
/**
* wrapper
*/
define boolean OSRPackagesVerifyAllPackages() ``{
return OSRPackagesVerifyPackages ("all");
}
define symbol OSRDirectPackageCheck()``{
symbol ret = `next;
// radio button label
string sret = _("Base Packages Only");
// radio button label
list<string> options = [ sret , _("All Installed Packages") ];
UI::NormalCursor();
if( ! Stage::initial () )
{
// RadioButtonGroup label
sret = OSRPopup::RadioButtonGroup(_("Package Range"),
// RadioButtonGroup text
_("
You can verify all packages
or only the base packages. Verifying all packages
is very time consuming.
"),
options,
options[0]:"",
false);
}
if ( sret == "" )
{
ret = `cancel;
}
else
{
symbol verified = OSRPkg::VerifyPackages (OSRSystem::TargetRoot(),
( options[0]:"" == sret ) ? "base" : "all",
false, true);
if (verified == `different_products)
{
Popup::Error (_("Cannot initialize package database."));
}
else if (OSRPkg::missing_packages != [])
{
OSRPkg::InstallMissing(true);
}
else
{
Report::Message (sformat(_("Verified %1 packages successfully.
"), OSRPkgVerify::VerifiedSize ()));
}
}
OSRFstab::Reset();
OSRPkg::Reset();
y2milestone("Direct package check");
return ret;
}
/**
* Reset boot loader temporary settings.
*/
define boolean OSRPackagesReset() ``{
OSRSystem::SetOrgRoot();
OSRPkg::Reset();
return true;
}
/**
* Initialization of the module map that contains all important information
* for this module.
*
* @return map The map that contains all information about the module
* osr_module_packages
*/
define map OSRPackagesInit() ``{
y2milestone("OSRPackagesInit");
// helptext
string common_package_texts = _("The most common way to add a new program or library
to a Linux system is to install a new package.
In doing so, the install routine copies all files of the
package to the target and registers the package in
the package database.
");
// helptext, %1 adds additional sentences
string verify_package_text = sformat(_("
%1
The package database administers all
information about the installed software packages.
Verifying a package means that the information
in the package database about a package is
compared with the actual installed files.
"), common_package_texts );
map global_menu_entries = $[
"packages_db_check" : $[
// module action label
"text" : _("Check Package Database"),
//%1 adds some sentences
"help" : sformat(_("
<p>
The package database administers all
information about the installed software packages.
%1
This makes it possible to remove the package later.</P>
"), common_package_texts ) +
// helptext
_("<P>
This procedure checks all files that pertain to the
package database. If some files are missing
or the package database cannot be opened,
you can rebuild the database or
revert to a backup.</P>
")
],
"packages_selection" : $[
// module action label
"text" : _("Check Minimal Package Selection"),
// helptext, %1 is some sentences
"help" : sformat(_("
<P>
%1
&product; needs at least some packages for
the basic system functionality. Without these
packages, the system is not executable.</P>
"), common_package_texts ) +
// helptext
_("<P>
This procedure checks if all packages of a minimal installation
are installed. If
some packages are missing, you can
install the missing packages.</P>
"),
"requires" : [ "packages_db_check"]
],
"packages_verify_base" :
$[
// module action label
"text" : _("Verify Base Packages (time consuming)"),
// helptext
"help" : sformat("
<P>%1</P>
", verify_package_text ) +
// helptext
_("<P>
This procedure verifies all packages that belong
to the minimum selection. If
discrepancies appear, you can
reinstall the damaged packages.</P>
"),
"requires" : [ "packages_db_check"]
]
];
if( ! Stage::initial () )
{
global_menu_entries[ "packages_verify_all" ] =
$[
// module action label
"text" : _("Verify All Installed Packages (very time consuming)"),
// helptext
"help" : sformat("
<P>
%1
</P>
", verify_package_text ) +
// helptext
_("<P>
This procedure verifies all installed packages. If
discrepancies appear, you can
reinstall the damaged packages. Verifying
all packages is very time consuming. Therefore,
this menu entry does not belong to the default
selection.</P>
"),
"selected" : false,
"requires" : [ "packages_db_check"]
];
}
map ret = $[
"name" : "osr_module_packages",
// module headline
"headline" : _("Packages"),
"global_entries" : global_menu_entries,
"static_provides" : $[],
"reset_methods" : [
$[
// module reset label
"summary" : _("Reset Package Check Settings"),
"method" : OSRPackagesReset,
"provides" : 10
]
],
// the sequence of the detection methods of this module
"detect_methods" : [
$[ "name" : "mount_all",
// module method progress label
"summary" : _("Mounting all partitions..."),
"method" : OSRPackagesMountAll,
"requires" : [ "fstab_checked" ],
"provides" : [ "mounted_all" ],
"group" : "packages_db_check",
"progress" : 10
],
$[ "name" : "find_package_db",
// module method progress label
"summary" : _("Searching for package database..."),
"method" : OSRPackagesDBFind,
"requires" : [ "mounted_all" ],
"provides" : [ "package_db_found" ],
"group" : "packages_db_check",
"progress" : 10
],
$[ "name" : "find_minimal_selection",
// module method progress label
"summary" : _("Searching for minimum required packages..."),
"method" : OSRPackagesCheckMinimumSelection,
"requires" : [ "package_db_found" ],
"provides" : [ "package_minimal_selection" ],
"group" : "packages_selection",
"progress" : 10
],
$[ "name" : "verify_base_packages",
// module method progress label
"summary" : _("Verifying base packages..."),
"method" : OSRPackagesVerifyBasePackages,
"requires" : [ "package_minimal_selection" ],
"provides" : [ "package_base_verified" ],
"group" : "packages_verify_base",
"progress" : 10
]
],
"direct_methods" : [
$[
"name" : "direct_methods_verify_packages",
// module method acton label
"button_text" : _("Verify Installed Software"),
// module method description
"description" : _("
If you have problems with some installed
applications, select this to check
all software packages.
"),
"method" : OSRDirectPackageCheck,
"initial_only" : false,
"visible" : true,
"initial_root" : true
]
]
];
if ( ! Stage::initial () )
{
ret[ "detect_methods" ] = add( ret[ "detect_methods" ]:[],
$[ "name" : "verify_all_packages",
// module method progress label
"summary" : _("Verifying all installed packages..."),
"method" : OSRPackagesVerifyAllPackages,
"requires" : [ "package_minimal_selection" ],
"provides" : [ "package_all_verified" ],
"group" : "packages_verify_all",
"progress" : 10
] );
}
return ret;
}
/*
integer arg_n = 0;
//////////////////////////////////////////////////////////////////////
//
// MAIN
//
//////////////////////////////////////////////////////////////////////
while ( arg_n < size(WFM::Args()) )
{
if ( WFM::Args(arg_n) == .init )
{
y2milestone("Argument: %1", WFM::Args(arg_n));
return OSRPackagesInit();
}
else
{
y2error("ERROR: unknown option %1", WFM::Args(arg_n) );
return $[];
}
arg_n = arg_n + 1;
}
*/
}//EOF