mirror of
https://github.com/fosslinux/live-bootstrap.git
synced 2026-03-02 01:18:08 +01:00
rootfs.py refactoring.
Switch to bzip2 packages Move most of the preprocessing done by rootfs.py into kaem and bash scripts inside live-bootstrap.
This commit is contained in:
parent
79c47f21ff
commit
5b032cb46c
47 changed files with 276 additions and 274 deletions
|
|
@ -9,13 +9,12 @@ This file contains a few functions to be shared by all Sys* classes
|
|||
|
||||
import os
|
||||
import hashlib
|
||||
import shutil
|
||||
import glob
|
||||
import subprocess
|
||||
|
||||
import requests
|
||||
|
||||
from lib.utils import mount, umount, get_target, copytree
|
||||
from lib.utils import mount, umount
|
||||
|
||||
class SysGeneral:
|
||||
"""
|
||||
|
|
@ -26,6 +25,7 @@ class SysGeneral:
|
|||
# All of these are variables defined in the individual Sys* classes
|
||||
preserve_tmp = None
|
||||
tmp_dir = None
|
||||
cache_dir = None
|
||||
base_dir = None
|
||||
git_dir = None
|
||||
sys_dir = None
|
||||
|
|
@ -71,16 +71,14 @@ this script the next time")
|
|||
"""
|
||||
Download a single source archive.
|
||||
"""
|
||||
cache_dir = os.path.join(self.git_dir, 'sources')
|
||||
|
||||
# Automatically determine file name based on URL.
|
||||
if file_name is None:
|
||||
file_name = os.path.basename(url)
|
||||
abs_file_name = os.path.join(cache_dir, file_name)
|
||||
abs_file_name = os.path.join(self.cache_dir, file_name)
|
||||
|
||||
# Create a cache directory for downloaded sources
|
||||
if not os.path.isdir(cache_dir):
|
||||
os.mkdir(cache_dir)
|
||||
if not os.path.isdir(self.cache_dir):
|
||||
os.mkdir(self.cache_dir)
|
||||
|
||||
# Actually download the file
|
||||
if not os.path.isfile(abs_file_name):
|
||||
|
|
@ -109,37 +107,19 @@ this script the next time")
|
|||
# Single URL
|
||||
if isinstance(url, str):
|
||||
assert output is None or isinstance(output, str)
|
||||
file_name = url if output is None else output
|
||||
urls = [url]
|
||||
outputs = [output]
|
||||
# Multiple URLs
|
||||
elif isinstance(url, list):
|
||||
assert output is None or len(output) == len(url)
|
||||
file_name = url[0] if output is None else output[0]
|
||||
urls = url
|
||||
outputs = output if output is not None else [None] * len(url)
|
||||
else:
|
||||
raise TypeError("url must be either a string or a list of strings")
|
||||
# Determine installation directory
|
||||
target_name = get_target(file_name)
|
||||
target_src_dir = os.path.join(self.base_dir, target_name, 'src')
|
||||
# Install base files
|
||||
src_tree = os.path.join(self.sys_dir, target_name)
|
||||
copytree(src_tree, self.base_dir)
|
||||
if not os.path.isdir(target_src_dir):
|
||||
os.mkdir(target_src_dir)
|
||||
for i, _ in enumerate(urls):
|
||||
# Download files into cache directory
|
||||
tarball = self.download_file(urls[i], outputs[i])
|
||||
# Install sources into target directory
|
||||
shutil.copy2(tarball, target_src_dir)
|
||||
|
||||
def deploy_sysglobal_files(self):
|
||||
"""Deploy files common to all Sys*"""
|
||||
sysglobal_files = ['helpers.sh', 'SHA256SUMS.pkgs']
|
||||
for file in sysglobal_files:
|
||||
shutil.copy2(os.path.join(self.git_dir, 'sysglobal', file),
|
||||
self.base_dir)
|
||||
self.download_file(urls[i], outputs[i])
|
||||
|
||||
def make_initramfs(self):
|
||||
"""Package binary bootstrap seeds and sources into initramfs."""
|
||||
|
|
|
|||
29
lib/utils.py
29
lib/utils.py
|
|
@ -48,19 +48,16 @@ def umount(target, **kwargs):
|
|||
|
||||
def copytree(src, dst, ignore=shutil.ignore_patterns('*.git*')):
|
||||
"""Copy directory tree into another directory"""
|
||||
file_name = os.path.basename(src)
|
||||
shutil.copytree(src, os.path.join(dst, file_name), ignore=ignore)
|
||||
|
||||
def get_target(file_name):
|
||||
"""Determine package installation directory"""
|
||||
bname = os.path.basename(file_name)
|
||||
|
||||
# Remove file extension. This is not completely trivial because
|
||||
# tar archives often come with double extensions.
|
||||
first_ext = os.path.splitext(os.path.basename(bname))
|
||||
second_ext = os.path.splitext(first_ext[0])
|
||||
if second_ext[1] == '.tar':
|
||||
bname = second_ext[0]
|
||||
else:
|
||||
bname = first_ext[0]
|
||||
return bname
|
||||
if not os.path.exists(dst):
|
||||
os.makedirs(dst)
|
||||
lst = os.listdir(src)
|
||||
if ignore:
|
||||
excl = ignore(src, lst)
|
||||
lst = [x for x in lst if x not in excl]
|
||||
for item in lst:
|
||||
source = os.path.join(src, item)
|
||||
dest = os.path.join(dst, item)
|
||||
if os.path.isdir(source):
|
||||
copytree(source, dest, ignore)
|
||||
else:
|
||||
shutil.copy2(source, dest)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue