The hard way: compiling ROOT and Jupyter from scratch
I repeat my advice: Don’t.
Obviously, it’s possible to install these packages from scratch; I do it all the time. But it can take a while to learn how to do it. You’d learn a lot about UNIX, but you’ll be learning neither ROOT nor physics. Don’t expect me to break from teaching other students about ROOT to teach you about your C++ compiler and the location of your Python distribution in your directory hierarchy.
Now that you have been warned, here are the places to start:
Please keep the following in mind:
These are not applications that you can double-click to automatically install. The process requires some knowledge of the command shell.
Read the installation documentation for each package. Use some thought and initiative. If you aren’t familiar with UNIX shells before you started this process, you will be once you finish!
The dockerfile I used to create the wgseligman/jupyter-pyroot container may provide a clue for how to create your own installation.

Figure 70: https://xkcd.com/1739/ by Randall Munroe