diff --git a/_data/other_repo_list.csv b/_data/other_repo_list.csv index c6f7167..96652bd 100644 --- a/_data/other_repo_list.csv +++ b/_data/other_repo_list.csv @@ -1,5 +1,6 @@ repo_url http://gdatura24gtdy23lxd7ht3xzx6mi7mdlkabpvuefhrjn4t5jduviw5ad.onion/Mayx/mayx +http://git.dkforestseeaaq2dqz2uflmlsybvnq2irzn4ygyvu53oazyorednviid.onion/mayx/blog http://giteabolfdejtdzblkooalqei6jr67imiugmhtsh6ocw4hlj5a4q.b32.i2p/mayx/blog https://gitlab.lain.la/mayx/mayx.pages.lain.la https://gitea.moe/Mayx/mayx @@ -15,15 +16,11 @@ https://git.hana.im/mayx/blog https://git.tea-assets.com/mayx/blog https://repo.komhumana.org/mayx/blog https://git.minetest.land/Mayx/blog -https://git.dungeon.fi/mayx/blog http://ucarmesin.de:3000/mayx/blog http://101.34.211.172:3000/mayx/blog https://gitea.johannes-hegele.de/mayx/blog https://git.paulcolfer.ie/mayx/blog -https://git.goolink.org/mayx/blog https://git.octava.cool/mayx/blog -https://git.haowuan.top/mayx/blog -https://git.esc-plus.com/mayx/blog http://101.132.73.14:3000/mayx/blog http://117.72.78.89:3000/mayx/blog https://gitea.stormyhome.net/mayx/blog @@ -32,7 +29,6 @@ http://47.120.60.153:10880/mayx/blog http://zfselect.cn:3000/mayx/blog http://61.139.16.27:26684/mayx/blog https://git.dpark.io/mayx/blog -https://git.ykonkov.com/mayx/blog http://116.62.245.34:3000/mayx/blog https://git.johann-brauer.de/mayx/blog https://git.shaunmcpeck.com/mayx/blog @@ -44,7 +40,6 @@ https://git.tux.pizza/mayx/blog https://code.dsconce.space/mayx/blog https://git.anibilag.ru/mayx/blog https://git.lolpro11.me/mayx/blog -https://git.unglab.com/mayx/blog https://git.empirica.pro/mayx/blog http://47.115.203.168:3000/mayx/blog http://www.gitea.zhangc.top:3000/mayx/blog @@ -64,13 +59,10 @@ http://47.103.91.160:50903/mayx/blog https://mygit.iexercice.com/mayx/blog http://162.215.134.149:4000/mayx/blog http://durfee.mycrestron.com:3000/mayx/blog -https://git.casperxddddd.uk/mayx/blog -https://git.tanxhub.com/mayx/blog https://git.expiera.com/mayx/blog https://gitea.nongnghiepso.com/mayx/blog https://codes.tools.asitavsen.com/mayx/blog https://git.siin.space/mayx/blog -http://47.117.26.49:3000/mayx/blog http://122.116.190.233:3001/mayx/blog http://101.200.127.15:3000/mayx/blog http://50.19.111.193:3000/mayx/blog @@ -84,7 +76,6 @@ https://git.successkaoyan.com/mayx/blog https://gitea.bitshift.us/mayx/blog http://114.55.134.197:3000/mayx/blog http://139.129.25.251:3000/mayx/blog -http://git4edu.net/mayx/blog http://45.33.87.87/mayx/blog http://162.19.95.94:3000/mayx/blog https://git.rankenste.in/mayx/blog @@ -92,11 +83,9 @@ https://git.ghostpacket.org/mayx/blog https://git.catswords.net/mayx/blog http://168.126.28.36:3000/mayx/blog https://git.cloud.leonclassroom.com/mayx/blog -https://git.noxxxx.com/mayx/blog http://120.25.239.206:20080/mayx/blog https://registry.gametuoitho.vn/mayx/blog http://8.137.103.221:3000/mayx/blog -https://gitea.lutix.org/mayx/blog http://120.79.27.232:3000/mayx/blog http://wangbeibei.xyz:6002/mayx/blog http://43.224.227.219:3000/mayx/blog @@ -108,7 +97,6 @@ http://69.62.77.234:8888/mayx/blog https://gitea.bake.systems/mayx/blog http://8.134.15.96:3000/mayx/blog http://112.219.147.186:7000/mayx/blog -https://gitea.siriusun.com/mayx/blog http://47.119.38.109:3000/mayx/blog https://mysite.myvnc.com:3000/mayx/blog http://8.134.32.42:3000/mayx/blog @@ -120,12 +108,10 @@ http://106.14.174.241:3000/mayx/blog https://git.datdanguy.com/mayx/blog http://rack1.raincs.cc:20253/mayx/blog https://git.repo.in.net/mayx/blog -https://git.dihe.moe/mayx/blog http://47.113.231.74:3000/mayx/blog https://gitea.belanjaparts.com/mayx/blog http://185.208.225.190:3000/mayx/blog https://git.sudo-fhir.au/mayx/blog -https://git.odabasioglu.fr/mayx/blog https://git.warzin.com/mayx/blog https://git.burning.cloud/mayx/blog https://git.ihackfx.ru/mayx/blog @@ -134,7 +120,6 @@ https://git.flywithu.com/mayx/blog https://git.purplepanda.cc/mayx/blog https://gitea.freeyoursystem.de/mayx/blog https://git.moguyn.cn/mayx/blog -https://git.arachno.de/mayx/blog https://git.zhanzhi.life/mayx/blog http://121.36.255.50:3000/mayx/blog https://apoloz-git.md-desk.ru/mayx/blog @@ -151,20 +136,16 @@ http://103.231.8.120/mayx/blog https://gitea.jasonstolle.com/mayx/blog http://8.134.61.107:3000/mayx/blog http://47.107.88.161:3000/mayx/blog -https://git.ktk-pc.de/mayx/blog http://git.open-dev.ru/mayx/blog -https://gitea.zybc.online/mayx/blog https://git.votava.org/mayx/blog http://8.137.12.29:3000/mayx/blog https://gitea.irons.nz/mayx/blog https://gitea.madf12.com/mayx/blog http://8.134.104.234:3000/mayx/blog -http://45.45.238.98:3000/mayx/blog http://git.ugohous.com/mayx/blog https://git.vce.de/mayx/blog https://gitea.carmon.co.kr/mayx/blog http://142.171.47.170:3000/mayx/blog -https://git.aion.bi/mayx/blog https://git.werkraum-karlsruhe.org/mayx/blog http://111.231.146.230:8418/mayx/blog https://git.winscloud.net/mayx/blog @@ -173,14 +154,11 @@ http://188.245.99.186:3000/mayx/blog http://119.28.73.80:5000/mayx/blog http://194.60.231.252:3000/mayx/blog https://git.sleepingforest.co.uk/mayx/blog -https://git.chinamario.ru/mayx/blog https://gitea.wangyige.cn/mayx/blog http://47.103.223.114:8081/mayx/blog https://git.xdsite.fun/mayx/blog https://git.brb.homeip.net/mayx/blog https://an360.top/mayx/blog -https://git.agusandelnorte.gov.ph/mayx/blog -http://git.maiwd.cn:3000/mayx/blog https://gitea.chenxu2233.com/mayx/blog http://106.15.78.64:3000/mayx/blog http://hoenking.cn:3000/mayx/blog @@ -198,14 +176,12 @@ https://git2.ujin.tech/mayx/blog http://git.joypetsisland.com/mayx/blog http://111.119.244.185:3000/mayx/blog http://110.41.179.36:13000/mayx/blog -http://115.187.22.75:3000/mayx/blog https://git.chrisbeckstrom.com/mayx/blog https://dev.zaphar.net/mayx/blog https://git.moonwoou.com/mayx/blog https://git.tomlab.dev/mayx/blog http://182.92.109.202:8070/mayx/blog https://helx-artifacts-git.apps.renci.org/mayx/blog -https://git.ataber.pw/mayx/blog https://gogs.soyootech.com/mayx/blog http://94.130.182.154:3000/mayx/blog https://git.unicom.studio/mayx/blog @@ -226,7 +202,6 @@ http://139.196.201.231:3000/mayx/blog http://8.155.23.172:3000/mayx/blog https://git.influxfin.com/mayx/blog http://47.100.177.77:3000/mayx/blog -https://gitea.beonx.com/mayx/blog https://git.programar.io/mayx/blog http://219.157.255.213:25311/mayx/blog https://git.melvincarvalho.com/mayx/blog @@ -237,19 +212,16 @@ https://gitea.svc.obaa.cloud/mayx/blog https://git.infortek.tech/mayx/blog http://8.134.64.84:3000/mayx/blog http://test-www.writebug.com:3000/mayx/blog -https://git.thetoc.net/mayx/blog https://gitea.blubeacon.com/mayx/blog http://116.204.75.78:6180/mayx/blog https://git.powerdata.dk/mayx/blog https://git.ods-company.ru/mayx/blog http://109.228.48.121:8000/mayx/blog -https://git.libx.ir/mayx/blog https://git.u2.nu/mayx/blog https://bk-house.synology.me:3081/mayx/blog http://123.57.95.66:9000/mayx/blog http://git.yjmt191314.com/mayx/blog https://git.sparrowcomm.com/mayx/blog -https://gitea.chaos-it.pl/mayx/blog https://gitea.timurcelik.de/mayx/blog http://www.rubikscomplex.com:3000/mayx/blog https://git.hubhoo.com/mayx/blog @@ -262,12 +234,10 @@ https://saga.iao.ru:3043/mayx/blog https://git.sayndone.ru/mayx/blog http://47.113.118.108:3000/mayx/blog https://gitea.hintsight.com/mayx/blog -https://git.code-works.de/mayx/blog https://anzsco.co.nz/mayx/blog https://git.valami.giize.com/mayx/blog https://git.simbarbet.com/mayx/blog http://47.109.132.168:3000/mayx/blog -https://forge.death.id.au/mayx/blog https://git.saintdoggie.org/mayx/blog http://blackobelisk.xyz:3000/mayx/blog https://git.dushes.keenetic.pro/mayx/blog @@ -276,7 +246,6 @@ http://47.129.22.53:22345/mayx/blog https://git.tech.troyrc.com/mayx/blog http://git.zkyspace.top/mayx/blog http://47.107.62.152:3000/mayx/blog -https://git.openmonero.co/mayx/blog http://47.99.119.173:13000/mayx/blog https://git.outsidecontext.solutions/mayx/blog http://8.210.112.49:8860/mayx/blog @@ -293,8 +262,6 @@ https://git.ism-dev.net/mayx/blog http://sinzero.xyz:3000/mayx/blog https://gitea.b54.co/mayx/blog https://git.matevi.sh/mayx/blog -http://www.pcaidiy.cn:3000/mayx/blog -https://code.tiantongsl.com/mayx/blog http://213.35.118.215:60001/mayx/blog https://git.jasonpittman.com/mayx/blog https://gitea.shirom.me/mayx/blog @@ -305,14 +272,12 @@ http://123.56.193.182:3000/mayx/blog http://60.204.131.99:3000/mayx/blog http://femail.email:8418/mayx/blog http://47.93.56.66:8080/mayx/blog -https://git.hefzteam.ir/mayx/blog http://47.92.218.215:3000/mayx/blog http://167.172.7.198:8081/mayx/blog https://gitea.meetgu.ru/mayx/blog http://8.134.253.108:3000/mayx/blog https://git.patrich.se/mayx/blog http://116.236.50.103:8789/mayx/blog -https://gitnto.innovationcampus.ru/mayx/blog https://git.paulll.cc/mayx/blog https://gitea.alaindee.net/mayx/blog https://gitea.reimann.ee/mayx/blog @@ -325,7 +290,6 @@ http://8.134.144.137:3000/mayx/blog https://git.hxps.ru/mayx/blog https://gitea.ekjeong.synology.me/mayx/blog https://git.d4m13n.dev/mayx/blog -https://gitimpo.liara.run/mayx/blog https://git.needon.kr/mayx/blog https://git.4lcap.com/mayx/blog https://git.stit.tech/mayx/blog @@ -338,9 +302,7 @@ https://git.daoyoucloud.com/mayx/blog https://git.entryrise.com/mayx/blog https://repo.apps.odatahub.net/mayx/blog http://okbestgood.com:3000/mayx/blog -https://git.tallshim.ru/mayx/blog https://code.bitahub.com/mayx/blog -https://tomtop.ru/mayx/blog https://git.daneric.dev/mayx/blog http://git.guaiyun.com.cn/mayx/blog http://malingshu.site:6010/mayx/blog @@ -351,7 +313,6 @@ http://218.206.106.50:19901/mayx/blog https://g.6tm.es/mayx/blog https://git.slegeir.com/mayx/blog https://git.kimcblog.com/mayx/blog -http://www.mygamework.com:3000/mayx/blog https://gogs.m14xa.ru/mayx/blog https://git.minaev.su/mayx/blog https://git.0fs.ru/mayx/blog @@ -365,8 +326,6 @@ http://8.134.206.4:9001/mayx/blog https://git.huwhy.cn/mayx/blog http://194.67.86.160:3100/mayx/blog http://47.101.58.33:3000/mayx/blog -https://git.johnen.biz/mayx/blog -https://git.unitsoft.io/mayx/blog https://gitea.synapsetec.cn/mayx/blog http://47.121.207.193:3000/mayx/blog http://220.132.16.87:3000/mayx/blog @@ -389,7 +348,6 @@ http://120.26.116.243:3000/mayx/blog http://120.26.46.180:3000/mayx/blog http://8.222.156.46:3000/mayx/blog http://123.57.16.111:3000/mayx/blog -https://git.andy.lgbt/mayx/blog http://115.159.107.117:3000/mayx/blog http://47.99.98.98:9000/mayx/blog http://116.62.115.84:3000/mayx/blog @@ -420,7 +378,6 @@ https://got.joshuakatz.me/mayx/blog https://git-web.phomecoming.com/mayx/blog http://121.36.37.70:15501/mayx/blog http://187.216.152.151:9999/mayx/blog -https://coderepos.mticas.com/mayx/blog http://116.63.173.179:8001/mayx/blog https://git.iop.plus/mayx/blog http://47.114.82.162:3000/mayx/blog @@ -472,7 +429,6 @@ http://47.109.95.73:3000/mayx/blog http://47.104.196.63:8418/mayx/blog https://git.mkubiak.com/mayx/blog http://38.22.90.74:3000/mayx/blog -https://git.asdf.cafe/mayx/blog http://8.133.240.249:3456/mayx/blog https://git.mista.ru/mayx/blog http://34.102.70.200:3000/mayx/blog @@ -486,7 +442,6 @@ https://giteas.fullmooncyberworks.com/mayx/blog http://47.112.118.149:10082/mayx/blog https://gitea.jobiglo.com/mayx/blog https://gitea.rpg-librarium.de/mayx/blog -https://git.juici.ly/mayx/blog http://begild.top:8418/mayx/blog http://58.221.13.198:30010/mayx/blog https://gitea.kaz62.ru/mayx/blog @@ -503,17 +458,14 @@ https://gitea.theaken.com/mayx/blog https://git.ja-schwarz.de/mayx/blog https://shanewan.cn:30000/mayx/blog https://git.xemo-net.de/mayx/blog -https://git.bigtravelchat.com/mayx/blog https://git.23cm.cn/mayx/blog https://gitea.oio.cat/mayx/blog https://git.rokiy.com/mayx/blog -https://git.w2tj.net/mayx/blog http://59.110.17.86:3000/mayx/blog https://git.karma-riuk.com/mayx/blog https://git.saidomar.fr/mayx/blog https://gitea.pnkx.top:8/mayx/blog http://gitea.fcunb.cn:10083/mayx/blog -http://mengshang.xyz:8418/mayx/blog http://47.107.152.87:3000/mayx/blog https://git.ligmatiktok.com/mayx/blog http://106.15.58.155:3333/mayx/blog @@ -529,11 +481,8 @@ https://git.gupaoedu.cn/mayx/blog http://60.205.233.184:3010/mayx/blog http://121.43.49.226/mayx/blog https://git.ricecakecat.com/mayx/blog -https://git.mahaines.com/mayx/blog -http://gitee.mrsang.cfd/mayx/blog https://gittea.biveki.ru/mayx/blog https://git.7milch.com/mayx/blog -https://gitea.marvinronk.com/mayx/blog https://gitea.zmanplex.com/mayx/blog https://git.hexdive.com/mayx/blog http://139.224.250.209:3000/mayx/blog @@ -541,17 +490,14 @@ https://vcc808.site/mayx/blog https://git.sitenevis.com/mayx/blog https://git.nightime.org/mayx/blog https://dreamplacesai.de/mayx/blog -http://repo.bpo.technology/mayx/blog https://git.soy.dog/mayx/blog https://bachner.synology.me:10002/mayx/blog https://git.cool2645.com/mayx/blog -https://gitea.codedbycaleb.com/mayx/blog https://gitea.jludwig.net/mayx/blog https://git.z1.mk/mayx/blog http://185.87.111.46:3000/mayx/blog http://suncheng.asia:14200/mayx/blog http://1.94.13.224:9080/mayx/blog -https://git.manabo.org/mayx/blog https://auric-org.org/mayx/blog https://git.git-happens.de/mayx/blog https://gitea.seanomad.ru/mayx/blog @@ -559,7 +505,6 @@ http://47.104.241.192:19999/mayx/blog http://47.105.61.58:3000/mayx/blog https://git.memosnag.com/mayx/blog http://tdss.website:801/mayx/blog -https://gitea.wenpang.asia/mayx/blog http://101.35.183.241/mayx/blog https://gitea.quiztimes.nl/mayx/blog http://106.14.189.125:3000/mayx/blog @@ -581,12 +526,10 @@ http://111.198.4.69:8092/mayx/blog https://git.lakaweb.com/mayx/blog https://git.kitti.ac.th/mayx/blog http://106.15.233.223:3001/mayx/blog -http://giteastaraire.vip.cpolar.cn/mayx/blog https://forge.coreymclark.com/mayx/blog http://ems.iclematis.com:30000/mayx/blog https://git.micahmoore.io/mayx/blog https://git.zlyum.com/mayx/blog -https://git.aelhost.com/mayx/blog https://schokigeschmack.de/mayx/blog https://git.anatid.net/mayx/blog https://catsdev.com/mayx/blog @@ -609,22 +552,18 @@ https://git.galaxylabs.ca/mayx/blog https://gitlab.n8n-store.xyz/mayx/blog https://forgejo.win/mayx/blog https://gitea.katiethe.dev/mayx/blog -https://gitea.ai-demo.duckdns.org/mayx/blog https://git0.zpqrtbnk.net/mayx/blog http://159.203.33.179:3000/mayx/blog http://117.72.114.197:3000/mayx/blog http://192.210.186.179:20051/mayx/blog https://git.ashcloud.com/mayx/blog http://us2.fornoone.top:3000/mayx/blog -https://git.louislabs.com/mayx/blog -https://ste-van.de/mayx/blog https://git.novaa.xyz/mayx/blog https://gitea.noname-studios.es/mayx/blog http://101.46.208.93:3000/mayx/blog http://45.93.137.91:3000/mayx/blog https://git.smartdev.cz/mayx/blog http://23.94.57.60:3000/mayx/blog -http://120.26.116.145:3000/mayx/blog https://git.atomos.io/mayx/blog https://git.tylantyson.com/mayx/blog https://watch.mommys.plumbing/mayx/blog @@ -632,8 +571,6 @@ https://devkona.net/mayx/blog https://gitea.avixc-nas.myds.me/mayx/blog http://www.ggafrik.site/mayx/blog https://gitea.chaopi.dev/mayx/blog -https://git.jonasjones.dev/mayx/blog -https://gitea.kaidodev.org/mayx/blog http://118.196.23.96:1866/mayx/blog http://47.119.120.128:8085/mayx/blog http://sjhome.cloud:3000/mayx/blog @@ -644,15 +581,12 @@ http://8.140.250.85:3000/mayx/blog http://8.134.11.35:3000/mayx/blog https://dev.ilink-app.com/mayx/blog https://git.ctx.dev/mayx/blog -https://w2k.sh/mayx/blog http://82.157.205.190:3000/mayx/blog https://nas.szwyll.com:3000/mayx/blog http://baylan.la.asu.edu:3000/mayx/blog -http://8.155.35.51:3000/mayx/blog https://git.koppa.pro/mayx/blog http://188.120.243.108:3000/mayx/blog http://202.65.194.19:3000/mayx/blog -https://gitea.eggtech.net/mayx/blog http://47.101.60.131:10082/mayx/blog http://8.148.234.146:3001/mayx/blog https://git.ypepin.com/mayx/blog @@ -664,7 +598,6 @@ http://git.huangwc.com/mayx/blog https://gitea.xala.dev/mayx/blog http://101.201.34.43:3000/mayx/blog https://git.ixu.me/mayx/blog -http://178.18.255.136:3000/mayx/blog http://118.89.124.175:3000/mayx/blog https://git.gloje-rinchen-dorjee-rinpoche-buddhist-monastery.org/mayx/blog https://git.pxlbuzzard.com/mayx/blog @@ -675,7 +608,6 @@ http://git.uhfdemo.com/mayx/blog http://47.108.217.75:3000/mayx/blog https://git.jakubzabski.pl/mayx/blog https://gitea.forgeandflowsolutions.com/mayx/blog -https://gitea.ybxsddb.cc/mayx/blog https://www.git.omezaldama.xyz/mayx/blog https://vila.go.ro/mayx/blog https://git.olyntec.com/mayx/blog @@ -686,11 +618,8 @@ http://139.129.21.166:3000/mayx/blog http://111.231.240.168:9082/mayx/blog https://git.afonsosoares.com/mayx/blog https://gitea.nswteam.net/mayx/blog -https://git.toad.city/mayx/blog -https://git.shawncarter.co.uk/mayx/blog http://209.141.47.52:3000/mayx/blog https://git.apfern.com/mayx/blog -http://120.46.213.136:9528/mayx/blog http://120.26.115.132:3000/mayx/blog http://47.103.155.22:3000/mayx/blog http://dapainas.asia:5990/mayx/blog @@ -702,7 +631,6 @@ http://60.204.156.211:3000/mayx/blog http://youneed.top:10014/mayx/blog https://gitea.abra.me/mayx/blog https://git.yukaige.com/mayx/blog -http://www.liubai.site:3000/mayx/blog http://nas.bi1kbu.com:8418/mayx/blog http://123.56.74.235:3000/mayx/blog http://15.204.210.141:30121/mayx/blog @@ -713,14 +641,12 @@ http://xapple.ru:3000/mayx/blog https://git.teygaming.com/mayx/blog https://git.alhsk.top/mayx/blog http://8.138.4.170:8980/mayx/blog -https://git.fishestlife.com/mayx/blog http://185.128.138.246:3000/mayx/blog http://210.211.116.85:3000/mayx/blog http://osztromok.com:3164/mayx/blog http://175.209.53.134:3030/mayx/blog http://87.228.74.88:3000/mayx/blog http://118.163.190.249:3000/mayx/blog -https://git.farmeris.sk/mayx/blog http://39.107.226.169:3000/mayx/blog https://git.ueda.sk/mayx/blog http://113.45.76.155:3000/mayx/blog @@ -731,10 +657,7 @@ https://git.server.isalem.net/mayx/blog http://47.103.100.52:3000/mayx/blog https://git.cos777nnn777.win/mayx/blog http://5.189.140.23:8080/mayx/blog -https://gitea.xy88.fun/mayx/blog http://121.37.47.20:3000/mayx/blog -https://code.metapipe.net/mayx/blog -https://gitea.alittlejag.uk/mayx/blog https://git.antropix.dev/mayx/blog http://15.237.198.144/mayx/blog https://gitea.soap.wf/mayx/blog @@ -747,16 +670,13 @@ https://xgit.tsuimg.top/mayx/blog http://123.60.156.158:13000/mayx/blog http://57.129.94.190:3000/mayx/blog https://gitea.micro-stack.org/mayx/blog -https://vapor.solarvoid.com/mayx/blog http://101.132.160.67:3000/mayx/blog https://gitea.temp.brentgruber.com/mayx/blog -https://www.naepho.dev/mayx/blog https://www.know-how.store/mayx/blog http://47.102.147.170:3050/mayx/blog https://git.borg.unak.is/mayx/blog http://209.38.235.254:3000/mayx/blog http://52.66.204.217:3001/mayx/blog -http://123.60.153.169:3006/mayx/blog https://pdje.uk/mayx/blog http://172.236.250.154:3000/mayx/blog http://54.198.134.152:3000/mayx/blog @@ -771,7 +691,6 @@ http://8.138.187.132:3000/mayx/blog https://gitea.codeathome.ovh/mayx/blog http://117.72.15.187:3000/mayx/blog http://159.223.54.247:3030/mayx/blog -https://git.jaytux.com/mayx/blog http://81.70.30.91:3000/mayx/blog http://47.98.105.248:3000/mayx/blog http://218.84.152.14:65001/mayx/blog @@ -782,7 +701,6 @@ http://8.138.100.115:3000/mayx/blog https://git.soupcafe.cc/mayx/blog https://git.mwapp.com.br/mayx/blog http://yidaima.cn:6008/mayx/blog -https://git.happytanuki.kr/mayx/blog http://213.199.46.54:3001/mayx/blog http://47.94.156.73:3000/mayx/blog http://185.126.237.57:3000/mayx/blog @@ -790,11 +708,9 @@ http://47.97.50.232:3000/mayx/blog http://106.54.211.95:3000/mayx/blog http://210.245.20.73:3333/mayx/blog http://43.248.97.109:3000/mayx/blog -http://git.dhitechnical.com/mayx/blog http://113.207.86.104:3080/mayx/blog http://down.luanhailiang.cn:9000/mayx/blog http://39.96.195.72:10082/mayx/blog -http://8.140.60.82:3000/mayx/blog https://gitea.klopfenstein.org/mayx/blog http://8.148.24.160:3000/mayx/blog https://gitea.hailstorm.gay/mayx/blog @@ -805,16 +721,12 @@ https://git.cymnb.com/mayx/blog http://8.163.31.138:3000/mayx/blog http://47.108.27.137:3000/mayx/blog http://182.92.9.236:3000/mayx/blog -http://47.96.98.191:9980/mayx/blog http://172.172.102.93:3000/mayx/blog http://101.132.255.70:3000/mayx/blog http://139.196.179.195:3000/mayx/blog http://115.120.245.164:3000/mayx/blog http://120.27.19.58:30000/mayx/blog -https://git.devnul.cz/mayx/blog https://git-virtual.ru/mayx/blog -http://47.122.125.40:16867/mayx/blog -https://git.infinitix.kr/mayx/blog https://gitea.suchodupin.com/mayx/blog http://8.134.116.217:3000/mayx/blog http://117.72.219.18:6000/mayx/blog @@ -823,7 +735,6 @@ https://git.rcdiamondgh.cc/mayx/blog http://35.194.179.90:3000/mayx/blog http://188.245.173.247:3080/mayx/blog http://8.153.14.94:61308/mayx/blog -http://git.liubeiting.cn:8000/mayx/blog http://66.179.208.56:3001/mayx/blog http://59.110.63.79:13000/mayx/blog http://59.110.63.80:3000/mayx/blog @@ -833,7 +744,6 @@ http://211.22.221.188:3000/mayx/blog https://lunarvow.top:12494/mayx/blog http://223.108.157.174:3000/mayx/blog http://120.24.249.56/mayx/blog -https://git.davidwebgt.com/mayx/blog http://47.100.90.152:3000/mayx/blog http://120.24.251.176:30000/mayx/blog http://121.196.237.108:3000/mayx/blog @@ -854,7 +764,6 @@ http://47.99.60.81:10082/mayx/blog http://120.211.66.170:8418/mayx/blog http://47.242.181.61:3333/mayx/blog http://187.189.244.23:3000/mayx/blog -http://123.60.98.226:3000/mayx/blog http://58.176.21.43:9004/mayx/blog https://gitea.vilcap.com/mayx/blog https://git.2b8.org/mayx/blog @@ -862,7 +771,6 @@ http://8.137.94.229:3000/mayx/blog http://121.196.245.62/mayx/blog http://47.92.35.224:3000/mayx/blog http://47.102.209.69:53000/mayx/blog -https://axcl.duckdns.org:8091/mayx/blog http://116.205.97.109:3000/mayx/blog https://gitea.ysme.top/mayx/blog http://8.140.242.230:3000/mayx/blog @@ -875,16 +783,13 @@ http://113.46.142.74:3000/mayx/blog http://47.100.0.167:3000/mayx/blog http://www.koelndom.cn:13030/mayx/blog http://209.127.59.74:3000/mayx/blog -http://git.vimer.top:4000/mayx/blog http://111.15.179.73:3000/mayx/blog http://47.113.119.107:3000/mayx/blog -https://git.tuongthoi.website/mayx/blog https://git.dotb.cloud/mayx/blog http://178.205.99.36:3000/mayx/blog https://git.bigdalang.com/mayx/blog https://gitea.augeo.dev/mayx/blog https://demo.stam.kr/mayx/blog -https://g.szqingling.cn/mayx/blog http://120.46.23.215:3000/mayx/blog http://47.108.75.198:3000/mayx/blog http://121.41.2.71:3000/mayx/blog @@ -892,14 +797,11 @@ http://47.114.94.196:8030/mayx/blog https://sithcom.de/mayx/blog http://156.238.243.144:3000/mayx/blog http://8.138.242.82:8888/mayx/blog -http://37.60.245.108/mayx/blog http://110.41.177.80:5000/mayx/blog https://gitea.dsmaster.myds.me/mayx/blog -https://git.denco.store/mayx/blog http://intechrnd.iptime.org:3000/mayx/blog https://gitea.primecontrols-dev.com/mayx/blog http://47.104.160.69:3000/mayx/blog -http://157.66.191.31:3000/mayx/blog http://39.104.61.219:3000/mayx/blog http://www.scserverddns.top:13000/mayx/blog http://156.255.1.229:3000/mayx/blog @@ -909,3 +811,33 @@ https://dev.kirill-vorotov.com/mayx/blog https://gitea.va-comer.net/mayx/blog https://git.lucas-michel.fr/mayx/blog http://60.205.162.59:3000/mayx/blog +https://git.imvictor.tech:2/mayx/blog +https://git.pwcedge-sbs-innov-lab.com/mayx/blog +https://git.beitzah.net/mayx/blog +http://47.112.137.193:3000/mayx/blog +https://www.cadquos.dev/mayx/blog +https://gitea.malin.onl/mayx/blog +http://58.38.123.148:3176/mayx/blog +http://docker.clhero.fun:3000/mayx/blog +http://42.193.251.215:3000/mayx/blog +http://kpro.shanghaiopen.org.cn:8005/mayx/blog +https://bdgit.educoder.net/mayx/blog +http://77.104.76.44/mayx/blog +http://101.42.172.53:27007/mayx/blog +http://e19510c831.iok.la/mayx/blog +https://gitea.clintmasden.duckdns.org/mayx/blog +http://gitea.liaozhuangkeji.com/mayx/blog +https://www.nxgit.xyz/mayx/blog +http://220.112.1.148:7166/mayx/blog +http://119.45.49.212:3000/mayx/blog +https://git.synapsenet.net/mayx/blog +https://gitea.kdlsvps.top/mayx/blog +http://deiniusoft.com:3000/mayx/blog +https://code.antopie.org/mayx/blog +http://120.197.24.77:3000/mayx/blog +http://c6h5gp.top:3000/mayx/blog +https://git.serenetia.com/mayx/blog +https://tm-jikayo.com/mayx/blog +https://vcs.cozydsp.space/mayx/blog +https://stephens.cc/mayx/blog +https://git.aoun.ltd/mayx/blog diff --git a/_posts/2025-12-01-linux.md b/_posts/2025-12-01-linux.md new file mode 100644 index 0000000..80e2a22 --- /dev/null +++ b/_posts/2025-12-01-linux.md @@ -0,0 +1,38 @@ +--- +layout: post +title: 在浏览器中运行Linux的各种方法 +tags: [浏览器, Linux, 虚拟机, WASM] +--- + + 浏览器已经无所不能了! + +# 起因 + 前段时间跟网友交流时,有人展示了他博客里的一个Linux终端模拟项目:[jsnix](https://github.com/Erzbir/jsnix),看起来挺有意思的,里面甚至还藏了一个CTF。不过我感觉他这个终端和博客本身并没有真正联动起来,本质上只是一个模拟了Linux Shell行为的交互界面。除此之外我还发现了另一个风格类似的[个人主页](https://github.com/Luyoung0001/myWebsite),它虽然也走了终端风格,但功能更简单,还原度也不算高。不过它至少和博客内容做了一些基础联动——尽管目前也只是做到列出文章这种程度😂,当然有这类功能的博客应该也不少,只是我发现的不太多……于是我就想,不如我也给自己的博客加一个类似的“命令行访问”功能,应该会很有趣。当然如果真要做的话,我肯定不会满足于只实现几个模拟指令——既然要做,就要追求真实感,至少得在浏览器上运行真实的Linux终端,才不会让人觉得出戏吧😋。 + +# 在浏览器中运行Linux +## 虚拟机方案 +### 纯JS虚拟机 + 要说到在浏览器上运行Linux,最先想到的应该就是[Fabrice Bellard](https://bellard.org)大神写的[JSLinux](https://bellard.org/jslinux/)吧,这可能是第一个在浏览器中实现的虚拟机(毕竟是最强虚拟机QEMU的作者编写的)。现在他的个人主页中展示的这个版本是WASM版本,而他最早写的是纯JS实现的。那个JS实现的版本现在在GitHub上有一个[去混淆的版本](https://github.com/levskaya/jslinux-deobfuscated)可以用作学习和研究,于是我顺手Fork了一份在GitHub Pages上部署作为[演示](http://mabbs.github.io/jslinux/)。 + 作为纯JS实现的x86虚拟机,性能估计是最差的,但相应的兼容性也最好,在Bellard当年写JSLinux的时候,还没有WASM这种东西呢,所以即使是在不支持WASM的IE11中,也可以正常运行。假如我想把它作为终端用在我的博客上,似乎也是个不错的选择,即使我完全看不懂代码,不知道如何实现JS和虚拟机的通信,它也预留了一个剪贴板设备,可以让我轻松地做到类似的事情,比如我在里面写个Bash脚本,通过它和外面的JS脚本联动来读取我的文章列表和内容,那也挺不错。 + 当然Bellard用纯JS编写虚拟机也不是独一份,他实现了x86的虚拟机,相应的也有人用纯JS实现了RISC-V的虚拟机,比如[ANGEL](https://github.com/riscv-software-src/riscv-angel),看起来挺不错,所以同样也顺手[搭了一份](https://mabbs.github.io/riscv-angel/)。只不过它似乎用了一些更先进的语法,至少IE11上不能运行。 + 另外还有一个比较知名的项目,叫做[jor1k](https://github.com/s-macke/jor1k),它模拟的是OpenRISC架构。只是这个架构目前已经过时,基本上没什么人用了,不过这里面还内置了几个演示的小游戏,看起来还挺有意思。 + 除了这些之外,其实能在浏览器上运行的Linux也不一定是个网页,有一个叫做[LinuxPDF](https://github.com/ading2210/linuxpdf)的项目可以让Linux运行在PDF中,它的原理和JSLinux差不多,所以需要PDF阅读器支持JS,看它的介绍貌似只能在基于Chromium内核的浏览器中运行,而且因为安全问题在PDF中有很多功能不能用,所以它的速度甚至比JSLinux还要慢,功能还很少,因此它基本上只是个PoC,没什么太大的意义。 +### WASM虚拟机 + 那还有别的方案吗?既然Bellard都选择放弃纯JS的JSLinux而选择了WASM,显然还有其他类似的项目,比如[v86](https://github.com/copy/v86),这也是一个能在浏览器中运行的x86虚拟机,不过因为使用了WASM和JIT技术,所以效率要比纯JS的JSLinux高得多。另外作为虚拟机,自然是不止能运行Linux,其他的系统也能运行,在示例中除了Linux之外还有DOS和Windows之类的系统,功能还挺强大,如果能自己做个系统镜像在博客里运行,似乎也是不错的选择。 + 另外还有一个相对比较知名的叫[WebVM](https://github.com/leaningtech/webvm),从效果上来说和v86几乎没有区别,同样使用了WASM和JIT技术,也都只支持32位x86,然而它的虚拟化引擎CheerpX是闭源产品,既然和v86都拉不开差距,不知道是谁给他们的信心把它作为闭源产品😅。不过看它的说明文档,其相比于v86的主要区别是实现了Linux系统调用,考虑到它不能运行其他操作系统,而且Linux内核也不能更换,那我想它可能是类似于WSL1的那种实现方案,也许性能上会比v86好一些吧……只不过毕竟是闭源产品,不太清楚具体实现了。 + 既然纯JS有RISC-V的虚拟机,WASM当然也有,比如[WebCM](https://github.com/edubart/webcm)。这个项目相比于其他的项目有个不太一样的地方,它把虚拟机、内核以及镜像打包成了一个单独的WASM文件……只是这样感觉并没有什么好处吧,改起来更加复杂了。 + 以上这些虚拟机方案各有不同,但是想做一个自己的镜像相对来说还是有点困难,于是我又发现了另一个项目:[container2wasm](https://github.com/container2wasm/container2wasm),它可以让一个Docker镜像在浏览器中运行,当然实际实现其实和Docker并没有什么关系,本质还是虚拟机,只是制作镜像的时候可以直接用Docker镜像,方便了不少,但Docker镜像一般也都很大,所以第一次加载可能要下载很长时间。另外它还有一个优势,可以使用[Bochs](https://bochs.sourceforge.io/)运行x86_64的镜像,不像v86和WebVM只能模拟32位的x86(虽然Bochs的运行效率可能会差一些),而且可以使用WASI直接访问网络,不像以上几个项目如果需要访问网络需要用到中继服务。当然访问网络这个还是要受浏览器本身的跨域策略限制。总之从项目本身来说感觉也算是相当成熟了,尤其能用Docker镜像的话……我甚至可以考虑直接用[镜像](https://hub.docker.com/r/unmayx/mabbs)在线演示我曾经的[Mabbs](https://github.com/Mabbs/Mabbs.Project)项目😋。 +## 纯WASM方案 + 其实想要在浏览器中运行Linux也不一定非得要用虚拟机,用虚拟机相当于是把其他指令集的机器码翻译为WASM,然后浏览器还得再翻译成宿主机CPU支持的指令集,然而WASM本身其实也算是一种指令集,各种编译型语言编写的程序也能编译出WASM的产物,比如[FFmpeg](https://github.com/ffmpegwasm/ffmpeg.wasm)。所以Linux内核也完全可以被编译成WASM,正好前段时间我看新闻说[Joel Severin](https://github.com/joelseverin)做了这么一个[项目](https://github.com/joelseverin/linux-wasm),对Linux内核做了一些修改使其可以被编译为WASM程序,我试了一下,貌似在Safari浏览器中不能正常工作……Chrome浏览器倒是没问题,不过即使这样用起来BUG也很多,随便执行几条命令就会冻结,体验不是很好。 + 沿着这个项目,我又找到一个由[Thomas Stokes](https://github.com/tombl)制作的[项目](https://github.com/tombl/linux),和Joel的项目差不多,但我测了一下可以在Safari上运行,感觉这个项目更完善,不过之前那个项目上了新闻,所以⭐️数比这个更高😂。 + 于是我把它复制了一份,在我的GitHub Pages上[部署](https://mabbs.github.io/linux/)了,但直接用仓库中的源代码会显示“Error: not cross origin isolated”,然而在Thomas自己部署的网站中可以正常打开,我看了一眼貌似是因为在GitHub Pages中没有[COOP和COEP响应头](https://web.dev/articles/coop-coep)导致的。Linux作为多任务操作系统来说,当然要运行多个进程,而Linux要管理它们就需要跨线程(Web Worker)读取内存的能力,所以用到了SharedArrayBuffer对象。不过由于CPU曾经出过“幽灵”漏洞,导致现代浏览器默认禁止使用SharedArrayBuffer对象,除非在服务器中配置COOP和COEP响应头才可以用,但是Joel的项目也是在GitHub Pages上运行的啊,为什么可以正常运行?看了源代码后才发现原来可以[用Service Worker作为反向代理](/2025/08/01/sw-proxy.html)来给请求的资源加上响应头,他使用的是[coi-serviceworker](https://github.com/gzuidhof/coi-serviceworker)这个项目,所以我也给我部署的代码中加上了这个脚本,总算是解决了这个问题。 + 部署好这个项目之后我试用了几下,虽然有些操作仍然会导致系统冻结,但相比Joel的版本来说已经好多了。很遗憾的是目前这个WASM Linux还不能和外界通信,所以作用不是很大,另外如果想在里面运行其他二进制程序还是相当困难,首先在WASM中不存在内存管理单元(MMU),不能实现隔离和分页的功能,另外以WASM作为指令集的环境下编译的产物也得是WASM,所以目前来说想用它做点什么还是不太合适。 + 以上的这两个将Linux内核编译为WASM的方案其实相当于给内核打补丁,然后把浏览器看作是虚拟机来运行,有点像Xen,不过还有一种让Linux原生运行在WASM的[项目](https://github.com/okuoku/wasmlinux-project),它将[Linux kernel library](https://github.com/lkl/linux)编译为了WASM。那么什么是LKL?简单来说它有点像Wine,就和我之前所说的[OS模拟器](/2024/12/08/simulator.html)差不多,可以提供一个环境,让程序以为自己在Linux下运行,所以说它和之前的实现有一些不一样,它不存在内核模式,更像是一个普通的程序,而不是系统了。 + 不过这个项目的体验也比较一般,它无论做什么都得按两次回车,看说明的意思貌似是因为没有实现异步信号传递,所以要手动打断`read`函数,而且也经常莫名其妙卡住,总体体验不如Thomas的项目。 +## 模仿的Linux + 其实如果只是想做到和Linux类似的功能,也有这样的项目,比如[WebContainers](https://github.com/stackblitz/webcontainer-core),它没有运行Linux系统,但是模拟了一个环境,可以在浏览器中运行Node.js以及Python之类的脚本,而且让脚本以为自己在Linux中运行,除此之外它还能用Service Worker把环境中运行的端口映射给浏览器,可以算是真的把服务端跑在浏览器上了。这个技术还挺高级,不过想想也挺合理,毕竟有WASI,直接编译为WASM的程序也不需要操作系统就能运行,所以用WASM去运行Linux本来就有点多此一举了😂。不过很遗憾的是WebContainers也不是开源软件,要使用它只能引入StackBlitz的资源,而且全网完全没有开源的替代品……也许在浏览器上进行开发本来就是个伪需求,所以没什么人实现吧。 + 当然如果只是实现和WebContainers类似的功能,[JupyterLite](https://github.com/jupyterlite/jupyterlite)也可以实现,它可以在浏览器中像使用本地JupyterLab那样运行JS和Python,还能用Matplotlib、Numpy、Pandas进行数据处理,功能可以说非常强大,而且还是开源软件。只不过它没有模拟操作系统的环境,所以不能运行Node.js项目,也不能提供终端,所以不太符合我想要的效果…… + +# 总结 + 总的来说,如果想要在博客上搞Linux终端,目前来看似乎虚拟机方案会更靠谱一些,虽然相对来说效率可能比较低,但毕竟目前WASM方案的可靠性还是不够,而且考虑到还需要配置额外的响应头,感觉有点麻烦,当然我觉得WASM还是算未来可期的,如果成熟的话肯定还是比虚拟机要更好一些,毕竟没有转译性能肯定要好不少。至于WebContainers这种方案……等什么时候有开源替代再考虑吧,需要依赖其他服务感觉不够可靠。只是也许我的想法只需要模拟一个合适的文件系统,然后给WASM版的Busybox加个终端就够了?不过这样感觉Bug会更多😂。 + 至于打算什么时候给博客加上这个功能?应该也是未来可期吧😝,目前还没什么好的思路,仅仅是分享一下在浏览器中运行Linux的各种方法。 \ No newline at end of file