Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Consider moving away of busybox #1484

Open
tlaurion opened this issue Aug 30, 2023 · 2 comments
Open

Consider moving away of busybox #1484

tlaurion opened this issue Aug 30, 2023 · 2 comments

Comments

@tlaurion
Copy link
Collaborator

tlaurion commented Aug 30, 2023

Some alternatives that might be a direct replacement:

  • rustybox (as name implies its in rust)
  • toybox (c more posix compliant)
  • u-root (goased but not yet tiny go compliant)

Opening this issue because lack of wget/curl in https with cert verification is a still a problem if we want to be able to outsource some of the things currently packed in the evergrowing initrd under Heads

Note: haven't compared applets provided yet, while toybox from my limited experience under Android shell seems to be good enough.

We would have to pack all features in and see what breaks and go from there.

@tlaurion
Copy link
Collaborator Author

tlaurion commented Aug 31, 2023

Here is PoC code (not functional) that I tried to create with my limited knowledge of python. Anyone that could make it functional would give us a clear view of what is there and what is missing to make a better decision for the project


user@heads-tests-deb12:~/heads$ cat compare_busybox.py 
# Import requests library to make HTTP requests
import requests

# Define the URLs of the applet lists
busybox_url = "https://busybox.net/BusyBox.html"
rustybox_url = "https://raw.githubusercontent.com/samuela/rustybox/master/applets.txt"
toybox_url = "https://landley.net/toybox/help.html"

# Get the HTML content of the applet lists
busybox_html = requests.get(busybox_url).text
rustybox_html = requests.get(rustybox_url).text
toybox_html = requests.get(toybox_url).text

# Define a function to extract the applet names from the HTML content
def extract_applets(html):
    # Initialize an empty set to store the applet names
    applets = set()
    # Split the HTML content by line breaks
    lines = html.split("\n")
    # Loop through each line
    for line in lines:
        # Check if the line starts with "<a name=" or "<li>"
        if line.startswith("<a name=") or line.startswith("<li>"):
            # Extract the applet name from the line
            applet = line.split(">")[1].split("<")[0]
            # Add the applet name to the set
            applets.add(applet)
    # Return the set of applet names
    return applets

# Extract the applet names from the HTML content
busybox_applets = extract_applets(busybox_html)
rustybox_applets = extract_applets(rustybox_html)
toybox_applets = extract_applets(toybox_html)

# Define a function to generate the markdown table from the applet sets
def generate_table(set1, set2, set3):
    # Initialize an empty list to store the table rows
    table = []
    # Add the table header row with the set names
    table.append(f"| BusyBox Applet | RustyBox Support | ToyBox Support |")
    # Add a separator row with dashes and pipes
    table.append(f"| -------------- | ---------------- | -------------- |")
    # Loop through each applet in set1 (assumed to be the largest set)
    for applet in sorted(set1):
        # Initialize an empty row with the applet name
        row = f"| {applet} "
        # Check if the applet is in set2 and add a Yes or No accordingly
        if applet in set2:
            row += f"| Yes "
        else:
            row += f"| No "
        # Check if the applet is in set3 and add a Yes or No accordingly
        if applet in set3:
            row += f"| Yes |"
        else:
            row += f"| No |"
        # Add the row to the table list
        table.append(row)
    # Join the table list by line breaks and return it as a string
    return "\n".join(table)

# Generate the markdown table from the applet sets and print it
table = generate_table(busybox_applets, rustybox_applets, toybox_applets)
print(table

@tasket, thinking of you but do not feel obligated in any way!
@JonathonHall-Purism as usual, tagging you since that could be of a really good help going forward

@tlaurion
Copy link
Collaborator Author

Keep an eye on u-root tinygo support u-root/gobusybox#121

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants
@tlaurion and others