<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.completenoobs.com/noobs/index.php?action=history&amp;feed=atom&amp;title=Ubuntu_22.04_IPFS</id>
	<title>Ubuntu 22.04 IPFS - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.completenoobs.com/noobs/index.php?action=history&amp;feed=atom&amp;title=Ubuntu_22.04_IPFS"/>
	<link rel="alternate" type="text/html" href="https://www.completenoobs.com/noobs/index.php?title=Ubuntu_22.04_IPFS&amp;action=history"/>
	<updated>2026-04-30T02:30:25Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://www.completenoobs.com/noobs/index.php?title=Ubuntu_22.04_IPFS&amp;diff=423&amp;oldid=prev</id>
		<title>Noob: Created page with &quot;Moved from &#039;IPFS Basics&#039; This page is going to be just about IPFS on/for Ubuntu 22.04 Redo from scratch, below is for notes and placeholder from old page.  ==Introduction to IPFS==  Note that this guide was unsuccessful on a home network but worked on a Vultr VPS. IPFS requires ports 4001 TCP and UDP to be open on the router.  Tested on an Ubuntu 22.04 server.  Download Linux Binary from https://dist.ipfs.tech/#go-ipfs  Assuming you already have LXD set up (it doesn&#039;t ha...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.completenoobs.com/noobs/index.php?title=Ubuntu_22.04_IPFS&amp;diff=423&amp;oldid=prev"/>
		<updated>2023-05-11T19:13:00Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Moved from &amp;#039;IPFS Basics&amp;#039; This page is going to be just about IPFS on/for Ubuntu 22.04 Redo from scratch, below is for notes and placeholder from old page.  ==Introduction to IPFS==  Note that this guide was unsuccessful on a home network but worked on a Vultr VPS. IPFS requires ports 4001 TCP and UDP to be open on the router.  Tested on an Ubuntu 22.04 server.  Download Linux Binary from https://dist.ipfs.tech/#go-ipfs  Assuming you already have LXD set up (it doesn&amp;#039;t ha...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Moved from &amp;#039;IPFS Basics&amp;#039; This page is going to be just about IPFS on/for Ubuntu 22.04 Redo from scratch, below is for notes and placeholder from old page.&lt;br /&gt;
&lt;br /&gt;
==Introduction to IPFS==&lt;br /&gt;
&lt;br /&gt;
Note that this guide was unsuccessful on a home network but worked on a Vultr VPS.&lt;br /&gt;
IPFS requires ports 4001 TCP and UDP to be open on the router.&lt;br /&gt;
&lt;br /&gt;
Tested on an Ubuntu 22.04 server.&lt;br /&gt;
&lt;br /&gt;
Download Linux Binary from https://dist.ipfs.tech/#go-ipfs&lt;br /&gt;
&lt;br /&gt;
Assuming you already have LXD set up (it doesn&amp;#039;t have to be in a container):&lt;br /&gt;
Check https://dist.ipfs.tech/kubo/ for the latest version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt update &amp;amp;&amp;amp; apt upgrade -y&lt;br /&gt;
wget https://dist.ipfs.tech/kubo/v0.18.1/kubo_v0.18.1_linux-amd64.tar.gz&lt;br /&gt;
tar xvf kubo_v0.18.1_linux-amd64.tar.gz&lt;br /&gt;
bash kubo/install.sh&lt;br /&gt;
ipfs init&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may encounter an error that looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ERROR provider.queue queue/queue.go:125 Failed to enqueue cid: leveldb: closed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This error does not impact the installation.&lt;br /&gt;
&lt;br /&gt;
Now, create a simple text file. Replace &amp;#039;&amp;#039;&amp;#039;$EDITOR&amp;#039;&amp;#039;&amp;#039; with your preferred terminal text editor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$EDITOR helloworld.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the following content to the file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hello there, I wonder how many devices I can see this on.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To share the file, you need to add and pin it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ipfs add helloworld.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command will return a CID, which looks like this:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;QmQTnvc5eV7NdPfQ8zLVCr6gBrXaDAUKUd1SGDAfsPFnoh.&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Now, pin the file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ipfs pin add QmQTnvc5eV7NdPfQ8zLVCr6gBrXaDAUKUd1SGDAfsPFnoh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connect to the network:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ipfs daemon&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use &amp;#039;&amp;#039;&amp;#039;CTRL+z&amp;#039;&amp;#039;&amp;#039; to send the IPFS daemon to the background and run &amp;#039;&amp;#039;&amp;#039;ipfs swarm peers&amp;#039;&amp;#039;&amp;#039; to see connections.&lt;br /&gt;
To bring the IPFS daemon back to the foreground, use &amp;#039;&amp;#039;&amp;#039;bg&amp;#039;&amp;#039;&amp;#039; to see background processes and then &amp;#039;&amp;#039;&amp;#039;fg 1&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Note: &amp;#039;&amp;#039;&amp;#039;ipfs.io&amp;#039;&amp;#039;&amp;#039; is a third-party service and cannot handle data-heavy content. For heavy content, such as videos, download using IPFS to view.&lt;br /&gt;
&lt;br /&gt;
To view the file in a web browser, simply add &amp;#039;&amp;#039;&amp;#039;https://ipfs.io/ipfs/&amp;#039;&amp;#039;&amp;#039; to the beginning of the CID:&lt;br /&gt;
&lt;br /&gt;
https://ipfs.io/ipfs/QmQTnvc5eV7NdPfQ8zLVCr6gBrXaDAUKUd1SGDAfsPFnoh&lt;br /&gt;
&lt;br /&gt;
==IPFS Desktop==&lt;br /&gt;
&amp;lt;code&amp;gt;https://github.com/ipfs/ipfs-desktop/releases&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Download and share==&lt;br /&gt;
&amp;lt;b&amp;gt;$HASH&amp;lt;/b&amp;gt; is placeholder for the hash of the ipfs file.&amp;lt;br&amp;gt;&lt;br /&gt;
To download a file:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;ipfs get $HASH&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
To share/host you need to pin:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;ipfs pin $HASH&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
To view pinned items&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;ipfs pin ls&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
or&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;ipfs pin ls --type=recursive&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===add directory===&lt;br /&gt;
&amp;lt;code&amp;gt;ipfs add --recursive /path/to/directory&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
each file in directory (recursive) will be uploaded and each given a hash.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===unpin===&lt;br /&gt;
&amp;lt;code&amp;gt;ipfs pin rm $HASH&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===Clear cache===&lt;br /&gt;
&amp;lt;code&amp;gt;ipfs repo gc&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===View on web browser===&lt;br /&gt;
Note: ipfs.io is a third party service, and can not handle data heavy content. For heavy content such as videos, download using ipfs to view.&amp;lt;br&amp;gt;&lt;br /&gt;
Use web site/service ipfs.io&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;https://ipfs.io/ipfs/$HASH&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Host on Server==&lt;br /&gt;
&amp;lt;code&amp;gt;wget https://dist.ipfs.tech/kubo/v0.18.1/kubo_v0.18.1_linux-amd64.tar.gz&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;tar xvf kubo_v0.18.1_linux-amd64.tar.gz&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;bash kubo/install.sh&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;ipfs init --profile server&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===systemd===&lt;br /&gt;
&amp;lt;code&amp;gt;$EDITOR /etc/systemd/system/ipfs.service&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description =Start ipfs daemon&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/usr/local/bin/ipfs daemon&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl enable ipfs.service&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl start ipfs&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Note: will tidy later ==&lt;br /&gt;
&lt;br /&gt;
NOTE: should of checked the licence first,The MIT open course ware is &amp;lt;b&amp;gt;CC BY-NC-SA 4.0&amp;lt;/b&amp;gt; and can not be used on this website! deleteing, leaving this here for note on how to pin mass of files.&amp;lt;br&amp;gt;&lt;br /&gt;
In this example i will be uploading an MIT cc-by course to ipfs.&lt;br /&gt;
&lt;br /&gt;
files in a directory called &amp;lt;b&amp;gt;mit-test-course&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;ipfs add --recursive /path/to/directory&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt; will add all the files but not pin them.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@ipfs-test:~# tree mit-test-course/&lt;br /&gt;
mit-test-course/&lt;br /&gt;
├── 1&lt;br /&gt;
│   ├── 920cc911b6eb5747f2ccd431bbc4306b_lec1.py&lt;br /&gt;
│   ├── MIT6_0001F16_Lecture_01_300k.mp4&lt;br /&gt;
│   └── e921a690079369751bcce3e34da6c6ee_MIT6_0001F16_Lec1.pdf&lt;br /&gt;
├── 10&lt;br /&gt;
│   ├── 066eba6ea6d56a88e56ae325940d4c4c_MIT6_0001F16_Lec10.pdf&lt;br /&gt;
│   ├── MIT6_0001F16_Lecture_10_300k.mp4&lt;br /&gt;
│   └── bfa32fd241d88ae02cd3157aed232bac_lec10_complexity_part1.py&lt;br /&gt;
├── 11&lt;br /&gt;
│   ├── MIT6_0001F16_Lecture_11_300k.mp4&lt;br /&gt;
│   ├── bb953fb81d4afa3bc837c16eba613955_MIT6_0001F16_Lec11.pdf&lt;br /&gt;
│   └── bdf800867e6762c6758ecd2230178f41_lec11_complexity_part2.py&lt;br /&gt;
├── 12&lt;br /&gt;
│   ├── 310536cd5f5aa1fc0c11726ce13c565e_lec12_sorting.py&lt;br /&gt;
│   ├── 6425d0dabb1cea1a076b8c46c0ae2da6_MIT6_0001F16_Lec12.pdf&lt;br /&gt;
│   └── MIT6_0001F16_Lecture_12_300k.mp4&lt;br /&gt;
├── 2&lt;br /&gt;
│   ├── MIT6_0001F16_Lecture_02_300k.mp4&lt;br /&gt;
│   ├── ba2947b25b1580e4a84df0ec5dbe5cdd_MIT6_0001F16_Lec2.pdf&lt;br /&gt;
│   └── d6ee838ee4c85ace93a4e170cfd83c03_lec2_branch_loops.py&lt;br /&gt;
├── 3&lt;br /&gt;
│   ├── 88de925a1fb925e46a08bc5f34d029bd_lec3_strings_algos.py&lt;br /&gt;
│   ├── MIT6_0001F16_Lecture_03_300k.mp4&lt;br /&gt;
│   └── b9b9a82a29e8746db1facfbd30c07940_MIT6_0001F16_Lec3.pdf&lt;br /&gt;
├── 4&lt;br /&gt;
│   ├── 6ba59859535f1566dd57a7279aeba5d1_MIT6_0001F16_Lec4.pdf&lt;br /&gt;
│   ├── 9e8439a27af18817e046ac37333d03f6_lec4_functions.py&lt;br /&gt;
│   └── MIT6_0001F16_Lecture_04_300k.mp4&lt;br /&gt;
├── 5&lt;br /&gt;
│   ├── 1776670e271578eeb99fc25975f20586_MIT6_0001F16_Lec5.pdf&lt;br /&gt;
│   ├── MIT6_0001F16_Lecture_05_300k.mp4&lt;br /&gt;
│   └── cdf5f8e7f109952655f4d253ed955555_lec5_tuples_lists.py&lt;br /&gt;
├── 6&lt;br /&gt;
│   ├── 706228e592761d9c7c1c073f8ba7a6cc_lec6_recursion_dictionaries.py&lt;br /&gt;
│   ├── 876348c652c5353daccc96e1b7d577bb_MIT6_0001F16_Lec6.pdf&lt;br /&gt;
│   └── MIT6_0001F16_Lecture_06_300k.mp4&lt;br /&gt;
├── 7&lt;br /&gt;
│   ├── 51bdde43dfd773ba20747ce5d89119ac_MIT6_0001F16_Lec7.pdf&lt;br /&gt;
│   ├── MIT6_0001F16_Lecture_07_300k.mp4&lt;br /&gt;
│   └── abdd1d61892ccce9be2ad84e52004e07_lec7_debug_except.py&lt;br /&gt;
├── 8&lt;br /&gt;
│   ├── 0705ac9dcc7e637a0e8e9d97eb258a26_lec8_classes.py&lt;br /&gt;
│   ├── 7a6f85d03f132dcd9d7592bc4643be1c_MIT6_0001F16_Lec8.pdf&lt;br /&gt;
│   └── MIT6_0001F16_Lecture_08_300k.mp4&lt;br /&gt;
├── 9&lt;br /&gt;
│   ├── 2dd6c75e7b4bd6bd135078e6f3701201_MIT6_0001F16_Lec9.pdf&lt;br /&gt;
│   ├── MIT6_0001F16_Lecture_09_300k.mp4&lt;br /&gt;
│   └── bf8e8195044d5f6aefc1a455968e2f3e_lec9_inheritance.py&lt;br /&gt;
└── Introduction to Computer Science and Programming in Python.txt&lt;br /&gt;
&lt;br /&gt;
12 directories, 37 files&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ipfs add --recursive /path/to/mit-test-course &amp;gt; mit.txt&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt; will upload and create a file called mit.txt with the following output:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@ipfs-test:~# cat mit.txt &lt;br /&gt;
added QmengUgSy9oY9qMXJC6ujKy7mMpunb5sG5Uo8RpFX4G5g9 mit-test-course/1/920cc911b6eb5747f2ccd431bbc4306b_lec1.py&lt;br /&gt;
added QmaTdTMxWdz6ySLbx258zQU5McpJTo4ZEVJ63GSKmVEyeM mit-test-course/1/MIT6_0001F16_Lecture_01_300k.mp4&lt;br /&gt;
added QmemB25bVuN2fuiAq3JaDM4J5MYit6HfCCsU3EFTWL7wpF mit-test-course/1/e921a690079369751bcce3e34da6c6ee_MIT6_0001F16_Lec1.pdf&lt;br /&gt;
added QmbyP59ttPKGe5ZNADsgqTsgBF3oYGzhZXFfBhszG2nuPm mit-test-course/10/066eba6ea6d56a88e56ae325940d4c4c_MIT6_0001F16_Lec10.pdf&lt;br /&gt;
added QmQNooq1g25LFp1Fxj2tfpKKMKi8NbutkhuXNf5Ppo7t5f mit-test-course/10/MIT6_0001F16_Lecture_10_300k.mp4&lt;br /&gt;
added QmUtgXQXjj2C3qb2UXFrPmKHkFdEjmehk4ZLQhcZ37rEmw mit-test-course/10/bfa32fd241d88ae02cd3157aed232bac_lec10_complexity_part1.py&lt;br /&gt;
added QmR7Ned6iZytjpVHVN6W53EZ5Qg4Zd6EkEcXxn8DjYMgrd mit-test-course/11/MIT6_0001F16_Lecture_11_300k.mp4&lt;br /&gt;
added QmNPjN3616QdmEWLPokwuTkLL1vrzcLVRSFLWUcukqtxZL mit-test-course/11/bb953fb81d4afa3bc837c16eba613955_MIT6_0001F16_Lec11.pdf&lt;br /&gt;
added QmdpwFTFkwnkqWW3CozBBAfeYHchDeVAV7ArkA1dUqbUZ4 mit-test-course/11/bdf800867e6762c6758ecd2230178f41_lec11_complexity_part2.py&lt;br /&gt;
added QmbV8ct8DEQyRGRDSX4PaQBXk8r8ryYLDNwTa2buC7kcP5 mit-test-course/12/310536cd5f5aa1fc0c11726ce13c565e_lec12_sorting.py&lt;br /&gt;
added QmToP68Knz71euVuntRWtz6UshRoiRssELJNFMeP1f2sR5 mit-test-course/12/6425d0dabb1cea1a076b8c46c0ae2da6_MIT6_0001F16_Lec12.pdf&lt;br /&gt;
added QmPWidAv5mBrgEcKDVqWe62JaAiwBWs8KZc1S8r3bbJsvY mit-test-course/12/MIT6_0001F16_Lecture_12_300k.mp4&lt;br /&gt;
added QmTFdkMJnzUcwgs1hdoF7qtADE2NqTJVaF9CfgULbzSuA9 mit-test-course/2/MIT6_0001F16_Lecture_02_300k.mp4&lt;br /&gt;
added QmNiZvEh6UmpHLTxw4saN7WdojzBokp2JCbucYzrekoQBK mit-test-course/2/ba2947b25b1580e4a84df0ec5dbe5cdd_MIT6_0001F16_Lec2.pdf&lt;br /&gt;
added QmPjEzEu56mqeE19Vth9AkDbAxz7wAWg9zMVvF9FZ1UBvK mit-test-course/2/d6ee838ee4c85ace93a4e170cfd83c03_lec2_branch_loops.py&lt;br /&gt;
added QmYppDgGMptihHA7ixFw2GHvspN8Bw1HY21HtUpQNxi23i mit-test-course/3/88de925a1fb925e46a08bc5f34d029bd_lec3_strings_algos.py&lt;br /&gt;
added QmTTCsuhbnjXWuigZLSgKAt4DjFsm78MANo3KUMGcK98s1 mit-test-course/3/MIT6_0001F16_Lecture_03_300k.mp4&lt;br /&gt;
added QmP2AZfUx8RTqCGamJtPyodFU8dHG8QrBHYKkP79YepEe9 mit-test-course/3/b9b9a82a29e8746db1facfbd30c07940_MIT6_0001F16_Lec3.pdf&lt;br /&gt;
added QmP1p4h21ogMxWeeX2PiDibQbHqWer7ABCsMrfMxEx7QBW mit-test-course/4/6ba59859535f1566dd57a7279aeba5d1_MIT6_0001F16_Lec4.pdf&lt;br /&gt;
added QmNtPQncXMYNBnX4NoNfx2ifetrfvrATamdrsjx4u9iQ7c mit-test-course/4/9e8439a27af18817e046ac37333d03f6_lec4_functions.py&lt;br /&gt;
added QmQuc5zpaJdMfRYxTLyZc5DQuota1FjuJiqgWf8ctGmRsU mit-test-course/4/MIT6_0001F16_Lecture_04_300k.mp4&lt;br /&gt;
added QmSdxg2inPbK1FSynNdPUka6CUZtEGG6sdPZgxaAgb46GE mit-test-course/5/1776670e271578eeb99fc25975f20586_MIT6_0001F16_Lec5.pdf&lt;br /&gt;
added Qmco5sKKQfnWUNP9ZUxLkDhoV6jfjv8L4AdzES7En41AzP mit-test-course/5/MIT6_0001F16_Lecture_05_300k.mp4&lt;br /&gt;
added QmThDori5ETa3U27DFpndU7RmsLgG7zjpqGVxAncCupSuc mit-test-course/5/cdf5f8e7f109952655f4d253ed955555_lec5_tuples_lists.py&lt;br /&gt;
added QmaGhNYnR5yUMYZf4q7qLsNwEW6B7pbLbgJokJBTNSA2FT mit-test-course/6/706228e592761d9c7c1c073f8ba7a6cc_lec6_recursion_dictionaries.py&lt;br /&gt;
added QmQAqSGJAeoypUMyUnb7hRrziDyRAwymcTGdcaydT5i73s mit-test-course/6/876348c652c5353daccc96e1b7d577bb_MIT6_0001F16_Lec6.pdf&lt;br /&gt;
added QmVzK3PVETv69Y27UKDfaQQM5um8ByMdYQS3TzD2EkoR42 mit-test-course/6/MIT6_0001F16_Lecture_06_300k.mp4&lt;br /&gt;
added QmcqZoeVrsfBv4Ri6M8KtiLdy3VpKnyznDFhX8zvfd3Qrs mit-test-course/7/51bdde43dfd773ba20747ce5d89119ac_MIT6_0001F16_Lec7.pdf&lt;br /&gt;
added QmUyiqpAUA91w4Xm2Dz2wPr6kE6wTzA1apwJziTdBysRLw mit-test-course/7/MIT6_0001F16_Lecture_07_300k.mp4&lt;br /&gt;
added QmeVKCB6ponYr4f72MuNwegukX9t42NTywNHpDPgyNi9ae mit-test-course/7/abdd1d61892ccce9be2ad84e52004e07_lec7_debug_except.py&lt;br /&gt;
added QmQCaZZA75UQ5pAKy8zhcz6Ci8yY13UVHUvsuXmid86GUH mit-test-course/8/0705ac9dcc7e637a0e8e9d97eb258a26_lec8_classes.py&lt;br /&gt;
added QmdccChFuYBCiLmufEmk6oXCHybaUQiPXajD3c3xMupiaC mit-test-course/8/7a6f85d03f132dcd9d7592bc4643be1c_MIT6_0001F16_Lec8.pdf&lt;br /&gt;
added QmZFSSPndvRfPT2vyehuyEQitfb8CzdYkA7orFAKyvhA4u mit-test-course/8/MIT6_0001F16_Lecture_08_300k.mp4&lt;br /&gt;
added QmbaJFk4mFRmCbtQybK94etyfRA2LcM22Kfvjbvdf6X8Gw mit-test-course/9/2dd6c75e7b4bd6bd135078e6f3701201_MIT6_0001F16_Lec9.pdf&lt;br /&gt;
added QmdENonCipE7TK99i7dFz9paqDUSefR4PFdveEmVi5oXAb mit-test-course/9/MIT6_0001F16_Lecture_09_300k.mp4&lt;br /&gt;
added QmQ7UB4PaGBRHvHfDshrASwynvansFVXrp3RNULwhThUsC mit-test-course/9/bf8e8195044d5f6aefc1a455968e2f3e_lec9_inheritance.py&lt;br /&gt;
added Qmdw2XaaX99t7eNzRNXdHEHYzwiH5qhg1iBLDpekCXj5am mit-test-course/Introduction to Computer Science and Programming in Python.txt&lt;br /&gt;
added QmQM6QEJK9kJGzxe1ntDKrE7nLtB9CPqupjQZvsEze6rkK mit-test-course/1&lt;br /&gt;
added QmX7ZEHg2WipkSbwani5iSwxtBPgghajtGP1QqJQ6jQAAE mit-test-course/10&lt;br /&gt;
added QmaUyBU3M5zFpeHrMdZbapSLf73SUHZaookrCRCRm87Jwb mit-test-course/11&lt;br /&gt;
added QmP3Xx9cUp9Ly44bP1TXQHziVpLpNuZDnH7nRhdQTJPk5w mit-test-course/12&lt;br /&gt;
added QmYQQLN4pEdKi7S8GJJLFtw4LCEiZPkUzRjyNJqNcrU7kS mit-test-course/2&lt;br /&gt;
added QmZvUavbLwZ5PjiadoGSvB8nURGaeDiTyNivZq9tsPN1dD mit-test-course/3&lt;br /&gt;
added QmWf7uJtJmBhLB4sAsWUDWGwPyz24yboHYqxZGpEAwP4Gx mit-test-course/4&lt;br /&gt;
added QmPAApNSDbgZnr1tVe77zPx8bz3USsP4UZxA6nCCSMEbRx mit-test-course/5&lt;br /&gt;
added QmPMEUkViQsT7XwfPxwque3EfmPs1kaVJCU5Bc8AujYfej mit-test-course/6&lt;br /&gt;
added QmWnzp23vzhx8rX5z7W9WZVWGq2H8j18GmqddbHRa79jX1 mit-test-course/7&lt;br /&gt;
added QmRnosvcFPgEZSGMyRw9uuTyDzcQf6Q2ffEXADYEFvqtsN mit-test-course/8&lt;br /&gt;
added QmeUE3L3gwNvK3BvcutttWxSJPn7RusxNZHzTQeYUNGzjw mit-test-course/9&lt;br /&gt;
added QmY965P9FuqBum5Ppy7QWUf1HBRVdqDbMFVDStBdjNnjqk mit-test-course&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now we are going to use awk to just print out the hashes.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;cat mit.txt | awk &amp;#039;{print $2}&amp;#039; &amp;gt;hash.txt&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;cat hash.txt&amp;lt;/code&amp;gt; will return:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@ipfs-test:~# cat hash.txt &lt;br /&gt;
QmengUgSy9oY9qMXJC6ujKy7mMpunb5sG5Uo8RpFX4G5g9&lt;br /&gt;
QmaTdTMxWdz6ySLbx258zQU5McpJTo4ZEVJ63GSKmVEyeM&lt;br /&gt;
QmemB25bVuN2fuiAq3JaDM4J5MYit6HfCCsU3EFTWL7wpF&lt;br /&gt;
QmbyP59ttPKGe5ZNADsgqTsgBF3oYGzhZXFfBhszG2nuPm&lt;br /&gt;
QmQNooq1g25LFp1Fxj2tfpKKMKi8NbutkhuXNf5Ppo7t5f&lt;br /&gt;
QmUtgXQXjj2C3qb2UXFrPmKHkFdEjmehk4ZLQhcZ37rEmw&lt;br /&gt;
QmR7Ned6iZytjpVHVN6W53EZ5Qg4Zd6EkEcXxn8DjYMgrd&lt;br /&gt;
QmNPjN3616QdmEWLPokwuTkLL1vrzcLVRSFLWUcukqtxZL&lt;br /&gt;
QmdpwFTFkwnkqWW3CozBBAfeYHchDeVAV7ArkA1dUqbUZ4&lt;br /&gt;
QmbV8ct8DEQyRGRDSX4PaQBXk8r8ryYLDNwTa2buC7kcP5&lt;br /&gt;
QmToP68Knz71euVuntRWtz6UshRoiRssELJNFMeP1f2sR5&lt;br /&gt;
QmPWidAv5mBrgEcKDVqWe62JaAiwBWs8KZc1S8r3bbJsvY&lt;br /&gt;
QmTFdkMJnzUcwgs1hdoF7qtADE2NqTJVaF9CfgULbzSuA9&lt;br /&gt;
QmNiZvEh6UmpHLTxw4saN7WdojzBokp2JCbucYzrekoQBK&lt;br /&gt;
QmPjEzEu56mqeE19Vth9AkDbAxz7wAWg9zMVvF9FZ1UBvK&lt;br /&gt;
QmYppDgGMptihHA7ixFw2GHvspN8Bw1HY21HtUpQNxi23i&lt;br /&gt;
QmTTCsuhbnjXWuigZLSgKAt4DjFsm78MANo3KUMGcK98s1&lt;br /&gt;
QmP2AZfUx8RTqCGamJtPyodFU8dHG8QrBHYKkP79YepEe9&lt;br /&gt;
QmP1p4h21ogMxWeeX2PiDibQbHqWer7ABCsMrfMxEx7QBW&lt;br /&gt;
QmNtPQncXMYNBnX4NoNfx2ifetrfvrATamdrsjx4u9iQ7c&lt;br /&gt;
QmQuc5zpaJdMfRYxTLyZc5DQuota1FjuJiqgWf8ctGmRsU&lt;br /&gt;
QmSdxg2inPbK1FSynNdPUka6CUZtEGG6sdPZgxaAgb46GE&lt;br /&gt;
Qmco5sKKQfnWUNP9ZUxLkDhoV6jfjv8L4AdzES7En41AzP&lt;br /&gt;
QmThDori5ETa3U27DFpndU7RmsLgG7zjpqGVxAncCupSuc&lt;br /&gt;
QmaGhNYnR5yUMYZf4q7qLsNwEW6B7pbLbgJokJBTNSA2FT&lt;br /&gt;
QmQAqSGJAeoypUMyUnb7hRrziDyRAwymcTGdcaydT5i73s&lt;br /&gt;
QmVzK3PVETv69Y27UKDfaQQM5um8ByMdYQS3TzD2EkoR42&lt;br /&gt;
QmcqZoeVrsfBv4Ri6M8KtiLdy3VpKnyznDFhX8zvfd3Qrs&lt;br /&gt;
QmUyiqpAUA91w4Xm2Dz2wPr6kE6wTzA1apwJziTdBysRLw&lt;br /&gt;
QmeVKCB6ponYr4f72MuNwegukX9t42NTywNHpDPgyNi9ae&lt;br /&gt;
QmQCaZZA75UQ5pAKy8zhcz6Ci8yY13UVHUvsuXmid86GUH&lt;br /&gt;
QmdccChFuYBCiLmufEmk6oXCHybaUQiPXajD3c3xMupiaC&lt;br /&gt;
QmZFSSPndvRfPT2vyehuyEQitfb8CzdYkA7orFAKyvhA4u&lt;br /&gt;
QmbaJFk4mFRmCbtQybK94etyfRA2LcM22Kfvjbvdf6X8Gw&lt;br /&gt;
QmdENonCipE7TK99i7dFz9paqDUSefR4PFdveEmVi5oXAb&lt;br /&gt;
QmQ7UB4PaGBRHvHfDshrASwynvansFVXrp3RNULwhThUsC&lt;br /&gt;
Qmdw2XaaX99t7eNzRNXdHEHYzwiH5qhg1iBLDpekCXj5am&lt;br /&gt;
QmQM6QEJK9kJGzxe1ntDKrE7nLtB9CPqupjQZvsEze6rkK&lt;br /&gt;
QmX7ZEHg2WipkSbwani5iSwxtBPgghajtGP1QqJQ6jQAAE&lt;br /&gt;
QmaUyBU3M5zFpeHrMdZbapSLf73SUHZaookrCRCRm87Jwb&lt;br /&gt;
QmP3Xx9cUp9Ly44bP1TXQHziVpLpNuZDnH7nRhdQTJPk5w&lt;br /&gt;
QmYQQLN4pEdKi7S8GJJLFtw4LCEiZPkUzRjyNJqNcrU7kS&lt;br /&gt;
QmZvUavbLwZ5PjiadoGSvB8nURGaeDiTyNivZq9tsPN1dD&lt;br /&gt;
QmWf7uJtJmBhLB4sAsWUDWGwPyz24yboHYqxZGpEAwP4Gx&lt;br /&gt;
QmPAApNSDbgZnr1tVe77zPx8bz3USsP4UZxA6nCCSMEbRx&lt;br /&gt;
QmPMEUkViQsT7XwfPxwque3EfmPs1kaVJCU5Bc8AujYfej&lt;br /&gt;
QmWnzp23vzhx8rX5z7W9WZVWGq2H8j18GmqddbHRa79jX1&lt;br /&gt;
QmRnosvcFPgEZSGMyRw9uuTyDzcQf6Q2ffEXADYEFvqtsN&lt;br /&gt;
QmeUE3L3gwNvK3BvcutttWxSJPn7RusxNZHzTQeYUNGzjw&lt;br /&gt;
QmY965P9FuqBum5Ppy7QWUf1HBRVdqDbMFVDStBdjNnjqk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can do in terminal but will make bash script.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$EDITOR pin-hash.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
while read p; do&lt;br /&gt;
        ipfs pin add $p&lt;br /&gt;
done &amp;lt;hash.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;bash pin-hash.sh&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@ipfs-test:~# bash pin-hash.sh &lt;br /&gt;
pinned QmengUgSy9oY9qMXJC6ujKy7mMpunb5sG5Uo8RpFX4G5g9 recursively&lt;br /&gt;
pinned QmaTdTMxWdz6ySLbx258zQU5McpJTo4ZEVJ63GSKmVEyeM recursively&lt;br /&gt;
pinned QmemB25bVuN2fuiAq3JaDM4J5MYit6HfCCsU3EFTWL7wpF recursively&lt;br /&gt;
pinned QmbyP59ttPKGe5ZNADsgqTsgBF3oYGzhZXFfBhszG2nuPm recursively&lt;br /&gt;
pinned QmQNooq1g25LFp1Fxj2tfpKKMKi8NbutkhuXNf5Ppo7t5f recursively&lt;br /&gt;
pinned QmUtgXQXjj2C3qb2UXFrPmKHkFdEjmehk4ZLQhcZ37rEmw recursively&lt;br /&gt;
pinned QmR7Ned6iZytjpVHVN6W53EZ5Qg4Zd6EkEcXxn8DjYMgrd recursively&lt;br /&gt;
pinned QmNPjN3616QdmEWLPokwuTkLL1vrzcLVRSFLWUcukqtxZL recursively&lt;br /&gt;
pinned QmdpwFTFkwnkqWW3CozBBAfeYHchDeVAV7ArkA1dUqbUZ4 recursively&lt;br /&gt;
pinned QmbV8ct8DEQyRGRDSX4PaQBXk8r8ryYLDNwTa2buC7kcP5 recursively&lt;br /&gt;
pinned QmToP68Knz71euVuntRWtz6UshRoiRssELJNFMeP1f2sR5 recursively&lt;br /&gt;
pinned QmPWidAv5mBrgEcKDVqWe62JaAiwBWs8KZc1S8r3bbJsvY recursively&lt;br /&gt;
pinned QmTFdkMJnzUcwgs1hdoF7qtADE2NqTJVaF9CfgULbzSuA9 recursively&lt;br /&gt;
pinned QmNiZvEh6UmpHLTxw4saN7WdojzBokp2JCbucYzrekoQBK recursively&lt;br /&gt;
pinned QmPjEzEu56mqeE19Vth9AkDbAxz7wAWg9zMVvF9FZ1UBvK recursively&lt;br /&gt;
pinned QmYppDgGMptihHA7ixFw2GHvspN8Bw1HY21HtUpQNxi23i recursively&lt;br /&gt;
pinned QmTTCsuhbnjXWuigZLSgKAt4DjFsm78MANo3KUMGcK98s1 recursively&lt;br /&gt;
pinned QmP2AZfUx8RTqCGamJtPyodFU8dHG8QrBHYKkP79YepEe9 recursively&lt;br /&gt;
pinned QmP1p4h21ogMxWeeX2PiDibQbHqWer7ABCsMrfMxEx7QBW recursively&lt;br /&gt;
pinned QmNtPQncXMYNBnX4NoNfx2ifetrfvrATamdrsjx4u9iQ7c recursively&lt;br /&gt;
pinned QmQuc5zpaJdMfRYxTLyZc5DQuota1FjuJiqgWf8ctGmRsU recursively&lt;br /&gt;
pinned QmSdxg2inPbK1FSynNdPUka6CUZtEGG6sdPZgxaAgb46GE recursively&lt;br /&gt;
pinned Qmco5sKKQfnWUNP9ZUxLkDhoV6jfjv8L4AdzES7En41AzP recursively&lt;br /&gt;
pinned QmThDori5ETa3U27DFpndU7RmsLgG7zjpqGVxAncCupSuc recursively&lt;br /&gt;
pinned QmaGhNYnR5yUMYZf4q7qLsNwEW6B7pbLbgJokJBTNSA2FT recursively&lt;br /&gt;
pinned QmQAqSGJAeoypUMyUnb7hRrziDyRAwymcTGdcaydT5i73s recursively&lt;br /&gt;
pinned QmVzK3PVETv69Y27UKDfaQQM5um8ByMdYQS3TzD2EkoR42 recursively&lt;br /&gt;
pinned QmcqZoeVrsfBv4Ri6M8KtiLdy3VpKnyznDFhX8zvfd3Qrs recursively&lt;br /&gt;
pinned QmUyiqpAUA91w4Xm2Dz2wPr6kE6wTzA1apwJziTdBysRLw recursively&lt;br /&gt;
pinned QmeVKCB6ponYr4f72MuNwegukX9t42NTywNHpDPgyNi9ae recursively&lt;br /&gt;
pinned QmQCaZZA75UQ5pAKy8zhcz6Ci8yY13UVHUvsuXmid86GUH recursively&lt;br /&gt;
pinned QmdccChFuYBCiLmufEmk6oXCHybaUQiPXajD3c3xMupiaC recursively&lt;br /&gt;
pinned QmZFSSPndvRfPT2vyehuyEQitfb8CzdYkA7orFAKyvhA4u recursively&lt;br /&gt;
pinned QmbaJFk4mFRmCbtQybK94etyfRA2LcM22Kfvjbvdf6X8Gw recursively&lt;br /&gt;
pinned QmdENonCipE7TK99i7dFz9paqDUSefR4PFdveEmVi5oXAb recursively&lt;br /&gt;
pinned QmQ7UB4PaGBRHvHfDshrASwynvansFVXrp3RNULwhThUsC recursively&lt;br /&gt;
pinned Qmdw2XaaX99t7eNzRNXdHEHYzwiH5qhg1iBLDpekCXj5am recursively&lt;br /&gt;
pinned QmQM6QEJK9kJGzxe1ntDKrE7nLtB9CPqupjQZvsEze6rkK recursively&lt;br /&gt;
pinned QmX7ZEHg2WipkSbwani5iSwxtBPgghajtGP1QqJQ6jQAAE recursively&lt;br /&gt;
pinned QmaUyBU3M5zFpeHrMdZbapSLf73SUHZaookrCRCRm87Jwb recursively&lt;br /&gt;
pinned QmP3Xx9cUp9Ly44bP1TXQHziVpLpNuZDnH7nRhdQTJPk5w recursively&lt;br /&gt;
pinned QmYQQLN4pEdKi7S8GJJLFtw4LCEiZPkUzRjyNJqNcrU7kS recursively&lt;br /&gt;
pinned QmZvUavbLwZ5PjiadoGSvB8nURGaeDiTyNivZq9tsPN1dD recursively&lt;br /&gt;
pinned QmWf7uJtJmBhLB4sAsWUDWGwPyz24yboHYqxZGpEAwP4Gx recursively&lt;br /&gt;
pinned QmPAApNSDbgZnr1tVe77zPx8bz3USsP4UZxA6nCCSMEbRx recursively&lt;br /&gt;
pinned QmPMEUkViQsT7XwfPxwque3EfmPs1kaVJCU5Bc8AujYfej recursively&lt;br /&gt;
pinned QmWnzp23vzhx8rX5z7W9WZVWGq2H8j18GmqddbHRa79jX1 recursively&lt;br /&gt;
pinned QmRnosvcFPgEZSGMyRw9uuTyDzcQf6Q2ffEXADYEFvqtsN recursively&lt;br /&gt;
pinned QmeUE3L3gwNvK3BvcutttWxSJPn7RusxNZHzTQeYUNGzjw recursively&lt;br /&gt;
pinned QmY965P9FuqBum5Ppy7QWUf1HBRVdqDbMFVDStBdjNnjqk recursively&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==bash script to pin recursive directory to IPFS==&lt;br /&gt;
&lt;br /&gt;
to use &amp;lt;code&amp;gt;script.sh /path/to/directory&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Check if directory argument is provided&lt;br /&gt;
if [ -z &amp;quot;$1&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Usage: script.sh /path/to/directory&amp;quot;&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Check if IPFS is installed&lt;br /&gt;
if ! command -v ipfs &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
  echo &amp;quot;IPFS is not installed. Please install it first.&amp;quot;&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Set directory path and filenames&lt;br /&gt;
dir_path=&amp;quot;$1&amp;quot;&lt;br /&gt;
ipfs_list=&amp;quot;/tmp/ipfs_$(date +&amp;#039;%Y%m%d%H%M%S&amp;#039;).list&amp;quot;&lt;br /&gt;
ipfs_hash=&amp;quot;/tmp/ipfs_$(date +&amp;#039;%Y%m%d%H%M%S&amp;#039;).hash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Add directory to IPFS and save output to temporary file&lt;br /&gt;
ipfs add --recursive &amp;quot;$dir_path&amp;quot; &amp;gt; &amp;quot;$ipfs_list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Extract IPFS hashes from list and save to temporary file&lt;br /&gt;
cat &amp;quot;$ipfs_list&amp;quot; | awk &amp;#039;{print $2}&amp;#039; &amp;gt; &amp;quot;$ipfs_hash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Pin each hash from temporary file&lt;br /&gt;
while read -r hash; do&lt;br /&gt;
  ipfs pin add &amp;quot;$hash&amp;quot;&lt;br /&gt;
done &amp;lt; &amp;quot;$ipfs_hash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Clean up temporary files&lt;br /&gt;
rm &amp;quot;$ipfs_list&amp;quot; &amp;quot;$ipfs_hash&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here&amp;#039;s how the script works:&lt;br /&gt;
&lt;br /&gt;
:    It first checks if a directory path argument is provided. If not, it prints the usage instructions and exits.&lt;br /&gt;
&lt;br /&gt;
:    It checks if IPFS is installed by checking if the ipfs command is available. If not, it prints an error message and exits.&lt;br /&gt;
&lt;br /&gt;
:    It sets the directory path and temporary filenames for the IPFS list and hash.&lt;br /&gt;
&lt;br /&gt;
:    It adds the specified directory to IPFS recursively using the ipfs add command and saves the output to the temporary IPFS list file.&lt;br /&gt;
&lt;br /&gt;
:    It extracts the IPFS hashes from the list file and saves them to the temporary IPFS hash file.&lt;br /&gt;
&lt;br /&gt;
:    It loops through each hash in the temporary hash file and pins it using the ipfs pin add command.&lt;br /&gt;
&lt;br /&gt;
:    Finally, it cleans up the temporary files.&lt;br /&gt;
&lt;br /&gt;
Note that this script will create new temporary files with a timestamp appended to the filename each time it is run. This is to avoid overwriting any existing temporary files with the same name.&lt;/div&gt;</summary>
		<author><name>Noob</name></author>
	</entry>
</feed>