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 >
Text File  |  2006-11-29  |  17KB  |  526 lines

  1. /**
  2.  * File:
  3.  *   osr_module_packages.ycp
  4.  *
  5.  * Module:
  6.  *   YaST2 Repair packages module.
  7.  *
  8.  * Summary:
  9.  *   YaST2 Repair. Automatic error detection & repair tool for Linux.
  10.  *
  11.  * Author:
  12.  *   Johannes Buchhold <jbuch@suse.de>
  13.  *
  14.  * $Id: osr_module_packages.ycp 23769 2005-06-21 12:18:10Z jsuchome $
  15.  */
  16.  
  17. {
  18.   textdomain "repair";
  19.  
  20.   import "Popup";
  21.   import "Report";
  22.   import "Stage";
  23.  
  24.   import "OSRCommon";
  25.   import "OSRPkg";
  26.   import "OSRPkgVerify";
  27.   import "OSRSummary";
  28.   import "OSRStatus";
  29.   import "OSRSystem";
  30.   import "OSRFstab";
  31.   import "OSRPopup";
  32.   import "OSR";
  33.  
  34.  
  35.  
  36.   //////////////////////////////////////////////////////////////////////
  37.   //
  38.   //  DETECTION METHODS
  39.   //
  40.   //////////////////////////////////////////////////////////////////////
  41.  
  42.   /**
  43.    * Mount all partitions specified in the fstab
  44.    */
  45.   define boolean OSRPackagesMountAll()``{
  46.  
  47.       if( ! OSRFstab::ReadedSuccessfully())
  48.       OSRCommon::ProvideList("just_umounted", OSRFstab::UmountAllFrom( OSRSystem::TargetRoot()));
  49.  
  50.       list<map> mounted      = OSRFstab::MountAll( OSRSystem::TargetRoot());
  51.       list<map> success      = filter(map mpe , mounted, ``(mpe["status"]:false == true));
  52.  
  53.       if( mounted == nil )
  54.       {
  55.         // summary text
  56.         OSRSummary::DetectError("",_("Target system was not initialized"));
  57.         OSRStatus::Cancel();
  58.         return false;
  59.       }
  60.  
  61.       list<map> failed       = filter(map mpe,  mounted, ``(mpe["status"]:true  == false));
  62.       if( size(failed) > 0 )
  63.       {
  64.         OSRSummary::DetectProblem("",
  65.             // summary text
  66.             sformat(_("Following devices cannot be mounted:<br>%1"),
  67.                 mergestring(maplist(map mpe, failed, ``(sformat("%1",mpe["partition"]:""))), "<br>")));
  68.  
  69.  
  70.       }
  71.       else {
  72.         // summary text
  73.         OSRSummary::DetectOK("", _("Target system initialized"));
  74.       }
  75.  
  76.       OSRCommon::ProvideBoolean("mounted_all", true );
  77.       OSRCommon::ProvideList("just_mounted", union( OSRCommon::RequireList("just_mounted"), success));
  78.  
  79.       return true;
  80.   }
  81.  
  82.   /**
  83.    *
  84.    */
  85.   define boolean OSRPackagesDBFind() ``{
  86.     /////////////////////////////////////////////////////////////////////////
  87.     //
  88.     //
  89.     //
  90.     /////////////////////////////////////////////////////////////////////////
  91.     if ( OSRPkg::CheckDB (OSRSystem::TargetRoot()))
  92.     {
  93.     // summary text
  94.         OSRSummary::DetectOK ("",_("Package database was found"));
  95.         OSRCommon::ProvideBoolean ("package_db_found", true);
  96.     }
  97.     else
  98.     {
  99.         // summary text
  100.         OSRSummary::DetectError ("", _("No package database was found"));
  101.         OSRSummary::SetRepairSummary (OSRPkg::RepairDB(),
  102.                        // summary header
  103.                        _("Initializing new package database..."),
  104.                        // summary text
  105.                        _("Successfully initialized new package database"),
  106.                        // summary text
  107.                        _("Skipped initializing new package database"),
  108.                        // summary text
  109.                        _("Initialization of the new package database was not successful"));
  110.  
  111.     }
  112.     // now check the correct product version: (#45306)
  113.     if (! OSRPkg::CheckProductVersions ())
  114.     {
  115.     // error text in summary
  116.     OSRSummary::DetectError ("", _("Different versions of products"));
  117.     OSRStatus::ErrorSeverityModuleBlocking ();
  118.     // error popup, %1 is tool name
  119.     Popup::Error (sformat (_("You are using %1 from a product 
  120. different than the installed one.
  121.  
  122. Because the package database of the installed product 
  123. can be broken, only the package database on the installation 
  124. media can be used for package database checking. 
  125.  
  126. Checking the package database is not possible and will be skipped."),
  127.     OSRCommon::tool_name));
  128.     }
  129.  
  130.     return true;
  131.   }
  132.  
  133.   /**
  134.    *
  135.    */
  136.   define boolean OSRPackagesCheckMinimumSelection()``{
  137.       /////////////////////////////////////////////////////////////////////////
  138.       //
  139.       //
  140.       //
  141.       /////////////////////////////////////////////////////////////////////////
  142.       if ( OSRPkg::CheckMinimum(""))
  143.       {
  144.         // summary text
  145.         OSRSummary::DetectOK("",_("Minimum required packages were found"));
  146.         OSRCommon::ProvideBoolean("package_minimal_selection", true);
  147.       }
  148.       else {
  149.         OSRSummary::DetectError("",
  150.             // summary text
  151.             _("Some packages of the minimum requirement were missing"));
  152.         OSRSummary::SetRepairSummary(OSRPkg::InstallMissing(true),
  153.                     // summary heder
  154.                     _("Installing missing packages..."),
  155.                     // summary text
  156.                     _("Installation of missing packages was successful"),
  157.                     // summary text
  158.                     _("Installation of missing packages was skipped"),
  159.                     // summary text
  160.                     _("Installation of missing packages was not successful"));
  161.       }
  162.       return true;
  163.   }
  164.  
  165.   /**
  166.    *
  167.    */
  168.   define boolean OSRPackagesVerifyPackages(string what)``{
  169.  
  170.     /////////////////////////////////////////////////////////////////////////
  171.     //
  172.     //
  173.     //
  174.     /////////////////////////////////////////////////////////////////////////
  175.  
  176.     symbol ret = OSRPkg::VerifyPackages("", what, false, true );
  177.  
  178.     if( ret == `abort || ret == `cancel )
  179.     {
  180.     // summary text
  181.     OSRSummary::DetectOmit("", _("Package verification was canceled"));
  182.     }
  183.     else if (ret == `error || ret == `different_products)
  184.     {
  185.     // summary text
  186.         OSRSummary::DetectError("", _("Package verification failed"));
  187.     }
  188.     else if ( size( OSRPkg::missing_packages ) > 0 )
  189.     {
  190.     OSRSummary::SetRepairSummary( OSRPkg::InstallMissing(true),
  191.                 "",
  192.                 // summary text
  193.                 _("Reinstallation of unverified packages was successful"),
  194.                 // summary text
  195.                 _("Reinstallation of unverified packages was skipped"),
  196.                 // summary text
  197.                 _("Reinstallation of unverified packages was not successful"));
  198.     }
  199.     else if ( size( OSRPkg::missing_packages ) == 0 )
  200.     {
  201.         // summary text
  202.         OSRSummary::DetectOK("", _("All packages were verified successfully"));
  203.     }
  204.  
  205.     //Not a second verify process!!
  206.     OSRStatus::DetectOK();
  207.     OSRCommon::ProvideBoolean("package_verified", true);
  208.     return true;
  209.   }
  210.  
  211.   /**
  212.    * wrapper
  213.    */
  214.   define boolean OSRPackagesVerifyBasePackages() ``{
  215.  
  216.       return OSRPackagesVerifyPackages ("base");
  217.   }
  218.  
  219.   /**
  220.    * wrapper
  221.    */
  222.   define boolean OSRPackagesVerifyAllPackages() ``{
  223.  
  224.       return OSRPackagesVerifyPackages ("all");
  225.   }
  226.  
  227.   define symbol OSRDirectPackageCheck()``{
  228.       symbol ret       = `next;
  229.       // radio button label
  230.       string sret      = _("Base Packages Only");
  231.       // radio button label
  232.       list<string> options = [ sret , _("All Installed Packages") ];
  233.  
  234.       UI::NormalCursor();
  235.       if( ! Stage::initial () )
  236.       {
  237.         // RadioButtonGroup label
  238.         sret = OSRPopup::RadioButtonGroup(_("Package Range"),
  239.             // RadioButtonGroup text
  240.             _("
  241. You can verify all packages
  242. or only the base packages. Verifying all packages 
  243. is very time consuming.
  244. "),
  245.             options,
  246.             options[0]:"",
  247.             false);
  248.       }
  249.  
  250.       if ( sret == "" )
  251.       {
  252.       ret = `cancel;
  253.       }
  254.       else
  255.       {
  256.     symbol verified = OSRPkg::VerifyPackages (OSRSystem::TargetRoot(),
  257.         ( options[0]:"" == sret ) ? "base" : "all",
  258.         false, true);
  259.  
  260.     if (verified == `different_products)
  261.     {
  262.         Popup::Error (_("Cannot initialize package database."));
  263.     }
  264.     else if (OSRPkg::missing_packages != [])
  265.     {
  266.         OSRPkg::InstallMissing(true);
  267.     }
  268.     else
  269.     {
  270.         Report::Message (sformat(_("Verified %1 packages successfully.
  271. "), OSRPkgVerify::VerifiedSize ()));
  272.  
  273.     }
  274.       }
  275.  
  276.       OSRFstab::Reset();
  277.       OSRPkg::Reset();
  278.       y2milestone("Direct package check");
  279.       return ret;
  280.   }
  281.  
  282.   /**
  283.    *  Reset boot loader temporary settings.
  284.    */
  285.   define boolean OSRPackagesReset() ``{
  286.  
  287.       OSRSystem::SetOrgRoot();
  288.       OSRPkg::Reset();
  289.       return true;
  290.   }
  291.  
  292.   /**
  293.    *  Initialization of the module map that contains all important information
  294.    *  for this module.
  295.    *
  296.    *  @return map The map that contains all information about the module
  297.    *  osr_module_packages
  298.    */
  299.   define map OSRPackagesInit() ``{
  300.  
  301.       y2milestone("OSRPackagesInit");
  302.  
  303.       // helptext
  304.       string common_package_texts = _("The most common way to add a new program or library
  305. to a Linux system is to install a new package.
  306. In doing so, the install routine copies all files of the
  307. package to the target and registers the package in
  308. the package database.
  309. ");
  310.  
  311.       // helptext, %1 adds additional sentences
  312.       string verify_package_text = sformat(_("
  313. %1
  314. The package database administers all
  315. information about the installed software packages.
  316. Verifying a package means that the information
  317. in the package database about a package is
  318. compared with the actual installed files.
  319. "), common_package_texts );
  320.  
  321.       map global_menu_entries = $[
  322.                   "packages_db_check" : $[
  323.                                   // module action label
  324.                          "text" : _("Check Package Database"),
  325.              //%1 adds some sentences
  326.                          "help" : sformat(_("
  327. <p>
  328. The package database administers all
  329. information about the installed software packages.
  330. %1
  331. This makes it possible to remove the package later.</P>
  332. "), common_package_texts ) +
  333. // helptext
  334. _("<P>
  335. This procedure checks all files that pertain to the
  336. package database. If some files are missing
  337. or the package database cannot be opened,
  338. you can rebuild the database or
  339. revert to a backup.</P>
  340. ")
  341.                       ],
  342.                   "packages_selection" : $[
  343.                                   // module action label
  344.                          "text" : _("Check Minimal Package Selection"),
  345.                                   // helptext, %1 is some sentences
  346.                          "help" : sformat(_("
  347.  
  348. <P>
  349. %1
  350. &product; needs at least some packages for
  351. the basic system functionality. Without these
  352. packages, the system is not executable.</P>
  353. "), common_package_texts ) +
  354.  
  355. // helptext
  356. _("<P>
  357. This procedure checks if all packages of a minimal installation
  358. are installed. If
  359. some packages are missing, you can
  360. install the missing packages.</P>
  361. "),
  362.                          "requires" : [ "packages_db_check"]
  363.                       ],
  364.                   "packages_verify_base" :
  365.                       $[
  366.                                   // module action label
  367.                         "text"  : _("Verify Base Packages (time consuming)"),
  368.                                   // helptext
  369.                         "help"  : sformat("
  370. <P>%1</P>
  371. ", verify_package_text ) +
  372.  
  373. // helptext
  374. _("<P>
  375. This procedure verifies all packages that belong
  376. to the minimum selection. If
  377. discrepancies appear, you can
  378. reinstall the damaged packages.</P>
  379. "),
  380.                          "requires" : [ "packages_db_check"]
  381.                       ]
  382.       ];
  383.  
  384.       if( ! Stage::initial () )
  385.       {
  386.       global_menu_entries[ "packages_verify_all" ] =
  387.                       $[
  388.                                   // module action label
  389.                         "text"  : _("Verify All Installed Packages (very time consuming)"),
  390.                                   // helptext
  391.                         "help"  : sformat("
  392. <P>
  393. %1
  394. </P>
  395. ", verify_package_text ) +
  396.  
  397. // helptext
  398. _("<P>
  399. This procedure verifies all installed packages. If
  400. discrepancies appear, you can
  401. reinstall the damaged packages. Verifying
  402. all packages is very time consuming. Therefore,
  403. this menu entry does not belong to the default
  404. selection.</P>
  405. "),
  406.                         "selected"  : false,
  407.                         "requires" : [ "packages_db_check"]
  408.                       ];
  409.       }
  410.  
  411.       map ret =  $[
  412.           "name"              :  "osr_module_packages",
  413.                                  // module headline
  414.           "headline"          :  _("Packages"),
  415.           "global_entries"    : global_menu_entries,
  416.           "static_provides"   : $[],
  417.           "reset_methods"     : [
  418.                       $[
  419.                                       // module reset label
  420.                         "summary"   : _("Reset Package Check Settings"),
  421.                         "method"    : OSRPackagesReset,
  422.                         "provides"  : 10
  423.                       ]
  424.           ],
  425.           // the sequence of the detection methods of this module
  426.           "detect_methods"    :  [
  427.                       $[ "name" : "mount_all",
  428.                                       // module method progress label
  429.                          "summary"  : _("Mounting all partitions..."),
  430.                          "method"   : OSRPackagesMountAll,
  431.                          "requires" :  [ "fstab_checked" ],
  432.                          "provides" :  [ "mounted_all" ],
  433.                          "group"    : "packages_db_check",
  434.                          "progress" : 10
  435.                       ],
  436.                       $[ "name" : "find_package_db",
  437.                                       // module method progress label
  438.                          "summary"  : _("Searching for package database..."),
  439.                          "method"   : OSRPackagesDBFind,
  440.                          "requires" :  [ "mounted_all" ],
  441.                          "provides" :  [ "package_db_found" ],
  442.                          "group"    : "packages_db_check",
  443.                          "progress" : 10
  444.                       ],
  445.                       $[ "name" : "find_minimal_selection",
  446.                                       // module method progress label
  447.                          "summary"  : _("Searching for minimum required packages..."),
  448.                          "method"   : OSRPackagesCheckMinimumSelection,
  449.                          "requires" :  [ "package_db_found" ],
  450.                          "provides" :  [ "package_minimal_selection" ],
  451.                          "group"    : "packages_selection",
  452.                          "progress" : 10
  453.                       ],
  454.                       $[ "name" : "verify_base_packages",
  455.                                       // module method progress label
  456.                          "summary"  : _("Verifying base packages..."),
  457.                          "method"   : OSRPackagesVerifyBasePackages,
  458.                          "requires" :  [ "package_minimal_selection" ],
  459.                          "provides" :  [ "package_base_verified" ],
  460.                          "group"    : "packages_verify_base",
  461.                          "progress" : 10
  462.                       ]
  463.           ],
  464.  
  465.           "direct_methods" : [
  466.                       $[
  467.                     "name"      : "direct_methods_verify_packages",
  468.                                       // module method acton label
  469.                     "button_text"   : _("Verify Installed Software"),
  470.                                       // module method description
  471.                     "description"   : _("
  472. If you have problems with some installed
  473. applications, select this to check
  474. all software packages.
  475. "),
  476.                     "method"        : OSRDirectPackageCheck,
  477.                     "initial_only"  : false,
  478.                     "visible"       : true,
  479.                     "initial_root"  : true
  480.                     ]
  481.           ]
  482.       ];
  483.  
  484.       if ( ! Stage::initial () )
  485.       {
  486.       ret[ "detect_methods" ] = add(  ret[ "detect_methods" ]:[],
  487.                       $[ "name"     : "verify_all_packages",
  488.                                       // module method progress label
  489.                          "summary"  : _("Verifying all installed packages..."),
  490.                          "method"   : OSRPackagesVerifyAllPackages,
  491.                          "requires" :  [ "package_minimal_selection" ],
  492.                          "provides" :  [ "package_all_verified" ],
  493.                          "group"    : "packages_verify_all",
  494.                          "progress" : 10
  495.                       ] );
  496.       }
  497.       return ret;
  498.  
  499.   }
  500.  
  501.  
  502.  
  503.   /*
  504.   integer arg_n = 0;
  505.   //////////////////////////////////////////////////////////////////////
  506.   //
  507.   //  MAIN
  508.   //
  509.   //////////////////////////////////////////////////////////////////////
  510.   while ( arg_n <  size(WFM::Args()) )
  511.   {
  512.       if ( WFM::Args(arg_n) == .init )
  513.       {
  514.     y2milestone("Argument: %1", WFM::Args(arg_n));
  515.     return OSRPackagesInit();
  516.       }
  517.       else
  518.       {
  519.     y2error("ERROR: unknown option %1", WFM::Args(arg_n) );
  520.     return $[];
  521.       }
  522.       arg_n = arg_n + 1;
  523.   }
  524.   */
  525. }//EOF
  526.