Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

とある帽子の大蛇料理Ⅱ

1,060 views

Published on

第6回カーネル/VM探検隊のLT

Published in: Technology
  • Be the first to comment

とある帽子の大蛇料理Ⅱ

  1. 1. Twitter : @masami256Mail : masami@fedoraproject.org
  2. 2. Anaconda Overview● Stage1,2 の 2 段階でインストーラが起動● Stage1 ● ブートオプション処理 ● メディアチェック ● ネットワーク設定(必要なら) ● Stage2 の実行● Stage2 ● 言語、キーボード、パーティション設定などの 実際のインストール処理
  3. 3. これが出ると Stage1 完了
  4. 4. Anaconda ProgrammingC(Stage1) と Python(Stage2) GUI は PyGtk
  5. 5. Anaconda UI● インストーラの機能( GUI を使う場合)は以 下のファイルにクラスを登録● dispatch.py● gui.py● installclass.py
  6. 6. dispatch.py● インストール手順に関するファイル ● 各機能が動く順番を設定 ● 次のステップに進む / 前のステップに戻るなど の処理を実施 installSteps = [ ("kernelvm_top", ), ("installTinyCoreNag", installTinyCoreNagScreen, ), キー名 関数名
  7. 7. gui.py● GUI に関する基本的な処理を実施● 変数 stepToClass にキー名とファイル名、クラ ス名を設定 stepToClass = { "kernelvm_top" : ("kernelvm_top_gui",   "KernelvmTopWindow"),
  8. 8. installcalss.py●● dispatch クラスに dispath.py で登録したキー名を登録 dispatch.setStepList( "kernelvm_top", "installTinyCoreNag",
  9. 9. Anaconda UI and Logic● UI 周りの処理と、実際の処理はファイルが分 かれてます ● pyanaconda/language.py – 言語回りでの処理を実施 ● pyanaconda/iw/language_gui.py – Langauge の画面に関する処理● GUI のコード ● PyGtk の場合は pyanaconda/iw ● テキストの場合は pyanaconda/textw
  10. 10. iw/kernelvm_top_gui.pyclass KernelvmTopWindow (InstallWindow): windowTitle = "Kernel/VM" #N_("KernelVM") def __init__ (self, ics): InstallWindow.__init__ (self, ics) ics.setGrabNext (1) self.anaconda = None def getScreen (self, anaconda): self.anaconda = anaconda box = gtk.VBox (False, 10) pix = gui.readImageFromFile ("kernelvm.png") if pix: a = gtk.Alignment () a.add (pix) a.set (0.5, 0.5, 1.0, 1.0) a.set_size_request(200, -1) box.pack_start (a, False) box.pack_start(self.createHbox()) return box
  11. 11. kerenelvm_top.pyclass kernelvm_top (object): def __init__ (self, display_mode = g): pass def write(self, instPath): pass def writeKS(self, f): pass
  12. 12. Anaonda Testing● iso イメージ作るのは大変です><● 既存の iso イメージ弄るのも面倒● そこで updates.img の出番です!
  13. 13. updates.img● make updates するだけ ● updates.img というファイルができます ● 差分のあるファイルのみを抽出して cpio でまと めて gzip したファイルです ● .spec ファイルのリリースバージョン、 git の tag から差分を見ているようです● ブート時にオプションを渡します ● updates=http://10.0.2.2/updates.img
  14. 14. Anaconda 弄りは割と手軽にできますね ^q^
  15. 15. ってことで作りました
  16. 16. Linux の代わりに自作カーネルのインストール
  17. 17. 誰得?
  18. 18. 変更箇所● yuminstall.py ● rpm ファイルのインストール部分● bootloader.py ● Grub 周りの処理●
  19. 19. packages.pydef doInstallTinyCore(self, anaconda): gzipImage = "/tmp/updates/tinycore.gz" f = gzip.open(gzipImage, rb) data = f.read() cpioFile = "/tmp/tinycore.cpio" w = open(cpioFile,wb) w.write(data) w.close() f.close() cmd = "cd %(rootPath)s && cpio -id < %(cpiofile)s" %{rootPath : anaconda.rootPath, cpiofile : cpioFile} os.system(cmd)
  20. 20. bootloader.pydef installGrubForTinyCore(anaconda): Grub の rpm を /mnt/sysimage にインストール   grub-install –root-directroy=/mnt/sysimage /dev/sda   grub –batch --device-map=/dev/null << EOFndevice(hd0)t%(sda)s1nroot (hd0)nsetup (hd0)nquitnEOF カーネルを /mnt/sysimage/boot にコピー
  21. 21. bootloader.pydef writeBootloader(anaconda):# for (version, arch, nick) in #anaconda.backend.kernelVersionList(anaconda.rootPath):# if plainLabelUsed:# kernelList.append(("%s-%s" %(kernelLabel, nick),# "%s-%s" %(kernelLongLabel, nick),# version))# else:# kernelList.append((kernelLabel, kernelLongLabel,version))# if nick != "base":# defkern = "kernel-%s" %(nick,)# plainLabelUsed = 1 kernelList.append((miko, miko, 0))
  22. 22. カーネル自作したらAnaconda でインストーラを作り 配布しましょう\ (^o^) /
  23. 23. URL● Fedora Anaconda repogitory ● git://git.fedorahosted.org/git/anaconda.git● Anaconda for Ore ore kernel ● https://github.com/masami256/Anaconda-for- ore-ore-kernel

×