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

Error Using Easy Install Sript #27

Open
Olawale1 opened this issue Mar 20, 2021 · 13 comments
Open

Error Using Easy Install Sript #27

Olawale1 opened this issue Mar 20, 2021 · 13 comments

Comments

@Olawale1
Copy link

Hi ,

I started encountering the error below again while trying to use the Easy Install script

Traceback (most recent call last):
  File "install.py", line 498, in <module>
    install_bench(args)
  File "install.py", line 279, in install_bench
    run_playbook('site.yml', sudo=True, extra_vars=extra_vars)
  File "install.py", line 414, in run_playbook
    success = subprocess.check_call(args, cwd=playbooks_folder, stdout=log_stream, stderr=sys.stderr)
  File "/usr/lib/python3.6/subprocess.py", line 311, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['ansible-playbook', '-c', 'local', 'site.yml', '-vvvv', '-e', '@/tmp/extra_vars.json', '--become', '--become-user=frappe']' returned non-zero exit status 2.

This was fixed with a PR a while ago but seems to be back now! Pls help fix urgently

OS: Ubuntu 18.04

Thanks

@Olawale1
Copy link
Author

@Olawale1
Copy link
Author

Going through the logs, it seems the installation fails at the point below:

TASK [mariadb : include_tasks] *************************************************
task path: /tmp/.bench/bench/playbooks/roles/mariadb/tasks/main.yml:69
fatal: [localhost]: FAILED! => {
    "reason": "no action detected in task. This often indicates a misspelled module name, or incorrect module path.\n\nThe error appears to be in '/tmp/.bench/bench/playbooks/roles/mariadb/tasks/mysql_secure_installation.yml': line 14, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Set root Password\n  ^ here\n"
}

@ankush ankush transferred this issue from frappe/erpnext Apr 1, 2021
@Natetronn
Copy link

I get a similar error on 20.lts

$ python3 install.py --production                                       
Logs are saved under /tmp/logs/easy-install__2021-04-02__03-31.log
curl already installed!
wget already installed!
git already installed!
pip3 already installed!
/usr/lib/python3/dist-packages/secretstorage/dhcrypto.py:15: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead
  from cryptography.utils import int_from_bytes
/usr/lib/python3/dist-packages/secretstorage/util.py:19: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead
  from cryptography.utils import int_from_bytes
/usr/lib/python3/dist-packages/secretstorage/dhcrypto.py:15: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead
  from cryptography.utils import int_from_bytes
/usr/lib/python3/dist-packages/secretstorage/util.py:19: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead
  from cryptography.utils import int_from_bytes
pip3 already installed!
Checking System Compatibility...
ubuntu 20 is compatible!
Cloning bench repository branch develop into /tmp/.bench
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
Input MySQL and Frappe Administrator passwords:
Please enter mysql root password: 
Re-enter mysql root password: 
Please enter the default Administrator user password: 
Re-enter Administrator password: 
Passwords saved at ~/passwords.txt
Initializing bench frappe-bench:


[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
[WARNING]: Consider using the get_url or uri module rather than running 'curl'.  If you need to use command because get_url or uri is insufficient
you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.
[DEPRECATION WARNING]: evaluating [] as a bare variable, this behaviour will go away and you might need to add |bool to the expression in the future.
 Also see CONDITIONAL_BARE_VARS configuration toggle.. This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting 
deprecation_warnings=False in ansible.cfg.
[WARNING]: Consider using the file module with owner rather than running 'chown'.  If you need to use command because file is insufficient you can
add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.
[WARNING]: Module remote_tmp /home/frappe/.ansible/tmp did not exist and was created with a mode of 0700, this may cause issues when running as
another user. To avoid this, create the remote_tmp dir with the correct permissions manually
Traceback (most recent call last):
  File "install.py", line 498, in <module>
    install_bench(args)
  File "install.py", line 279, in install_bench
    run_playbook('site.yml', sudo=True, extra_vars=extra_vars)
  File "install.py", line 414, in run_playbook
    success = subprocess.check_call(args, cwd=playbooks_folder, stdout=log_stream, stderr=sys.stderr)
  File "/usr/lib/python3.8/subprocess.py", line 364, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['ansible-playbook', '-c', 'local', 'site.yml', '-vvvv', '-e', '@/tmp/extra_vars.json', '--become', '--become-user=frappe']' returned non-zero exit status 2.

@Natetronn
Copy link

My logs seem slightly different:

TASK [bench : Create a new site] *********************************************************************************************************************
task path: /tmp/.bench/bench/playbooks/roles/bench/tasks/setup_erpnext.yml:18
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: root
<127.0.0.1> EXEC /bin/sh -c 'echo ~root && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /var/tmp `"&& mkdir /var/tmp/ansible-tmp-1617335739.318674-58551-255545686283695 && echo ansible-tmp-1617335739.318674-58551-255545686283695="` echo /var/tmp/ansible-tmp-1617335739.318674-58551-255545686283695 `" ) && sleep 0'
Using module file /usr/local/lib/python3.8/dist-packages/ansible/modules/commands/command.py
<127.0.0.1> PUT /root/.ansible/tmp/ansible-local-416854o7kgoxw/tmp9_jlpksg TO /var/tmp/ansible-tmp-1617335739.318674-58551-255545686283695/AnsiballZ_command.py
<127.0.0.1> EXEC /bin/sh -c 'setfacl -m u:frappe:r-x /var/tmp/ansible-tmp-1617335739.318674-58551-255545686283695/ /var/tmp/ansible-tmp-1617335739.318674-58551-255545686283695/AnsiballZ_command.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'chmod u+x /var/tmp/ansible-tmp-1617335739.318674-58551-255545686283695/ /var/tmp/ansible-tmp-1617335739.318674-58551-255545686283695/AnsiballZ_command.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'chown frappe /var/tmp/ansible-tmp-1617335739.318674-58551-255545686283695/ /var/tmp/ansible-tmp-1617335739.318674-58551-255545686283695/AnsiballZ_command.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'sudo -H -S -n  -u frappe /bin/sh -c '"'"'echo BECOME-SUCCESS-atpnwkjkmkoigdjtwrcsegvrmzbslywk ; /usr/bin/python3 /var/tmp/ansible-tmp-1617335739.318674-58551-255545686283695/AnsiballZ_command.py'"'"' && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'rm -f -r /var/tmp/ansible-tmp-1617335739.318674-58551-255545686283695/ > /dev/null 2>&1 && sleep 0'
fatal: [localhost]: FAILED! => {
    "changed": true,
    "cmd": [
        "bench",
        "new-site",
        "site1.local",
        "--admin-password",
        "1231231231244444",
        "--mariadb-root-password",
        "123123123123324333"
    ],
    "delta": "0:00:01.125505",
    "end": "2021-04-02 03:55:40.727060",
    "invocation": {
        "module_args": {
            "_raw_params": "bench new-site site1.local --admin-password '123123123123' --mariadb-root-password '123123123123'",
            "_uses_shell": false,
            "argv": null,
            "chdir": "/home/frappe/frappe-bench",
            "creates": null,
            "executable": null,
            "removes": null,
            "stdin": null,
            "stdin_add_newline": true,
            "strip_empty_ends": true,
            "warn": true
        }
    },
    "msg": "non-zero return code",
    "rc": 1,
    "start": "2021-04-02 03:55:39.601555",
    "stderr": "Traceback (most recent call last):\n  File \"/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py\", line 68, in get_app_commands\n    app_command_module = importlib.import_module(app + '.commands')\n  File \"/usr/lib/python3.8/importlib/__init__.py\", line 127, in import_module\n    return _bootstrap._gcd_import(name[level:], package, level)\n  File \"<frozen importlib._bootstrap>\", line 1014, in _gcd_import\n  File \"<frozen importlib._bootstrap>\", line 991, in _find_and_load\n  File \"<frozen importlib._bootstrap>\", line 961, in _find_and_load_unlocked\n  File \"<frozen importlib._bootstrap>\", line 219, in _call_with_frames_removed\n  File \"<frozen importlib._bootstrap>\", line 1014, in _gcd_import\n  File \"<frozen importlib._bootstrap>\", line 991, in _find_and_load\n  File \"<frozen importlib._bootstrap>\", line 973, in _find_and_load_unlocked\nModuleNotFoundError: No module named 'erpnext'\nTraceback (most recent call last):\n  File \"/usr/lib/python3.8/runpy.py\", line 194, in _run_module_as_main\n    return _run_code(code, main_globals, None,\n  File \"/usr/lib/python3.8/runpy.py\", line 87, in _run_code\n    exec(code, run_globals)\n  File \"/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py\", line 99, in <module>\n    main()\n  File \"/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py\", line 18, in main\n    click.Group(commands=commands)(prog_name='bench')\n  File \"/home/frappe/frappe-bench/env/lib/python3.8/site-packages/click/core.py\", line 764, in __call__\n    return self.main(*args, **kwargs)\n  File \"/home/frappe/frappe-bench/env/lib/python3.8/site-packages/click/core.py\", line 717, in main\n    rv = self.invoke(ctx)\n  File \"/home/frappe/frappe-bench/env/lib/python3.8/site-packages/click/core.py\", line 1137, in invoke\n    return _process_result(sub_ctx.command.invoke(sub_ctx))\n  File \"/home/frappe/frappe-bench/env/lib/python3.8/site-packages/click/core.py\", line 1137, in invoke\n    return _process_result(sub_ctx.command.invoke(sub_ctx))\n  File \"/home/frappe/frappe-bench/env/lib/python3.8/site-packages/click/core.py\", line 956, in invoke\n    return ctx.invoke(self.callback, **ctx.params)\n  File \"/home/frappe/frappe-bench/env/lib/python3.8/site-packages/click/core.py\", line 555, in invoke\n    return callback(*args, **kwargs)\n  File \"/home/frappe/frappe-bench/apps/frappe/frappe/commands/site.py\", line 41, in new_site\n    frappe.init(site=site, new_site=True)\n  File \"/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py\", line 175, in init\n    setup_module_map()\n  File \"/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py\", line 1018, in setup_module_map\n    for module in get_module_list(app):\n  File \"/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py\", line 881, in get_module_list\n    return get_file_items(os.path.join(os.path.dirname(get_module(app_name).__file__), \"modules.txt\"))\n  File \"/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py\", line 839, in get_module\n    return importlib.import_module(modulename)\n  File \"/usr/lib/python3.8/importlib/__init__.py\", line 127, in import_module\n    return _bootstrap._gcd_import(name[level:], package, level)\n  File \"<frozen importlib._bootstrap>\", line 1014, in _gcd_import\n  File \"<frozen importlib._bootstrap>\", line 991, in _find_and_load\n  File \"<frozen importlib._bootstrap>\", line 973, in _find_and_load_unlocked\nModuleNotFoundError: No module named 'erpnext'",
    "stderr_lines": [
        "Traceback (most recent call last):",
        "  File \"/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py\", line 68, in get_app_commands",
        "    app_command_module = importlib.import_module(app + '.commands')",
        "  File \"/usr/lib/python3.8/importlib/__init__.py\", line 127, in import_module",
        "    return _bootstrap._gcd_import(name[level:], package, level)",
        "  File \"<frozen importlib._bootstrap>\", line 1014, in _gcd_import",
        "  File \"<frozen importlib._bootstrap>\", line 991, in _find_and_load",
        "  File \"<frozen importlib._bootstrap>\", line 961, in _find_and_load_unlocked",
        "  File \"<frozen importlib._bootstrap>\", line 219, in _call_with_frames_removed",
        "  File \"<frozen importlib._bootstrap>\", line 1014, in _gcd_import",
        "  File \"<frozen importlib._bootstrap>\", line 991, in _find_and_load",
        "  File \"<frozen importlib._bootstrap>\", line 973, in _find_and_load_unlocked",
        "ModuleNotFoundError: No module named 'erpnext'",
        "Traceback (most recent call last):",
        "  File \"/usr/lib/python3.8/runpy.py\", line 194, in _run_module_as_main",
        "    return _run_code(code, main_globals, None,",
        "  File \"/usr/lib/python3.8/runpy.py\", line 87, in _run_code",
        "    exec(code, run_globals)",
        "  File \"/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py\", line 99, in <module>",
        "    main()",
        "  File \"/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py\", line 18, in main",
        "    click.Group(commands=commands)(prog_name='bench')",
        "  File \"/home/frappe/frappe-bench/env/lib/python3.8/site-packages/click/core.py\", line 764, in __call__",
        "    return self.main(*args, **kwargs)",
        "  File \"/home/frappe/frappe-bench/env/lib/python3.8/site-packages/click/core.py\", line 717, in main",
        "    rv = self.invoke(ctx)",
        "  File \"/home/frappe/frappe-bench/env/lib/python3.8/site-packages/click/core.py\", line 1137, in invoke",
        "    return _process_result(sub_ctx.command.invoke(sub_ctx))",
        "  File \"/home/frappe/frappe-bench/env/lib/python3.8/site-packages/click/core.py\", line 1137, in invoke",
        "    return _process_result(sub_ctx.command.invoke(sub_ctx))",
        "  File \"/home/frappe/frappe-bench/env/lib/python3.8/site-packages/click/core.py\", line 956, in invoke",
        "    return ctx.invoke(self.callback, **ctx.params)",
        "  File \"/home/frappe/frappe-bench/env/lib/python3.8/site-packages/click/core.py\", line 555, in invoke",
        "    return callback(*args, **kwargs)",
        "  File \"/home/frappe/frappe-bench/apps/frappe/frappe/commands/site.py\", line 41, in new_site",
        "    frappe.init(site=site, new_site=True)",
        "  File \"/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py\", line 175, in init",
        "    setup_module_map()",
        "  File \"/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py\", line 1018, in setup_module_map",
        "    for module in get_module_list(app):",
        "  File \"/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py\", line 881, in get_module_list",
        "    return get_file_items(os.path.join(os.path.dirname(get_module(app_name).__file__), \"modules.txt\"))",
        "  File \"/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py\", line 839, in get_module",
        "    return importlib.import_module(modulename)",
        "  File \"/usr/lib/python3.8/importlib/__init__.py\", line 127, in import_module",
        "    return _bootstrap._gcd_import(name[level:], package, level)",
        "  File \"<frozen importlib._bootstrap>\", line 1014, in _gcd_import",
        "  File \"<frozen importlib._bootstrap>\", line 991, in _find_and_load",
        "  File \"<frozen importlib._bootstrap>\", line 973, in _find_and_load_unlocked",
        "ModuleNotFoundError: No module named 'erpnext'"
    ],
    "stdout": "",
    "stdout_lines": []
}

@Natetronn
Copy link

@Olawale1 probably unlikely but, is it possible you're using an older version of the install.py?

Looks like I'm getting passed that ansible command in my log:

TASK [mariadb : include_tasks] ***********************************************************************************************************************
task path: /tmp/.bench/bench/playbooks/roles/mariadb/tasks/main.yml:69
included: /tmp/.bench/bench/playbooks/roles/mariadb/tasks/mysql_secure_installation.yml for localhost

@Natetronn
Copy link

Natetronn commented Apr 2, 2021

Update: this should probably be disregarded.

In /home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.pyit looks like there is a typo or two (backslash before the or statement (?) and possibly needs an extra '..' and the app + "commands" has the extra period there.)

https://github.com/frappe/frappe/blob/9a90d251fe3dfc958d819a9487885346bba084b5/frappe/utils/bench_helper.py#L67-L70

	if os.path.exists(os.path.join('..', 'apps', app, app, 'commands.py'))\
		or os.path.exists(os.path.join('..', 'apps', app, app, 'commands', '__init__.py')):
		try:
			app_command_module = importlib.import_module(app + '.commands')

I think it should be:

	if os.path.exists(os.path.join('..', '..', 'apps', app, app, 'commands.py')) or os.path.exists(os.path.join('..', '..', 'apps', app, app, 'commands', '__init__.py')):
		try:
			app_command_module = importlib.import_module(app + 'commands')

Note: please double check this, as it's late and I'm tired now. Also, I haven't got passed this and haven't had a clean install yet and after several fixes to the above, I'm now getting the new-site is not a command error; probably residual at this point; I've deleted everything and am trying again but, having those above issues addressed first might help. Tomorrow I can PR, if that's what is best?

@Olawale1
Copy link
Author

Olawale1 commented Apr 2, 2021

Hi @Natetronn

Good job! Haven't tried again in almost 2 weeks. I had to opt for a Docker install instead. Will give it another go this weekend though

Happy Easter all

@Natetronn
Copy link

Natetronn commented Apr 2, 2021

Thanks @Olawale1 !

Although it got to late for me to finish testing and I'm not sure the joins were correct or not. I could be wrong but, seems like it needs to go up quite a few directories before it reaches the apps folder (unless the working directory from bench_helper.py is somehow different than what I'm aware of?) so, I think my code may still be wrong, currently.

Point is, I'll continue testing today and report back my findings.

P.s. I've yet to have a clean install. And I've tried all 4 methods. The Digital Ocean marketplace image, the Easy Script, the Manual Install nor the Docker install methods have been kind to me 😞 Oh, but the VM works 😆 at least!

@Natetronn
Copy link

Natetronn commented Apr 2, 2021

Okay, I think the period needed to be there, as it's suppose to be frappe.commands module, not frappecommands:

 "stderr": "Traceback (most recent call last):\n  File \"/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py\", line 67, in get_app_commands\n    app_command_module = importlib.import_module(app + 'commands')\n  File \"/usr/lib/python3.8/importlib/__init__.py\", line 127, in import_module\n    return _bootstrap._gcd_import(name[level:], package, level)\n  File \"<frozen importlib._bootstrap>\", line 1014, in _gcd_import\n  File \"<frozen importlib._bootstrap>\", line 991, in _find_and_load\n  File \"<frozen importlib._bootstrap>\", line 973, in _find_and_load_unlocked\nModuleNotFoundError: No module named 'frappecommands'\nUsage: bench frappe [OPTIONS] COMMAND [ARGS]...\nTry \"bench frappe --help\" for help.\n\nError: No such command \"install-app\".",
    "stderr_lines": [
        "Traceback (most recent call last):",
        "  File \"/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py\", line 67, in get_app_commands",
        "    app_command_module = importlib.import_module(app + 'commands')",
        "  File \"/usr/lib/python3.8/importlib/__init__.py\", line 127, in import_module",
        "    return _bootstrap._gcd_import(name[level:], package, level)",
        "  File \"<frozen importlib._bootstrap>\", line 1014, in _gcd_import",
        "  File \"<frozen importlib._bootstrap>\", line 991, in _find_and_load",
        "  File \"<frozen importlib._bootstrap>\", line 973, in _find_and_load_unlocked",
        "ModuleNotFoundError: No module named 'frappecommands'",
        "Usage: bench frappe [OPTIONS] COMMAND [ARGS]...",
        "Try \"bench frappe --help\" for help.",
        "",
        "Error: No such command \"install-app\"."

I'm now at the following error (original code with the or statement changed i.e. only removed the \ and put the conditional on one line):

fatal: [localhost]: FAILED! => {
    "changed": true,
    "cmd": [
        "bench",
        "--site",
        "site1.local",
        "install-app",
        "erpnext"
    ],
    "delta": "0:00:04.116021",
    "end": "2021-04-02 16:40:02.404215",
    "invocation": {
        "module_args": {
            "_raw_params": "bench --site site1.local install-app erpnext",
            "_uses_shell": false,
            "argv": null,
            "chdir": "/home/frappe/frappe-bench",
            "creates": null,
            "executable": null,
            "removes": null,
            "stdin": null,
            "stdin_add_newline": true,
            "strip_empty_ends": true,
            "warn": true
        }
    },
    "msg": "non-zero return code",
    "rc": 1,
    "start": "2021-04-02 16:39:58.288194",
    "stderr": "",
    "stderr_lines": [],
    "stdout": "Could not find app \"erpnext\"",
    "stdout_lines": [
        "Could not find app \"erpnext\""
    ]

I'm brand new to this code base, so it's a bit of discovery here, hope people don't mind my "live action" here.

@Natetronn
Copy link

Natetronn commented Apr 2, 2021

I'm currently trying a fresh install with the following directions:

https://discuss.erpnext.com/t/easy-install-setup-guide-for-erpnext-installation-on-ubuntu-20-04-lts-with-some-modification-of-course/62375

Specifically step 4 to hopefully get past the "Could not find app \"erpnext\"" error and the command suggested for verbose and user and maria 10.5 etc, as I'm on Ubuntu 20.04 lts.

Seems to be stuck on Building wheel for pandas (setup.py) ... \. I have a 2cpu with 4gb and 512mb swap (maybe I should up this) that comes standard with the Linode 4GB plan.

I'll update again as things progress.

@ankush
Copy link
Member

ankush commented Apr 2, 2021

To avoid pandas build use Python 3.7

This is fixed now as v13 uses newer version and doesn't pin exact version anymore.

@Natetronn
Copy link

Thanks @ankush !

I'll give that a try...

@Natetronn
Copy link

Natetronn commented Apr 2, 2021

After 3 longs days of trying over and over to get ERPNext and Frappe installed, I now have what appears to be a successful installation.

Note: I've tested absolutely nothing at this point, however; just excited to finally see this success message, after so much struggle.

✨  Done in 65.968s
Done in 67.16s.
INFO:bench.utils:setting up backups
no crontab for username
SUCCESS: Bench /home/username/frappe-bench initialized

Although I'm using a Linode 4GB with a swap of 2GB, I followed the DO tutorial below:

https://www.digitalocean.com/community/tutorials/how-to-install-an-erpnext-stack-on-ubuntu-20-04

Aside: I'm running MariaDB 10.5.x, after following the step 3 from the previous 18.04 guide, as suggested (and linked to) in the above guide (for Ubuntu 20.04) and then adjusting the command from MariaDB 10.4 to 10.5 etc. Of course, I continued back in the original 20.04 guide for Step 4 and on from there.

@ankush ankush transferred this issue from frappe/bench Nov 23, 2022
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

3 participants