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 / modules / SystemSettings.ycp < prev    next >
Text File  |  2006-11-29  |  5KB  |  183 lines

  1. /**
  2.  *
  3.  * Module:    Set Kernel and System Settings
  4.  *
  5.  * Author:    Lukas Ocilka <locilka@suse.cz>
  6.  *
  7.  * $Id: SystemSettings.ycp 33530 2006-10-20 11:08:26Z lslezak $
  8.  *
  9.  * This module manages the System and Kernel settings such as I/O Scheduler type,
  10.  * Serial Console, SysRq Keys...
  11.  */
  12.  
  13. {
  14.     module "SystemSettings";
  15.     textdomain "tune";
  16.  
  17.     import "Service";
  18.     import "Mode";
  19.  
  20.     /* Internal Data */
  21.     boolean ENABLE_SYSRQ = nil;
  22.  
  23.     string elevator = nil;
  24.     /* Internal Data */
  25.  
  26.     global list<string> GetPossibleElevatorValues () {
  27.         // here are listed all known values of the 'elevator' variable
  28.         return ["cfq","as","noop","deadline"];
  29.     }
  30.  
  31.     global define boolean Read () {
  32.     ENABLE_SYSRQ = ((string) SCR::Read(.sysconfig.sysctl.ENABLE_SYSRQ) == "yes");
  33.     y2milestone("SysRq enabled: %1", ENABLE_SYSRQ);
  34.  
  35.     boolean current_sysrq = (string)SCR::Read(.target.string, "/proc/sys/kernel/sysrq") == "1\n";
  36.  
  37.     if (current_sysrq != ENABLE_SYSRQ)
  38.     {
  39.         y2warning("SysRq mismatch: sysconfig value: %1, current: %2", ENABLE_SYSRQ, current_sysrq);
  40.     }
  41.  
  42.         /*
  43.      * I have to admit that this is very ugly but it is here
  44.      * to avoid of the very long starting time of the yast module
  45.      * because the Storage module (which is imported by the Bootloader (imported by the SystemSettings module))
  46.      * has a Read() function call in its constructor.
  47.      */
  48.     import "Bootloader";
  49.  
  50.     if (Mode::normal())
  51.     {
  52.         // runtime - read the settings
  53.         Bootloader::Read();
  54.     }
  55.  
  56.     // get 'elevator' option from the default section
  57.     any elevator_parameter = Bootloader::getKernelParam(Bootloader::getDefaultSection(), "elevator");
  58.  
  59.     y2milestone("elevator_parameter: %1", elevator_parameter);
  60.  
  61.     // Variable is not set
  62.     if (elevator_parameter == false || elevator_parameter == "false") {
  63.         elevator = "";
  64.     // Variable is set but has not parameter
  65.     } else if (elevator_parameter == true || elevator_parameter == "true") {
  66.         y2warning("'elevator' variable has to have some value");
  67.         elevator = "";
  68.     // Variable is set but hasn't any known value
  69.     } else if (!contains(GetPossibleElevatorValues(), (string) elevator_parameter)) {
  70.         y2warning("'elevator' variable has to have a value from %1 instead of being set to %2", GetPossibleElevatorValues(), elevator_parameter);
  71.         elevator = "";
  72.     // Variable is OK
  73.     } else {
  74.         elevator = (string) elevator_parameter;
  75.     }
  76.  
  77.     y2milestone("Global IO scheduler: %1", elevator);
  78.  
  79.     // FIXME: probe available serial line devices
  80.  
  81.     return true;
  82.     }
  83.  
  84.     global boolean Activate()
  85.     {
  86.     // activate the SysRq setting
  87.     string proc_value = (ENABLE_SYSRQ) ? "1" : "0";
  88.     y2milestone("Activating SysRq config: %1", proc_value);
  89.  
  90.     SCR::Execute(.target.bash, sformat("echo '%1' > /proc/sys/kernel/sysrq", proc_value));
  91.  
  92.     if (elevator != nil)
  93.     {
  94.         import "Bootloader";
  95. //        FIXME: setting nil value doesn't remove the option
  96. //        string new_elevator = (elevator == "") ? nil : elevator;
  97.  
  98.         y2internal("Activating scheduler: %1", /*FIXME: new_*/elevator);
  99.         // set the scheduler
  100.         Bootloader::setKernelParam(Bootloader::getDefaultSection(), "elevator", /*FIXME: new_*/elevator);
  101.  
  102.         // TODO FIXME: set the scheduler for all disk devices,
  103.         // reboot is required to activate the new scheduler now
  104.     }
  105.  
  106.     return true;
  107.     }
  108.  
  109.  
  110.     global define boolean Write () {
  111.     // writing SysRq settings
  112.     y2milestone("ENABLE_SYSRQ: %1", ENABLE_SYSRQ);
  113.     SCR::Write(.sysconfig.sysctl.ENABLE_SYSRQ, (ENABLE_SYSRQ ? "yes":"no"));
  114.     SCR::Write(.sysconfig.sysctl, nil);
  115.  
  116.     // enable boot.proc service which sets the value after boot
  117.     Service::Enable("boot.proc");
  118.  
  119.     // the bootloader configuration is written at the end of the first stage
  120.     if (Mode::normal())
  121.     {
  122.         // write the elevator setting
  123.         import "Bootloader";
  124.         Bootloader::Write();
  125.     }
  126.  
  127.     // FIXME: write serial console...
  128.     return true;
  129.     }
  130.  
  131.     // Kernel param 'elevator'
  132.     global define string GetIOScheduler () {
  133.     return elevator;
  134.     }
  135.  
  136.     global define void SetIOScheduler (string io_scheduler) {
  137.     // empty string = use the default scheduler
  138.     if (contains(GetPossibleElevatorValues(), io_scheduler) || io_scheduler == "")
  139.     {
  140.         elevator = io_scheduler;
  141.     }
  142.     else
  143.     {
  144.         y2error("unknown IO scheduler '%1', use: %2", io_scheduler, GetPossibleElevatorValues());
  145.     }
  146.     }
  147.  
  148.     global define boolean GetSysRqKeysEnabled () {
  149.     if (ENABLE_SYSRQ == true || ENABLE_SYSRQ == false)
  150.         return ENABLE_SYSRQ;
  151.     else
  152.         return false;
  153.     }
  154.  
  155.     global define void SetSysRqKeysEnabled (boolean enable_sysrq) {
  156.     if (enable_sysrq != true && enable_sysrq != false)
  157.         y2warning("enable_sysrq should be 'true' or 'false'");
  158.     ENABLE_SYSRQ = enable_sysrq;
  159.     y2milestone("SysRq was set to %1", ENABLE_SYSRQ);
  160.     }
  161.  
  162.     /**
  163.      * Default settings for serial console
  164.      */
  165.     map <string, any> default_sc_settings = $[
  166.     "enabled" : false,
  167.     "baud_rate" : 9600,
  168.     "serial_device" : "/dev/ttyS0",
  169.     ];
  170.  
  171.     global define map <string, any> GetSerialConsoleSettings () {
  172.     return $[
  173.         "enabled" : true,
  174.         "baud_rate" : 9600,
  175.         "serial_device" : "/dev/ttyS0",
  176.     ];
  177.     }
  178.  
  179.     global define void SetSerialDeviceConsoleSettings (map <string, any> settings) {
  180.     return nil;
  181.     }
  182. }
  183.