歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

DebianLinux交互式內核編譯腳本

DebianLinux交互式內核編譯腳本   001 #!/usr/bin/env python3 002 # -*- coding: UTF-8 -*- 003 """ 004 An interactive script for building linux kernel automatically 005 """ 006 __author__ = 'M@llon' 007 __version__ = '' 008   009 import os 010 import re 011 import shutil 012 import time 013   014   015 def test(v): 016     test.result = v 017     return v 018   019   020 if __name__ == '__main__': 021     os.chdir(os.path.dirname(__file__)) 022   023     source_list = list() 024   025     for entry_name in sorted(os.listdir()): 026         if os.path.isfile(entry_name) and test(re.match('^(linux-(\d+\.\d+\.\d+))\.tar\.\w+$', entry_name)): 027             m = test.result 028             source_list.append({ 029                 'file': entry_name, 030                 'dir': m.group(1), 031                 'version': m.group(2) 032             }) 033   034     if not len(source_list): 035         print('No source archive found.') 036         exit(-1) 037   038     index_list = list(range(0, len(source_list))) 039   040     print('List of available source archives:') 041     for i in index_list: 042         print('    %d - %s' % (i, source_list[i]['file'])) 043   044     prompt = 'Choose one %s: ' % str(index_list) 045     selected_index = None 046     while True: 047         try: 048             selected_index = int(input(prompt)) 049             if selected_index in index_list: 050                 break 051         except ValueError: 052             pass 053   054     selected_source = source_list[selected_index] 055   056     extrace_package = None 057     if os.path.exists(selected_source['dir']): 058         if input('Directory "%s" already exists, remove and re-extract [y/N]? ' % selected_source['dir']).lower() == 'y': 059             print('Removing directory "%s" ...' % selected_source['dir']) 060             shutil.rmtree(selected_source['dir']) 061             extrace_package = True 062         else: 063             extrace_package = False 064     else: 065         extrace_package = True 066           067     if extrace_package: 068         print('Extracting "%s" ...' % selected_source['file']) 069         os.system('tar -axf %s' % selected_source['file']) 070   071     os.chdir(selected_source['dir']) 072   073     create_config = None 074     if os.path.exists('.config'): 075         if input('File ".config" already exists, re-create it [y/N]? ').lower() == 'y': 076             os.remove('.config') 077             create_config = True 078         else: 079             create_config = False 080     else: 081         create_config = True 082       083     if create_config: 084         print('Create configuration:') 085         print('    0 - minimal config by detecting only loaded module on current system (make localmodconfig)') 086         print('    1 - copy config from current system, usualy from "/boot/"') 087         print('    2 - default config from source distribution (make defconfig)') 088           089         create_method = None 090         while True: 091             create_method = input('Choose one [0, 1, 2]: ') 092             if create_method in ('0', '1', '2'): 093                 break 094         if create_method == '0': 095             os.system('make localmodconfig') 096         elif create_method == '1': 097             uname = os.popen('uname -r').read().split()[0] 098             shutil.copyfile('/boot/config-%s' % uname, './.config') 099         elif create_method == '2': 100             os.system('make defconfig') 101   102     print('Edit configuration:') 103     print('    0 - menuconfig (console)') 104     print('    1 - gconfig (gtk)') 105     print('    2 - xconfig (qt)') 106   107     edit_method = None 108     while True: 109         edit_method = input('Choose one [0, 1, 2]: ') 110         if edit_method in ('0', '1', '2'): 111             break 112     if edit_method == '0': 113         os.system('make menuconfig') 114     elif edit_method == '1': 115         os.system('make gconfig') 116     elif edit_method == '2': 117         os.system('make xconfig') 118   119     input('Press any key to start building, Ctrl-C to exit ...') 120   121     start_time = time.time() 122       123     os.system('make-kpkg clean') 124     os.system('fakeroot make-kpkg -j5 --initrd --revision=%s --append-to-version=-amd64 kernel_image kernel_headers' % selected_source['version']) 125   126     os.chdir('..') 127       128     end_time = time.time() 129       130     print('Time used: %.1f minutes' % ((end_time - start_time) / 60,))  
Copyright © Linux教程網 All Rights Reserved