Hexa's Blog

Checklist chuẩn bị dàn đào

02/08/2022 @ Saigon Mining Rig

Bài viết này được viết để hỗ trợ cho các dàn đào sử dụng hệ điều hành Window 10. Ý kiến cá nhân, tôi không thích sử dụng các hệ điều hành chuyên dụng ví dụ như Minerstat OS, tôi thích sử dụng Minerstat Window hơn.

Dàn Đào
Dàn Đào

I. BIOS

  • Advanced → SATA Mode Selection: AHCI
  • Advanced → CSM Configuration
    • CSM Support: Enabled
    • Gate A20 Active: Upon Request (Mặc định)
    • Option ROM Messages: Force BIOS (Mặc định)
    • Boot option filter: UEFI and Legacy
    • Network: Do not lauch (Mặc định)
    • Storage: UEFI
    • Video: Legacy (Mặc định)
    • Other PCI devices: UEFI (Mặc định)
  • Advanced → USB Configuration
    • Legacy USB Support: Disabled
  • Chipset → Restore AC Power Loss: Power On

II. Window 10

1. Phần mềm

2. Thiết lập thêm trong Window 10

  • User Account Control Settings: Never Notify
  • Power Option: High Performance
    • Turn off the display: Never
    • Put the computer to sleep: Never
  • Virtual Memory: mỗi VGA là 8,000 MB, ví dụ cài đặt cho 4 x 3080, tổng cộng là 32,000 MB.
    • Initial size (MB): 32,000 MB
    • Maximum size (MB): 32,000 MB
  • Visual Effects: Adjust for best performance

Phân tích exec trong shell script

27/07/2022 @ Saigon Linux

1. Giới thiệu exec

Trước tiên cần giải thích hành vi của exec. Dưới đây là ví dụ của file có tên là script.sh. Trong file này, nó sẽ gọi child_script.sh

#!/bin/bash
...
...
...

./child_script.sh

Giả sử như là child_script này chạy khá lâu, lâu đến mức chúng ta có thể mở một terminal khác và rồi liệt kê danh sách những process nào đang chạy. Chúng ta sẽ thấy có hai process.

  • process dành cho script.sh
  • process dành cho child_script.sh

Phân tích thêm một chút là mặc dù script.sh đã chạy xong phần việc của nó, giờ đây nó kích hoạt child_script.sh, phần code/chức năng lúc này đang được thực thi là năm trong child_script.sh. Lưu ý một chút là mặc dù để tên là child_script.sh tuy nhiên đây cũng có thể là một đoạn script ngang cấp với script.sh, chỉ đơn giản là script này chạy trước, cái kia chạy sau, script này gọi script kia.

Khi nhìn nhận ở góc độ này, chúng ta có thể nhận ra rằng việc nhận được danh sách process đang chạy có 2 process dành cho script.shchild_script.sh không phải lúc nào cũng là phương án tốt nhất.

Một cách tiếp cận khác đó là khi script.sh đã chạy xong, process dành cho nó sẽ bị khai tử, và khi liệt kê danh sách các process đang chạy, chúng ta sẽ chỉ thấy process dành cho child_script.sh mà thôi.

Để làm được điều này, ta sẽ cần sử dụng exec. script.sh sau khi viết lại và sử dụng exec sẽ trông như sau:

#!/bin/bash
...
...
...

exec ./child_script.sh

2. Khi nào nên sử dụng?

child_script.sh là script cuối cùng cần phải kích hoạt sau khi chạy script.sh. Không sử dụng exec ở giữa file script trừ trường hợp muốn cắt ngang script.sh.

Nếu vô ý sử dụng exec ở giữa file script, đoạn code nằm sau exec sẽ bị bỏ qua ngay cả khi child_script.sh đã xử lý xong. Lý do là vì ngay khi sử dụng exec, process dành cho script.sh đã bị khai tử, thành ra, nó không có cơ sở để thực thi những đoạn code nằm sau.

3. Demo

Trong một thư mục bất kỳ hãy tạo nội dung hai file script.shchild_script.sh như sau:

script.sh

#!/bin/zsh

echo "this is script.sh"
sleep 1
./child_script.sh

child_script.sh

#!/bin/zsh

echo "this is child_script.sh"
sleep 20

Tình huống hiện tại, exec không được sử dụng, khi chạy script.sh ; Ta sẽ thấy có hai process. Sử dụng lệnh ps -a để xem danh sách process.

  • pid: 1 718 953 → script.sh
  • pid: 1 718 976 → child_script.sh
[1] Không sử dụng exec
[1] Không sử dụng exec

Và tiếp theo, khi thêm exec vào trước ./child_script.sh trong file script.sh, ta sẽ chỉ thấy có một process là:

  • pid: 1 718 065 → child_script.sh
[2] Sử dụng exec
[2] Sử dụng exec

Bài phân tích này kết thúc ở đây, chúc các bạn tìm được cách tiếp cận hợp lý khi viết script trong từng trường hợp cụ thể.

Cảm ơn đồng nghiệp của tôi là anh Duy đã dành thời gian quý báu của mình để giúp tôi hiểu thêm về exec.

Cách sửa lỗi Microsoft Teams: “We're sorry—we've run into an issue.”

19/07/2022 Window

Tôi gặp vấn đề khó chịu này khi sử dụng cùng lúc 2 tài khoản Microsoft Teams trên Window 10. Lỗi này xảy ra khi tôi chuyển đổi giữa hai account. Để khắc phục vấn đề này các bạn hãy làm như sau.

[1] We're sorry—we've run into an issue.
[1] We're sorry—we've run into an issue.

.

Tôi gặp vấn đề khó chịu này khi sử dụng cùng lúc 2 tài khoản Microsoft Teams trên Window 10. Lỗi này xảy ra khi tôi chuyển đổi giữa hai account. Để khắc phục vấn đề này các bạn hãy làm như sau.

Bước 1: Vào %LocalAppData%\Microsoft\Teams\current

LocalAppData là enviroment variable có giá trị chính là C:\Users\nguye\AppData\Local\ Tùy vào tên username mà giá trị này có thể thay đổi. Tuy nhiên khi paste %LocalAppData%\Microsoft\Teams\current vào File Explorer, File Explorer sẽ tự trỏ vào thư mục cần thiết.

[2] File Explorer
[2] File Explorer

Bước 2: Chỉnh compatibility mode của file Teams.exe thành Window 8.

[3] Teams.exe Properties
[3] Teams.exe Properties

Đã xong, bạn có thể vào lại Microsoft Team và tận hưởng thành quả!

How to install ssl certificate for nginx with SSLs.com?

28/06/2022 @ Saigon SSL

In this post, I would like to introduce a way to quickly setup SSL certificate for any website with https://www.ssls.com/

Step 1: Generate private key and certificate signing request (csr).

To generate private key and certificate signing request, use the following command with a note of these parameters.

  • -keyout: private key, for example: your_domain.pem
  • -out: certificate signing request, for example your_domain.csr
$ openssl req -new -newkey rsa:2048 -nodes \
              -keyout your_domain.pem \
              -out your_domain.csr \
              -subj /CN=www.hexalink.xyz

Step 2: Via the ssls.com, submit certificate signing request (csr)

[1] Submit Certificate Signing Request
[1] Submit Certificate Signing Request

Step 3: Add a CNAME record in the Domain Manager like Hostinger & Waiting

Step 4: Get certificate issued and download

After the download process, there gonna be three file

  • your_domain.ca-bundle
  • your_domain.crt
  • your_domain.p7b
[2] Download Certificate from ssls.com
[2] Download Certificate from ssls.com

Step 5: Concat bundle your_domain.crt and your_domain.ca-bundle in order with your favorite text editor.

Please becareful while do concat

  • missing new line error. This is an example of missing new line.
    -----END CERTIFICATE----------BEGIN CERTIFICATE-----
    
  • Incorrect order, .crt before .ca-bundle

We can name concated file as ssl-bundle.crt.

After this time, there are two file that you need to bring to the nginx server.

  1. Private key file from Step 1, for example: your_domain.pem
  2. Certificate file (ssl-bundle.crt) which is a concat version of your_domain.ca-bundle and your_domain.crt in order.

Step 6: Install private key and certificate file to nginx

Before configure nginx.conf file at /etc/nginx, it’s a need to copy private key file and certificate file to /etc/pki/nginx/.

You can choose different directory, but you need to make it up to date in the nginx.conf file.

This is an example of nginx config file, the most important attribute are:

  • listen 443;
  • ssl on;
  • ssl_certificate /etc/pki/nginx/ssl-bundle.crt;
  • ssl_certificate_key /etc/pki/nginx/your_domain.pem;
server {

    listen 443; <----

    ssl on;     <----

    ssl_certificate /etc/ssl/ssl-bundle.crt;       <----

    ssl_certificate_key /etc/ssl/your_domain.pem;  <----

    server_name your_domain;

    access_log /var/log/nginx/nginx.vhost.access.log;

    error_log /var/log/nginx/nginx.vhost.error.log;

    location / {

        root /var/www/;

        index index.html;

    }

}

After finished editing, restart nginx server with systemctl restart nginx and enjoy.

Reference List

XMRig - config.json Template

01/06/2022 Mining Rig

# XMRig configuration file config.json
{
  "api": {
    "worker-id": "worker-x"
  },
  "http": {
    "enabled": true,
    "host": "0.0.0.0",
    "port": 8080,
    "access-token": null,
    "restricted": true
  },
  "autosave": false,
  "opencl": false,
  "cuda": false,
  "pools": [
    {
      "coin": "monero",
      "algo": "rx/0",
      "url": "pool.hashvault.pro:443",
      "user": "MONERO_ADDRESS_HERE",
      "pass": "worker-x",
      "tls": true,
      "keepalive": true,
      "nicehash": false
    }
  ],
  "randomx": {
    "1gb-pages": true
  },
  "cpu": {
    "enabled": true,
    "huge-pages": true
  }
}

XMRig, Support 1GB Page on Fedora

30/05/2022 @ Saigon Mining Rig

By default, running xmrig to mine Monero will got 1GB PAGES disabled eventhough config.json has been configured.

[1] XMRig without 1GB pages supported.
[1] XMRig without 1GB pages supported.

While running xmrig, you can caught the following log.

[2021-03-15 15:14:59.732]  randomx  failed to allocate RandomX dataset using 1GB pages

The solution is to edit grub file located at /etc/default/grub with the following config:

GRUB_CMDLINE_LINUX_DEFAULT="hugepagesz=1G hugepages=3"

Then, update grub.cfg with this command and do reboot.

grub2-mkconfig -o /boot/grub2/grub.cfg

Finally, run your xmrig with sudo and enjoy!

[2] XMRig with 1GB pages supported.
[2] XMRig with 1GB pages supported.

Những 'bí ẩn' trong toán phổ thông: đạo hàm để làm gì?

25/05/2022 @ Saigon Math & Physic

Bài lược trích của thầy giáo Ngô Minh Đức dưới đây hi vọng sẽ là lời giải thích gần gũi về ý nghĩa và ứng dụng thực tiễn của đạo hàm.

Một năm sau ngày ra trường, bạn đi họp lớp và gặp lại đứa bạn ngồi cùng bàn. Quá bất ngờ vì cô bạn trở nên xinh đẹp, tự tin, khiến bạn phải thốt lên: “Mới có một năm, sao bạn thay đổi nhiều quá vậy?”.

Câu chuyện đơn giản trên đã ẩn chứa ý tưởng đạo hàm trong đó. Khi một điều gì đó thay đổi, nó có thể thay đổi nhanh hay chậm, đạo hàm sẽ cho ta biết “tốc độ thay đổi” của đại lượng đó. Nhờ ý nghĩa này, đạo hàm trở thành công cụ vô cùng quan trọng, ở bất cứ đâu có sự thay đổi, chúng ta sẽ biết được nó thay đổi như thế nào bằng đạo hàm.

Cụ thể, nếu hàm số đang tăng đạo hàm sẽ dương, tăng càng nhanh thì đạo hàm càng lớn. Ngược lại, hàm số đang giảm, đạo hàm sẽ âm và âm càng nhiều khi hàm số giảm càng nhanh.

Ở khía cạnh thực tiễn, nếu bạn là nhà kinh tế và muốn biết tốc độ tăng trưởng kinh tế nhằm đưa ra những quyết định đầu tư chứng khoán đúng đắn; nếu bạn là nhà hoạch định chiến lược, muốn có thông tin về tốc độ gia tăng dân số ở từng vùng miền; hoặc muốn xác định tốc độ phản ứng hóa học, tính toán tốc độ, gia tốc của chuyển động… Đạo hàm sẽ là thứ mà bạn cần.

Rất đơn giản! Đầu tiên bạn cần có hàm số mô tả đại lượng đang quan tâm và sau đó chỉ cần đạo hàm nó. Còn tính đạo hàm như thế nào thì sách giáo khoa đã chỉ dẫn rõ ràng và chi tiết, đơn giản hơn chúng ta có thể nhờ máy tính làm giúp.

Đạo hàm còn những ứng dụng tuyệt vời khác. Một trong số đó là tìm xem hàm số sẽ đạt được giá trị lớn nhất hay nhỏ nhất ở đâu, để từ đó tối ưu hóa các hoạt động khác nhau trong cuộc sống.

Khi một hàm số đang tăng (đạo hàm dương) rồi bất chợt chuyển sang giảm (đạo hàm âm), nó đã đi qua vị trí mà tại đó hàm số đạt giá trị cực đại và vị trí này cũng chính là nơi có đạo hàm bằng 0 (có thể có ngoại lệ nhé!). Tương tự cho trường hợp hàm số đạt được giá trị cực tiểu.

Từ nhận xét này, bằng cách tìm những chỗ mà đạo hàm bằng 0, người ta có thể biết một đại lượng sẽ đạt giá trị lớn nhất hay nhỏ nhất ở đâu để từ đó có thể tối ưu hóa nó theo mong muốn của mình.

Sử dụng đặc trưng này của đạo hàm, các công ty có thể tính được số sản phẩm nên sản xuất để đạt được lợi nhuận cao nhất. Các kĩ sư sẽ biết phải thiết kế một hộp sữa hay một lon nước ngọt như thế nào, với lượng nguyên liệu có sẵn, để có một hộp sữa chứa được nhiều sữa nhất…

Cụ thể, ta cần có hàm số mô tả lợi nhuận theo số lượng sản phẩm hoặc hàm số mô tả thể tích hộp sữa theo kích thước thiết kế. Đạo hàm sẽ giúp ta tìm xem các hàm số này đạt giá trị lớn nhất tại đâu. Đó chính là lựa chọn tối ưu cho nhà sản xuất.

Ở các sách giáo khoa nước ngoài, họ luôn nhấn mạnh cho học sinh rằng ý nghĩa quan trọng nhất của đạo hàm là cho biết tốc độ thay đổi (rate of change) của một hàm số.

Reference

Installing an Audio Card - CMI8738 on X10DRL-i with Fedora 34

08/05/2022 @ Saigon Linux

I am the owner of a motherboard named X10DRL-i from Supermicro. Regarding its specification, there is no audio component on this motherboard which means that I cannot listen to music or do voice call.

Of course, there are few tricks to output/input audio via USB components however it’s not a method that I would like to use in long term.

I really don’t want to waste an USB socket on this motherboard.

First of all, this is the motherboard layout that I rererence from Supermicro.

[1] Supermicro X10DRL-i
[1] Supermicro X10DRL-i

And this is the the audio card Cmedia CMI8738, this audio card has reached its end of life. I bought it from Shopee.

[2] Audio Card - Cmedia CMI8738
[2] Audio Card - Cmedia CMI8738

Right now, I am using a NVIDIA GeForce GTX 1060 6GB, as a consequence, I cannot test CPU 1 SLOT 5 PCI-E 3.0 X16 socket on the motherboard. Meanwhile, after testing all available sockets, there is only one socket which works, it’s PCH SLOT 1 PCI-E 2.0.

lspci gives more information.

$ lspci -nnk | grep -A3 Audio

08:00.0 Multimedia audio controller [0401]: C-Media Electronics Inc CMI8738/CMI8768 PCI Audio [13f6:0111] (rev 10)
        Subsystem: C-Media Electronics Inc CMI8738/C3DX PCI Audio Device [13f6:0111]
        Kernel driver in use: snd_cmipci
        Kernel modules: snd_cmipci

Other failed tests lead to an unknown conflict with Graphic Card. A dark blank screen with flashing cursor.

After installing the audio card on PCH SLOT 1 PCI-E 2.0. I have tested the Pink Socket - Mic In and Green Socket - Front Out. They all works flawlessly. Of course, it’s a must to configure an audio setting on Fedora 34, this is my audio setting.

[3] Audio Settings
[3] Audio Settings

In case, you wonder my server specification:

  • OS: Fedora 34 (Workstation Edition) x8
  • Kernel: 5.17.5-100.fc34.x86_64
  • Desktop Environment: GNOME 40.9
  • CPU: Intel Xeon E5-2680 v4 (56) @ 3.300GHz
  • GPU: NVIDIA GeForce GTX 1060 6GB

References:

Thiết lập thông số 170HX - Dàn #4 Huyền Vũ

28/04/2022 @ Saigon Mining Rig

I. Lời mở đầu

Bài viết này phục vụ mục đích duy nhất là đó là nếu tôi lỡ tay xóa mấy profile trên MSI Afterburner, Minerstat. Tôi sẽ quay lại đây xem.

Trong những thiết bị đào tôi đã từng có cơ hội thử qua, hai vga [1] 170HX[3] LEADTEK WinFast RTX 3080 AI BLOWER 10G trong dàn này cực kì nhạy cảm với nhiệt độ, tôi đã mod, tuy nhiên là chưa đủ. Để làm hoàn thiện sẽ cần đầu tư nhiều hơn. Ngoài ra thì [2] MSI 3080 VENTUS 10G OC (FHR) đã được tôi thay pad tản nhiệt Gelid 2mm và tra lại keo Noctua NT-H2.

Dàn Huyền Vũ
Dàn Huyền Vũ
No VGA
1 170HX
2 MSI 3080 VENTUS 10G OC (FHR)
3 LEADTEK WinFast RTX 3080 AI BLOWER 10G

II. Ethereum - 345 MH/s

a. Thiết lập với MSI Afterburner

No VGA Power Limit Temp. Limit +/- Core Clock +/- Mem Clock
1 170HX 88%
2 MSI 3080 VENTUS 10G OC (FHR) 75% (priority) 65C -502 MH/s +950 MH/s
3 LEADTEK WinFast RTX 3080 AI BLOWER 10G 70% (priority) 65C -502 MH/s 0

b. Kết quả thu được

No VGA Power Consumption Hashrate GPU Temp. Memory Temp.
1 170HX 219 Walt 163.153 MH/s 65C 84C
2 MSI 3080 VENTUS 10G OC (FHR) 239 Walt 96.726 MH/s 58C 84C
3 LEADTEK WinFast RTX 3080 AI BLOWER 10G 223 Walt 86.414 MH/s 60C 102C
           
  Total 681 Walt 346.293 MH/s
[2] Minerstat
[2] Minerstat

Thiết lập thông số 3080 - Dàn #3 Chu Tước

23/04/2022 @ Saigon Mining Rig

I. Lời mở đầu

Bài viết này phục vụ mục đích duy nhất là đó là nếu tôi lỡ tay xóa mấy profile trên MSI Afterburner, Minerstat. Tôi sẽ quay lại đây xem. Hiện tại đây là 4 VGA trực thuộc dàn #3 Chu Tước. Cả 4 VGA này đều là dòng Lite Hash Rate (LHR).

No VGA
1 MSI 3080 VENTUS 10G OC (LHR)
2 MSI 3080 VENTUS 10G OC (LHR)
3 MSI 3080 VENTUS 10G OC (LHR)
4 MSI 3080 VENTUS 10G OC (LHR)
[1] Chu Tước
[1] Chu Tước

II. Mức thiết lập - Ethereum - 95MH/s

Dàn đào Chu Tước sử dụng phần mềm NBMiner.

[2] T-rex miner
[2] T-rex miner

a. Thiết lập với Minerstat

  • Power limit (Watt): 280 Walt
  • Power limit (%): skip
  • Core Clock (-/+ MHz): skip
  • Locked Memory Clock (MHz): skip
  • Force P2 State: skip
  • ClockTune delay: 0
No VGA Locked Core -/+ Memory Clock
1 MSI 3080 VENTUS 10G OC (LHR) 1200 MH/s +1100 MH/s
2 MSI 3080 VENTUS 10G OC (LHR) 1200 MH/s +1100 MH/s
3 MSI 3080 VENTUS 10G OC (LHR) 1200 MH/s +1100 MH/s
4 MSI 3080 VENTUS 10G OC (LHR) 1200 MH/s +1100 MH/s

b. Kết quả thu được

No VGA Power Consumption Hashrate GPU Temp. Memory Temp.
1 MSI 3080 VENTUS 10G OC (LHR) 226 Walt 98.28 MH/s 62C 90C
2 MSI 3080 VENTUS 10G OC (LHR) 243 Walt 97.12 MH/s 59C 88C
3 MSI 3080 VENTUS 10G OC (LHR) 231 Walt 98.25 MH/s 58C 86C
4 MSI 3080 VENTUS 10G OC (LHR) 233 Walt 98.36 MH/s 56C 84C
           
  Total 933 Walt 392 MH/s