MINI MINI MANI MO

Path : /usr/lib/python2.7/site-packages/tuned/plugins/
File Upload :
Current File : //usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyo

ó
©=[c@s¥ddlmZddlTddlZddlmZddlmZddlj	Z	ddl
Z
ddlZddlZej
jƒZdejfd„ƒYZdS(	i(tbase(t*iÿÿÿÿN(t
exceptions(tcommandstBootloaderPlugincBs[eZdZd„Zd„Zd„Zed„ƒZd„Zd„Z	d„Z
d„Zed	„Z
d
„Zd„Zd„Zd
„Zd„Zd„Zd„Zd„Zedƒd„ƒZedƒd„ƒZedƒd„ƒZeddeddƒd„ƒZeddeddƒd„ƒZeddeddƒd „ƒZd!„ZRS("sÁ
	Plugin for tuning bootloader options.

	Currently only grub2 is supported and reboot is required to apply the tunings.
	These tunings are unloaded only on profile change followed by reboot.
	cOsPtjjtjƒs'tjdƒ‚ntt|ƒj	||Žt
ƒ|_dS(Ns4Required GRUB2 template not found, disabling plugin.(tostpathtisfiletconststGRUB2_TUNED_TEMPLATE_PATHRtNotSupportedPluginExceptiontsuperRt__init__Rt_cmd(tselftargstkwargs((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyRscCsRt|_t|_t|_t|_d|_d|_d|_	|j
ƒ|_dS(Nt(tFalset_has_dynamic_tuningtTruet_has_static_tuningtupdate_grub2_cfgt_initrd_remove_dirtNonet_initrd_dst_img_valt_cmdline_valt_initrd_valt_get_grub2_cfg_filest_grub2_cfg_file_names(Rtinstance((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_instance_inits							cCsdS(N((RR((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_instance_cleanup'scCs.idd6dd6dd6dd6dd6dd6S(Ntgrub2_cfg_filetinitrd_dst_imgtinitrd_add_imgtinitrd_add_dirtinitrd_remove_dirtcmdline(R(tcls((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_get_config_options*sc	Cs©|jƒjƒ}g}xm|D]e}t|ƒjdƒrJ|j|ƒq||krg||||<qtjd||jjfƒqW|j	ƒd}xå|D]Ý}||}|dksŸ|dkrÍqŸn|d}|djƒ}|dkr|dkr|d|7}qŸ|dkrn|dkrnxQ|jƒD]2}	t
j|	ƒ}
t
jd	|
d
d|ƒ}q5WqŸ|d|7}qŸW|jƒ}|dkr¥||d<n|S(sSMerge provided options with plugin default options and merge all cmdline.* options.R&s$Unknown option '%s' for plugin '%s'.Riit+t t-s(\A|\s)s	(?=\Z|\s)N(R(tcopytstrt
startswithtappendtlogtwarnt	__class__t__name__tsortRtstriptsplittretescapetsub(Rtoptionst	effectivetcmdline_keystkeyR&tvaltoptvalstptregex((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_get_effective_options5s6
!



$
cCs@g}x3tjD](}tjj|ƒr|j|ƒqqW|S(N(RtGRUB2_CFG_FILESRRtexistsR/(Rt	cfg_filestf((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyRUs
cCs|jjtj|ƒS(N(R
tadd_modify_option_in_fileRtBOOT_CMDLINE_FILE(Rtd((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_patch_bootcmdline\scCsÁ|jstjdƒdS|jidtj6dtj6ƒxF|jD];}|jj|iddtj	6ddtj
6dtƒqEW|jdk	r½tjd|jƒ|jj|jƒndS(NsUcannot find grub.cfg to patch, you need to regenerate it by hand using grub2-mkconfigRsset\s+taddsremoving initrd image '%s'(RR0terrorRKRtBOOT_CMDLINE_TUNED_VARtBOOT_CMDLINE_INITRD_ADD_VARR
RHtGRUB2_TUNED_VARtGRUB2_TUNED_INITRD_VARRRRtinfotunlink(RRG((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_remove_grub2_tuning_s	
!9cCs$|r tjdƒ|jƒndS(Ns/removing grub2 tuning previously added by Tuned(R0RRRT(RRt
full_rollback((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_instance_unapply_staticjs
cCsñtjdƒtjdtjdd|dtjƒ}tjdtjd|dtjƒ}tjdtjdd|dtjƒ}tjdtjd|dtjƒ}tjtjdd|dtjƒ}tjtj	dd|dtjƒS(	Nsunpatching grub.cfgs
^\s*set\s+s\s*=.*
Rtflagss *\$s\ns\n+(
R0tdebugR7R9RRPt	MULTILINERQtGRUB2_TEMPLATE_HEADER_BEGINtGRUB2_TEMPLATE_HEADER_END(Rt	grub2_cfgtcfg((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_grub2_cfg_unpatchos
)%)%%cCsItjdƒdtjd}xD|D]<}|d|jj|ƒd|jj||ƒd7}q%W|tjd7}tjd||d	tj	ƒ}itj
d
6tjd6}x”|D]Œ}tjd|d
d|||d	tj	ƒ}tjd|d||dd|d	tj	ƒ}tjd|dd|d	tj	ƒ}qµW|S(Nsinitial patching of grub.cfgs\1\n\ns
sset s="s"
s\ns+^(\s*###\s+END\s+[^#]+/00_header\s+### *)\nRWtlinuxtinitrds^(\s*s(16|efi)?\s+.*)$s\1 $s(?:16|efi)?\s+\S+rescue.*)\$s *(.*)$s\1\2s(?:16|efi)?\s+\S+rescue.*) +$s\1(R0RXRRZR
R8R[R7R9RYRPRQ(RR\RJtstopttd2ti((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_grub2_cfg_patch_initialxs

:
.2*cCs,|jjtjƒ}t|ƒdkr?tjdtjƒtSitjd6tj	d6}t}x“|D]‹}t
jd|d||d|dt
jƒdkrft}|d	d
krÄ|d
7}n||d|d|d
||d7}qfqfW|r(tjdtjƒ|jjtj|ƒntS(Niserror reading '%s'tGRUB_CMDLINE_LINUX_DEFAULTtGRUB_INITRD_OVERLAYs^[^#]*\bs
\s*=.*\\\$s\b.*$RWiÿÿÿÿs
s="${s:+$s }\$s"
s
patching '%s'(R
t	read_fileRtGRUB2_DEFAULT_ENV_FILEtlenR0RMRRPRQR7tsearchRYRRRXt
write_to_file(Rtgrub2_default_envRJtwriteRd((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_grub2_default_env_patchŠs 
5
1cCs²tjdƒ|js'tjdƒtSxz|jD]o}|jj|ƒ}t|ƒdkrptjd|ƒtStjd|ƒ|}t}x€|D]x}tj	d|dd
||d	|d
tj
ƒ\}}|dkstjd||d
tj
ƒdkr”t
}q”q”Wttjdtj|d
tj
ƒƒttjdtj|d
tj
ƒƒkrit
}n|r|j|j|ƒ|ƒ}n|jj||ƒq1W|jƒt
S(Nspatching grub.cfgsRcannot find grub.cfg to patch, you need to regenerate it by hand by grub2-mkconfigisFerror patching %s, you need to regenerate it by hand by grub2-mkconfigs+adding boot command line parameters to '%s's	\b(set\s+s\s*=).*$s\1s"RWis\$s\1"(R0RXRRMRR
RhRjR7tsubnRYRkRRtfindallRRPRQReR^RlRo(RRJRGR\t
grub2_cfg_newt
patch_initialRbtnsubs((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_grub2_cfg_patchs0
	

81
%+	
cCsR|ji|jtj6|jtj6ƒ|ji|jtj6|jtj6ƒdS(N(	RuRRRPRRQRKRNRO(R((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt
_grub2_updateºs'cCs=|jdkr9tjjtjtjj|ƒƒ|_ndS(N(RRRRtjoinRtBOOT_DIRtbasename(Rtname((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_init_initrd_dst_img¾scCstjjtjƒS(N(RRtisdirRtPETITBOOT_DETECT_DIR(R((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_check_petitbootÂscCsé|jƒrtjdƒntjd|jƒtjj|jƒ}|jj	||jƒsat
St|_|jj
dƒjƒ}d}t|ƒ}|rÍtjdd|ƒ}t|ƒ|krÍ|}qÍntjj||ƒ|_tS(NskDetected Petitboot which doesn't support initrd overlays. The initrd overlay will be ignored by bootloader.sinstalling initrd image as '%s's
/proc/cmdlinet/s^\s*BOOT_IMAGE=\s*(\S*/).*$s\1(R~R0R1RRRRRRyR
R,RRRRhtrstripRjR7R9RwR(Rtimgtimg_nametcurr_cmdlinetinitrd_grubpathtlcR((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_install_initrdÅs 	R!cCs5|r
dS|r1|dk	r1t|ƒg|_ndS(N(RR-R(Rtenablingtvaluetverifytignore_missing((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_grub2_cfg_file×sR"cCsy|r
dS|ru|dk	rut|ƒ|_|jdkr>tS|jddkrutjjtj|jƒ|_qundS(NRiR(	RR-RRRRRwRRx(RR‡RˆR‰RŠ((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_initrd_dst_imgßsR%cCs>|r
dS|r:|dk	r:|jj|ƒdk|_ndS(Nt1(RR
tget_boolR(RR‡RˆR‰RŠ((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyRësR#t
per_devicetpriorityi
cCs_|r
dS|r[|dk	r[t|ƒ}|j|ƒ|dkrEtS|j|ƒs[tSndS(NR(RR-R{RR†(RR‡RˆR‰RŠtsrc_img((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_initrd_add_imgós
R$c
Csv|r
dS|rr|dk	rrt|ƒ}|j|ƒ|dkrEtStjj|ƒsltjd|ƒtStj	d|ƒt
jddddƒ\}}tjd|ƒtj
|ƒ|jjd	|d
|dtƒ\}}	tjd|	ƒ|d
kr%tjdƒ|jj|dtƒtS|j|ƒ|jj|ƒ|jrrtj	d|ƒ|jj|ƒqrndS(NRsFerror: cannot create initrd image, source directory '%s' doesn't exists+generating initrd image from directory '%s'tprefixstuned-bootloader-tsuffixs.tmps+writing initrd image to temporary file '%s'sfind . | cpio -co > %stcwdtshellscpio log: %siserror generating initrd imagetno_errorsremoving directory '%s'(RR-R{RRRR|R0RMRRttempfiletmkstempRXtcloseR
texecuteRRSR†Rtrmtree(
RR‡RˆR‰RŠtsrc_dirtfdttmpfiletrctout((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_initrd_add_dirs2

(

	R&c
Cs|jj|jj|ƒƒ}|rß|jjdƒ}t|ƒdkrLdSt|jƒƒ}t|jƒƒ}|j	|ƒ}	|	|kr¯t
jtj
dt|ƒfƒtSt
jtjdt|	ƒt|ƒfƒtSn|r|dk	rt
jdƒt|_||_ndS(Ns
/proc/cmdlineiR&s;installing additional boot command line parameters to grub2(t
_variablestexpandR
tunquoteRhRjRtsetR6tintersectionR0RRRtSTR_VERIFY_PROFILE_VALUE_OKR-RRMtSTR_VERIFY_PROFILE_VALUE_FAILRRR(
RR‡RˆR‰RŠtvR&tcmdline_sett	value_settcmdline_intersect((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_cmdlines" )
	cCs)|r%|jr%|jƒt|_ndS(N(RRvR(RRR‡((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt_instance_post_static3s
(R3t
__module__t__doc__RRR tclassmethodR(RCRRKRTRRVR^ReRoRuRvR{R~R†tcommand_customR‹RŒRR’R¢R®R¯(((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyRs2				 												!
!!(RRt
decoratorst
tuned.logsttunedRttuned.utils.commandsRttuned.constsRRR7R˜tlogstgetR0tPluginR(((sC/usr/lib/python2.7/site-packages/tuned/plugins/plugin_bootloader.pyt<module>s


OHA YOOOO