9 Commits

Author SHA1 Message Date
63ee80ae98 Add .drone.yml
Some checks failed
continuous-integration/drone/push Build is failing
2021-04-14 00:14:04 -05:00
6ca71e0ff7 Add email link to menu bar 2021-04-12 22:22:19 -05:00
ae59d03f81 Correct 403 from unauthorized to forbidden 2021-04-11 14:28:30 -05:00
83f780a8b4 Add new comment system post 2021-04-11 00:43:32 -05:00
a235ec2151 Add isso comment section
Current issues:
- previewing a comment when making it is text on white bg
2021-04-10 21:55:51 -05:00
054a2258f5 Update searx instance URL in links page 2021-04-01 22:50:32 -05:00
66833ca13d Add privileged ports post 2021-03-28 21:29:52 -05:00
9378412a09 Add guide tag 2021-03-27 18:39:12 -05:00
ef2274521e Add tutorial tag 2021-03-27 18:38:29 -05:00
9 changed files with 420 additions and 9 deletions

24
.drone.yml Normal file
View File

@ -0,0 +1,24 @@
---
kind: pipeline
type: docker
name: Deploy to bbaovanc.com
steps:
- name: Build site
image: mapitman/docker-hugo
commands:
- hugo version
- hugo --minify
- name: Upload files
image: appleboy/drone-scp
aettings:
host: bbaovanc.com
port: 2222
username: droneci
key:
from_secret: SSH_KEY
target: /var/www/bbaovanc/blog
rm: true
source:
- public/*

View File

@ -16,7 +16,7 @@ enableGitInfo = true
themeColor = "blue" themeColor = "blue"
# if you set this to 0, only submenu trigger will be visible # if you set this to 0, only submenu trigger will be visible
showMenuItems = 5 showMenuItems = 6
# show selector to switch language # show selector to switch language
showLanguageSelector = false showLanguageSelector = false
@ -86,14 +86,20 @@ enableGitInfo = true
url = "/posts/index.xml" url = "/posts/index.xml"
weight = 30 weight = 30
[[languages.en.menu.main]]
identifier = "email-me"
name = "Email Me"
url = "mailto:contact@bbaovanc.com"
weight = 40
[[languages.en.menu.main]] [[languages.en.menu.main]]
identifier = "main-website" identifier = "main-website"
name = "Main Website" name = "Main Website"
url = "https://bbaovanc.com/" url = "https://bbaovanc.com/"
weight = 40 weight = 50
[[languages.en.menu.main]] [[languages.en.menu.main]]
identifier = "source-code" identifier = "source-code"
name = "Source Code" name = "Source Code"
url = "https://git.bbaovanc.com/bbaovanc.com/blog" url = "https://git.bbaovanc.com/bbaovanc.com/blog"
weight = 50 weight = 60

View File

@ -14,8 +14,8 @@ toc: true
- [Main Site](https://bbaovanc.com/) - [Main Site](https://bbaovanc.com/)
- [Blog](https://bbaovanc.com/blog/) - [Blog](https://bbaovanc.com/blog/)
- [Status Page](https://status.bbaovanc.com/) - [Status Page](https://status.bbaovanc.com/)
- [Searx Instance](https://searx.bbaovanc.com/) - - [Searx Instance](https://search.bbaovanc.com/) -
[source code](https://github.com/BBaoVanC/searx.bbaovanc.com) [source code](https://github.com/BBaoVanC/searx)
- [Gitea Instance](https://git.bbaovanc.com/) - [Gitea Instance](https://git.bbaovanc.com/)
## My Software ## My Software

View File

@ -0,0 +1,68 @@
+++
title = "Allow Non Root Processes to Bind to Privileged Ports"
date = "2021-03-28T20:03:16-05:00"
author = "bbaovanc"
tags = ["guide", "linux", "systemd"]
keywords = ["linux", "privileged", "ports", "tutorial", "guide", "gitea",
"systemd"]
description = """
In Linux, processes cannot bind to privileged ports (<=1024) unless they are
running as root. Here's how to allow any process to bind to privileged ports.
"""
showFullContent = false
toc = true
+++
## Introduction
In Linux, processes cannot bind to privileged ports (<=1024) unless they are
running as root. I learned about this when I was trying to add SSH cloning to my
[Gitea](https://gitea.io) instance. This can be bypassed by giving
`CAP_NET_BIND_SERVICE` capabilities to either the systemd service, or the
executable itself.
## Giving `CAP_NET_BIND_SERVICE` capabilities
### Using systemd (preferred)
The best way is to tell systemd to give `CAP_NET_BIND_SERVICE`
capabilities to the service. In fact, the Gitea systemd service has two
lines[^1] that are commented out:
```systemd
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
```
Uncommenting these two lines was all I had to do for Gitea.
### Using `setcap`
You can add `CAP_NET_BIND_SERVICE` to the executable directly using `setcap`,
allowing it to bind to any port. Run the following command[^2]:
```bash
setcap 'cap_net_bind_service=+ep' /path/to/program
```
Note that this means that anyone with permission to run this program will be
able to run it and bind to any privileged ports.
Other caveats[^2]:
> 1. You will need at least a 2.6.24 kernel
> 2. This won't work if your file is a script. (ie, uses a #! line to launch an
> interpreter). In this case, as far I as understand, you'd have to apply the
> capability to the interpreter executable itself, which of course is a
> security nightmare, since any program using that interpreter will have the
> capability. I wasn't able to find any clean, easy way to work around this
> problem.
> 3. Linux will disable LD\_LIBRARY\_PATH on any program that has elevated
> privileges like setcap or suid. So if your program uses its own .../lib/,
> you might have to look into another option like port forwarding.
[^1]: https://github.com/go-gitea/gitea/blob/3416e2a82586fca4cd452b93237b979300f55d62/contrib/systemd/gitea.service#L69
and https://stackoverflow.com/a/47065825
[^2]: https://stackoverflow.com/a/414258

View File

@ -3,7 +3,7 @@ title = "Checkra1n GUI on Other Distros"
date = "2021-03-25T21:19:51-05:00" date = "2021-03-25T21:19:51-05:00"
author = "bbaovanc" author = "bbaovanc"
cover = "/blog/media/checkra1n-gui-on-arch-linux.png" cover = "/blog/media/checkra1n-gui-on-arch-linux.png"
tags = ["linux", "archlinux", "jailbreak", "checkra1n"] tags = ["guide", "linux", "archlinux", "jailbreak", "checkra1n"]
keywords = ["checkra1n", "gui", "linux", "arch linux"] keywords = ["checkra1n", "gui", "linux", "arch linux"]
description = """ description = """

View File

@ -3,7 +3,7 @@ title = "Put (edited) in the middle of a message in Discord"
date = "2021-03-25T18:48:34-05:00" date = "2021-03-25T18:48:34-05:00"
author = "bbaovanc" author = "bbaovanc"
cover = "media/discord-tricks/edited-in-middle-of-message.png" cover = "media/discord-tricks/edited-in-middle-of-message.png"
tags = ["discord", "discord-tricks"] tags = ["tutorial", "discord", "discord-tricks"]
keywords = ["discord", "edited"] keywords = ["discord", "edited"]
description = """ description = """

View File

@ -0,0 +1,39 @@
+++
title = "New Comment System"
date = "2021-04-11T00:17:13-05:00"
author = "bbaovanc"
tags = ["announcement", "hugo", "blog"]
keywords = ["hugo", "comment system", "blog", "isso"]
description = """
I added a comment system to my blog, using [Isso](https://posativ.org/isso/).
"""
showFullContent = false
toc = true
+++
## About
I set up a comment system named [Isso](https://posativ.org/isso/) on my blog
today. At the bottom of each blog post, there's a comment section. You don't
need to sign up with an account or sign in with Google, Facebook, none of that
junk. You can comment anonymously, or provide any of the following three fields:
name, email address, and website, which will be shown to other people viewing
your comment. I'm going off of the assumption that no one cares/is malicious
enough to spam my comment sections.
## Known Issues
### Editing and deleting not working
You're supposed to be able to edit and delete comments up to 15 minutes after
posting them. As of now, that doesn't seem to be working; the request just
returns 403 (forbidden).
### White text on white background when previewing comment
This is a CSS related issue. This was also happening when editing/writing a
comment, but I edited it so the edit box has black text. I think a better fix is
to make the new comment form have a dark background, but I'll deal with that
later.

View File

@ -2,7 +2,7 @@
title = "Text Substitution in Discord using `sed`" title = "Text Substitution in Discord using `sed`"
date = "2021-03-25T18:48:15-05:00" date = "2021-03-25T18:48:15-05:00"
author = "bbaovanc" author = "bbaovanc"
tags = ["discord", "discord-tricks"] tags = ["tutorial", "discord", "discord-tricks"]
keywords = ["discord", "sed", "text", "replacement"] keywords = ["discord", "sed", "text", "replacement"]
description = """ description = """
@ -12,7 +12,7 @@ Discord has (very primitive) support for text replacement using `sed` syntax.
showFullContent = false showFullContent = false
+++ +++
## How-to ## Tutorial
[Example Video](/blog/media/discord-tricks/sed-text-replacement.mov) [Example Video](/blog/media/discord-tricks/sed-text-replacement.mov)

View File

@ -0,0 +1,274 @@
<style>
#isso-thread * {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
#isso-thread .isso-comment-header a {
text-decoration: none;
}
#isso-thread {
padding: 0;
margin: 0;
}
#isso-thread > h4 {
color: #555;
font-weight: bold;
}
#isso-thread > .isso-feedlink {
float: right;
padding-left: 1em;
}
#isso-thread > .isso-feedlink > a {
font-size: 0.8em;
vertical-align: bottom;
}
#isso-thread .textarea {
color: black;
min-height: 58px;
outline: 0;
}
#isso-thread .textarea.placeholder {
color: #757575;
}
#isso-root .isso-comment {
max-width: 68em;
padding-top: 0.95em;
margin: 0.95em auto;
}
#isso-root .preview .isso-comment {
padding-top: 0;
margin: 0;
}
#isso-root .isso-comment:not(:first-of-type),
.isso-follow-up .isso-comment {
border-top: 1px solid rgba(0, 0, 0, 0.1);
}
.isso-comment > div.avatar {
display: block;
float: left;
width: 7%;
margin: 3px 15px 0 0;
}
.isso-comment > div.avatar > svg {
max-width: 48px;
max-height: 48px;
border: 1px solid rgba(0, 0, 0, 0.2);
border-radius: 3px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
}
.isso-comment > div.text-wrapper {
display: block;
}
.isso-comment .isso-follow-up {
padding-left: calc(7% + 20px);
}
.isso-comment > div.text-wrapper > .isso-comment-header, .isso-comment > div.text-wrapper > .isso-comment-footer {
font-size: 0.95em;
}
.isso-comment > div.text-wrapper > .isso-comment-header {
font-size: 0.85em;
}
.isso-comment > div.text-wrapper > .isso-comment-header .spacer {
padding: 0 6px;
}
.isso-comment > div.text-wrapper > .isso-comment-header .spacer,
.isso-comment > div.text-wrapper > .isso-comment-header a.permalink,
.isso-comment > div.text-wrapper > .isso-comment-header .note,
.isso-comment > div.text-wrapper > .isso-comment-header a.parent {
color: gray !important;
font-weight: normal;
text-shadow: none !important;
}
.isso-comment > div.text-wrapper > .isso-comment-header .spacer:hover,
.isso-comment > div.text-wrapper > .isso-comment-header a.permalink:hover,
.isso-comment > div.text-wrapper > .isso-comment-header .note:hover,
.isso-comment > div.text-wrapper > .isso-comment-header a.parent:hover {
color: #606060 !important;
}
.isso-comment > div.text-wrapper > .isso-comment-header .note {
float: right;
}
.isso-comment > div.text-wrapper > .isso-comment-header .author {
font-weight: bold;
color: #555;
}
.isso-comment > div.text-wrapper > .textarea-wrapper .textarea,
.isso-comment > div.text-wrapper > .textarea-wrapper .preview {
margin-top: 0.2em;
}
.isso-comment > div.text-wrapper > div.text p {
margin-top: 0.2em;
}
.isso-comment > div.text-wrapper > div.text p:last-child {
margin-bottom: 0.2em;
}
.isso-comment > div.text-wrapper > div.text h1,
.isso-comment > div.text-wrapper > div.text h2,
.isso-comment > div.text-wrapper > div.text h3,
.isso-comment > div.text-wrapper > div.text h4,
.isso-comment > div.text-wrapper > div.text h5,
.isso-comment > div.text-wrapper > div.text h6 {
font-size: 130%;
font-weight: bold;
}
.isso-comment > div.text-wrapper > div.textarea-wrapper .textarea,
.isso-comment > div.text-wrapper > div.textarea-wrapper .preview {
width: 100%;
border: 1px solid #f0f0f0;
border-radius: 2px;
box-shadow: 0 0 2px #888;
}
.isso-comment > div.text-wrapper > .isso-comment-footer {
font-size: 0.80em;
color: gray !important;
clear: left;
}
.isso-feedlink,
.isso-comment > div.text-wrapper > .isso-comment-footer a {
font-weight: bold;
text-decoration: none;
}
.isso-feedlink:hover,
.isso-comment > div.text-wrapper > .isso-comment-footer a:hover {
color: #111111 !important;
text-shadow: #aaaaaa 0 0 1px !important;
}
.isso-comment > div.text-wrapper > .isso-comment-footer > a {
position: relative;
top: .2em;
}
.isso-comment > div.text-wrapper > .isso-comment-footer > a + a {
padding-left: 1em;
}
.isso-comment > div.text-wrapper > .isso-comment-footer .votes {
color: gray;
}
.isso-comment > div.text-wrapper > .isso-comment-footer .upvote svg,
.isso-comment > div.text-wrapper > .isso-comment-footer .downvote svg {
position: relative;
top: .2em;
}
.isso-comment .isso-postbox {
margin-top: 0.8em;
}
.isso-comment.isso-no-votes > * > .isso-comment-footer span.votes {
display: none;
}
.isso-postbox {
max-width: 68em;
margin: 0 auto 2em;
clear: right;
}
.isso-postbox > .form-wrapper {
display: block;
padding: 0;
}
.isso-postbox > .form-wrapper > .auth-section,
.isso-postbox > .form-wrapper > .auth-section .post-action {
display: block;
}
.isso-postbox > .form-wrapper .textarea,
.isso-postbox > .form-wrapper .preview {
margin: 0 0 .3em;
padding: .4em .8em;
border-radius: 3px;
background-color: #fff;
border: 1px solid rgba(0, 0, 0, 0.2);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
}
.isso-postbox > .form-wrapper input[type=checkbox] {
vertical-align: middle;
position: relative;
bottom: 1px;
margin-left: 0;
}
.isso-postbox > .form-wrapper .notification-section {
font-size: 0.90em;
padding-top: .3em;
}
#isso-thread .textarea:focus,
#isso-thread input:focus {
border-color: rgba(0, 0, 0, 0.8);
}
.isso-postbox > .form-wrapper > .auth-section .input-wrapper {
display: inline-block;
position: relative;
max-width: 25%;
margin: 0;
}
.isso-postbox > .form-wrapper > .auth-section .input-wrapper input {
padding: .3em 10px;
max-width: 100%;
border-radius: 3px;
background-color: #fff;
line-height: 1.4em;
border: 1px solid rgba(0, 0, 0, 0.2);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
}
.isso-postbox > .form-wrapper > .auth-section .post-action {
display: inline-block;
float: right;
margin: 0 0 0 5px;
}
.isso-postbox > .form-wrapper > .auth-section .post-action > input {
padding: calc(.3em - 1px);
border-radius: 2px;
border: 1px solid #CCC;
background-color: #DDD;
cursor: pointer;
outline: 0;
line-height: 1.4em;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
}
.isso-postbox > .form-wrapper > .auth-section .post-action > input:hover {
background-color: #CCC;
}
.isso-postbox > .form-wrapper > .auth-section .post-action > input:active {
background-color: #BBB;
}
.isso-postbox > .form-wrapper .preview,
.isso-postbox > .form-wrapper input[name="edit"],
.isso-postbox.preview-mode > .form-wrapper input[name="preview"],
.isso-postbox.preview-mode > .form-wrapper .textarea {
display: none;
}
.isso-postbox.preview-mode > .form-wrapper .preview {
display: block;
}
.isso-postbox.preview-mode > .form-wrapper input[name="edit"] {
display: inline;
}
.isso-postbox > .form-wrapper .preview {
background-color: #f8f8f8;
background: repeating-linear-gradient(
-45deg,
#f8f8f8,
#f8f8f8 10px,
#fff 10px,
#fff 20px
);
}
.isso-postbox > .form-wrapper > .notification-section {
display: none;
padding-bottom: 10px;
}
@media screen and (max-width:600px) {
.isso-postbox > .form-wrapper > .auth-section .input-wrapper {
display: block;
max-width: 100%;
margin: 0 0 .3em;
}
.isso-postbox > .form-wrapper > .auth-section .input-wrapper input {
width: 100%;
}
}
</style>
<script data-isso="https://bbaovanc.com/isso/"
data-isso-css="false"
src="https://bbaovanc.com/isso/js/embed.min.js"></script>
<section id="isso-thread"></section>