createramdisk.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #!/usr/bin/python3
  2. """
  3. Generates, from this source repository, a "tarramdisk" - a ustar archive
  4. suitable for booting ToaruOS.
  5. """
  6. import os
  7. import tarfile
  8. users = {
  9. 'root': 0,
  10. 'local': 1000,
  11. 'guest': 1001,
  12. }
  13. restricted_files = {
  14. 'etc/master.passwd': 0o600,
  15. 'etc/sudoers': 0o600,
  16. 'tmp': 0o777,
  17. 'var': 0o755,
  18. 'bin/sudo': 0o4555,
  19. 'bin/gsudo': 0o4555,
  20. }
  21. def file_filter(tarinfo):
  22. # Root owns files by default.
  23. tarinfo.uid = 0
  24. tarinfo.gid = 0
  25. if tarinfo.name.startswith('home/'):
  26. # Home directory contents are owned by their users.
  27. user = tarinfo.name.split('/')[1]
  28. tarinfo.uid = users.get(user,0)
  29. tarinfo.gid = tarinfo.uid
  30. elif tarinfo.name in restricted_files:
  31. tarinfo.mode = restricted_files[tarinfo.name]
  32. if tarinfo.name.startswith('usr/include/kuroko') and tarinfo.type == tarfile.SYMTYPE:
  33. return None
  34. if tarinfo.name.startswith('src'):
  35. # Let local own the files here
  36. tarinfo.uid = users.get('local')
  37. tarinfo.gid = tarinfo.uid
  38. # Skip object files
  39. if tarinfo.name.endswith('.so') or tarinfo.name.endswith('.o'):
  40. return None
  41. return tarinfo
  42. with tarfile.open('ramdisk.igz','w:gz') as ramdisk:
  43. ramdisk.add('base',arcname='/',filter=file_filter)
  44. ramdisk.add('.',arcname='/src',filter=file_filter,recursive=False) # Add a src directory
  45. ramdisk.add('apps',arcname='/src/apps',filter=file_filter)
  46. ramdisk.add('kernel',arcname='/src/kernel',filter=file_filter)
  47. ramdisk.add('linker',arcname='/src/linker',filter=file_filter)
  48. ramdisk.add('lib',arcname='/src/lib',filter=file_filter)
  49. ramdisk.add('libc',arcname='/src/libc',filter=file_filter)
  50. #ramdisk.add('boot',arcname='/src/boot',filter=file_filter)
  51. #ramdisk.add('modules',arcname='/src/modules',filter=file_filter)
  52. if os.path.exists('tags'):
  53. ramdisk.add('tags',arcname='/src/tags',filter=file_filter)
  54. ramdisk.add('util/auto-dep.krk',arcname='/usr/bin/auto-dep.krk',filter=file_filter)
  55. ramdisk.add('kuroko/src/kuroko',arcname='/usr/include/kuroko',filter=file_filter)