歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> DebianLinux交互式內核編譯腳本

DebianLinux交互式內核編譯腳本

日期:2017/3/1 15:32:05   编辑:關於Linux
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