Help
RSS
API
Feed
Maltego
Contact
Domain > takuya-1st.hatenablog.jp
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2014-10-31
54.64.13.59
(
ClassC
)
2026-02-06
3.175.34.65
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: CloudFrontDate: Fri, 06 Feb 2026 23:04:37 GMTContent-Type: text/htmlContent-Length: 167Connection: keep-aliveLocation: https://takuya-1st.hatenablog.jp/X-Cache: Redirect from cloudfrontVia: 1.1 223036c71c1f48562349a318eed11a5c.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P3X-Amz-Cf-Id: B1qt9cWrvjmmrdhGMwoZDfa2ey2_CVMx4J0u7ZF8g1jqO8ZfQ-6vgQ html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>CloudFront/center>/body>/html>
Port 443
HTTP/1.1 200 OKContent-Type: text/html; charsetutf-8Transfer-Encoding: chunkedConnection: keep-aliveServer: nginxDate: Fri, 06 Feb 2026 23:04:37 GMTCache-Control: privateX-Proxy-Revision: f9947fdf1627a1d1b3c8c87a6a5233f9cd465c93Vary: Accept-EncodingVary: X-Epic-Device-Type,X-Epic-Flag-Variants,Accept-EncodingAccess-Control-Allow-Origin: *Content-Security-Policy: frame-ancestors none; upgrade-insecure-requestsContent-Security-Policy-Report-Only: block-all-mixed-content; report-uri https://blog.hatena.ne.jp/api/csp_reportP3P: CPOTI CUR OUR BUS STAX-Cache-Only-Varnish: 1X-Content-Type-Options: nosniffX-Dispatch: Hatena::Epic::Web::Blogs::Index#indexX-Frame-Options: DENYX-Revision: f9947fdf1627a1d1b3c8c87a6a5233X-XSS-Protection: 1X-Runtime: 0.114752X-Varnish: 2689110 1704239Via: 1.1 ip-10-1-18-149.ap-northeast-1.compute.internal (Varnish/7.6), 1.1 17220d5b0843b7d6f37da152096b8a14.cloudfront.net (CloudFront)Strict-Transport-Security: max-age2592000;X-Cache: Miss from cloudfrontX-Amz-Cf-Pop: HIO52-P3X-Amz-Cf-Id: SpJHyVbNc03DodWt1YUNyIBBuvkFaL9SbbBmBn_IcXQrEMDqiM35bQAge: 2464 !DOCTYPE html>html langjadata-admin-domain//blog.hatena.ne.jpdata-admin-originhttps://blog.hatena.ne.jpdata-authortakuya_1stdata-avail-langsja endata-blogtakuya-1st.hatenablog.jpdata-blog-hosttakuya-1st.hatenablog.jpdata-blog-is-public1data-blog-nameそれマグで!data-blog-ownertakuya_1stdata-blog-show-ads1data-blog-show-sleeping-adsdata-blog-urihttps://takuya-1st.hatenablog.jp/data-blog-uuid12704830469097614513data-blogs-uri-basehttps://takuya-1st.hatenablog.jpdata-brandhatenablogdata-data-layer{"hatenablog":{"admin":{},"analytics":{"brand_property_id":"","measurement_id":"","non_sampling_property_id":"","property_id":"UA-255616-8","separated_property_id":"UA-29716941-26"},"blog":{"blog_id":"12704830469097614513","content_seems_japanese":"true","disable_ads":"","enable_ads":"true","enable_keyword_link":"true","entry_show_footer_related_entries":"true","force_pc_view":"false","is_public":"true","is_responsive_view":"false","is_sleeping":"false","lang":"ja","name":"\u305d\u308c\u30de\u30b0\u3067\uff01","owner_name":"takuya_1st","uri":"https://takuya-1st.hatenablog.jp/"},"brand":"hatenablog","page_id":"index","permalink_entry":null,"pro":"free","router_type":"blogs"}}data-devicepcdata-dont-recommend-profalsedata-global-domainhttps://hatena.blogdata-globalheader-colorbdata-globalheader-typepcdata-has-touch-view1data-help-urlhttps://help.hatenablog.comdata-pageindexdata-parts-domainhttps://hatenablog-parts.comdata-plus-availabledata-profalsedata-router-typeblogsdata-sentry-dsnhttps://03a33e4781a24cf2885099fed222b56d@sentry.io/1195218data-sentry-environmentproductiondata-sentry-sample-rate0.1data-static-domainhttps://cdn.blog.st-hatena.comdata-versionf9947fdf1627a1d1b3c8c87a6a5233 data-initial-state{} > head prefixog: http://ogp.me/ns# fb: http://ogp.me/ns/fb#> meta namerobots contentmax-image-preview:large /> meta charsetutf-8/> meta http-equivX-UA-Compatible contentIE7; IE9; IE10; IE11 /> title>それマグで!/title> link relcanonical hrefhttps://takuya-1st.hatenablog.jp//> meta itempropname contentそれマグで!/> meta itempropimage contenthttps://cdn.blog.st-hatena.com/images/theme/og-image-1500.png/> meta propertyog:title contentそれマグで!/>meta propertyog:type contentblog/> meta propertyog:url contenthttps://takuya-1st.hatenablog.jp//> meta propertyog:image contenthttps://cdn.blog.st-hatena.com/images/theme/og-image-1500.png/>meta propertyog:image:alt contentそれマグで!/> meta propertyog:description content知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ />meta propertyog:site_name contentそれマグで!/> meta nametwitter:card contentsummary_large_image /> meta nametwitter:image contenthttps://cdn.blog.st-hatena.com/images/theme/og-image-1500.png /> meta nametwitter:title contentそれマグで! /> meta nametwitter:description content知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ /> meta nametwitter:app:name:iphone contentはてなブログアプリ /> meta nametwitter:app:id:iphone content583299321 /> meta nametwitter:app:url:iphone contenthatenablog:///open?urihttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2F /> meta nametwitter:site content@takuya_1st /> meta namegoogle-site-verification contenth5FlKu0qSTuoG6mttmTa0x1d0Nq9-Z2XmBMnkYI8hsU /> meta namemsvalidate.01 contentD484ABAA6EED99710AE451367A4F3BCE /> script idembed-gtm-data-layer-loader data-data-layer-page-specific>(function() { function loadDataLayer(elem, attrName) { if (!elem) { return {}; } var json elem.getAttribute(attrName); if (!json) { return {}; } return JSON.parse(json); } var globalVariables loadDataLayer( document.documentElement, data-data-layer ); var pageSpecificVariables loadDataLayer( document.getElementById(embed-gtm-data-layer-loader), data-data-layer-page-specific ); var variables globalVariables, pageSpecificVariables; if (!window.dataLayer) { window.dataLayer ; } for (var i 0; i variables.length; i++) { window.dataLayer.push(variablesi); }})();/script>!-- Google Tag Manager -->script>(function(w,d,s,l,i){wlwl||;wl.push({gtm.start:new Date().getTime(),event:gtm.js});var fd.getElementsByTagName(s)0,jd.createElement(s),dll!dataLayer?&l+l:;j.asynctrue;j.srchttps://www.googletagmanager.com/gtm.js?id+i+dl;f.parentNode.insertBefore(j,f);})(window,document,script,dataLayer,GTM-P4CXTW);/script>!-- End Google Tag Manager -->!-- Google Tag Manager -->script>(function(w,d,s,l,i){wlwl||;wl.push({gtm.start:new Date().getTime(),event:gtm.js});var fd.getElementsByTagName(s)0,jd.createElement(s),dll!dataLayer?&l+l:;j.asynctrue;j.srchttps://www.googletagmanager.com/gtm.js?id+i+dl;f.parentNode.insertBefore(j,f);})(window,document,script,dataLayer,GTM-5LQ36LH);/script>!-- End Google Tag Manager --> link relshortcut icon hrefhttps://takuya-1st.hatenablog.jp/icon/favicon>link relapple-touch-icon hrefhttps://takuya-1st.hatenablog.jp/icon/touch>link relicon sizes192x192 hrefhttps://takuya-1st.hatenablog.jp/icon/link> link relalternate typeapplication/atom+xml titleAtom hrefhttps://takuya-1st.hatenablog.jp/feed/>link relalternate typeapplication/rss+xml titleRSS2.0 hrefhttps://takuya-1st.hatenablog.jp/rss/> link relauthor hrefhttp://www.hatena.ne.jp/takuya_1st/> link relpreload hrefhttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20200218/20200218054629.jpg asimage/> link relstylesheet typetext/css hrefhttps://cdn.blog.st-hatena.com/css/blog.css?versionf9947fdf1627a1d1b3c8c87a6a5233/> link relstylesheet typetext/css hrefhttps://usercss.blog.st-hatena.com/blog_style/12704830469097614513/67fac2abcfb42c3e331269a23db58e6081b49cf0/> script> /script> style> div#google_afc_user, div.google-afc-user-container, div.google_afc_image, div.google_afc_blocklink { display: block !important; }/style> script srchttps://cdn.pool.st-hatena.com/valve/valve.js async>/script>script idtest-valve-definition> var valve window.valve || ; valve.push(function(v) { v.config({ service: blog, content: { result: adtrust, documentIds: blog:entry:6802340630905498191,blog:entry:6802340630903133904,blog:entry:6802340630902293955,blog:entry:6802340630900610417,blog:entry:6801883189130011470,blog:entry:6801883189129881017,blog:entry:6801883189129784040,blog:entry:6801883189129632744,blog:entry:6801883189129631678,blog:entry:6801883189129525978,blog:entry:6801883189130380983,blog:entry:6801883189129751229,blog:entry:6801883189124351416,blog:entry:6801883189119338438,blog:entry:6801883189119335593 } }); v.defineDFPSlot({lazy:1,sizes:{mappings:320,568,336,280,300,250,fluid,0,0,300,250},slotId:ad-in-entry,unit:/4374287/blog_pc_entry_sleep_in-article}); v.defineDFPSlot({lazy:,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_0,unit:/4374287/blog_user}); v.defineDFPSlot({lazy:,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_1,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_2,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:1,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_3,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:1,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_4,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:1,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_5,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:1,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_6,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:1,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_7,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:1,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_8,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:1,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_9,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:1,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_10,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:1,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_11,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:1,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_12,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:1,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_13,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:1,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_14,unit:/4374287/blog_user_2nd}); v.sealDFPSlots(); });/script> script typeapplication/ld+json>{@context:https://schema.org,@type:WebSite,name:それマグで!,url:https://takuya-1st.hatenablog.jp/}/script> script async src//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js>/script>script> (adsbygoogle window.adsbygoogle || ).push({ google_ad_client: ca-pub-7708740420636125, enable_page_level_ads: true });/script>meta namegoogle-site-verification contenth5FlKu0qSTuoG6mttmTa0x1d0Nq9-Z2XmBMnkYI8hsU />!-- Global site tag (gtag.js) - Google Analytics -->script async srchttps://www.googletagmanager.com/gtag/js?idG-CG90X1ZJZR>/script>script> window.dataLayer window.dataLayer || ; function gtag(){dataLayer.push(arguments);} gtag(js, new Date()); gtag(config, G-CG90X1ZJZR);/script> /head> body classpage-index header-image-enable enable-top-editarea enable-bottom-editarea globalheader-ng-enabled> div idglobalheader-container data-brandhatenablog > iframe idglobalheader height37 frameborder0 allowTransparencytrue>/iframe>/div> nav class blog-controlls > div classblog-controlls-blog-icon> a hrefhttps://takuya-1st.hatenablog.jp/> img srchttps://cdn.image.st-hatena.com/image/square/17168ae5a8d156cc4c839caa5d69a1f196237274/backendimagemagick;height128;version1;width128/https%3A%2F%2Fcdn.user.blog.st-hatena.com%2Fblog_custom_icon%2F149816%2F1534599162244620 altそれマグで!/> /a> /div> div classblog-controlls-title> a hrefhttps://takuya-1st.hatenablog.jp/>それマグで!/a> /div> a hrefhttps://blog.hatena.ne.jp/takuya_1st/takuya-1st.hatenablog.jp/subscribe?utm_campaignsubscribe_blog&utm_sourceblogs_topright_button&utm_mediumbutton classblog-controlls-subscribe-btn test-blog-header-controlls-subscribe> 読者になる /a> /nav> div idcontainer> div idcontainer-inner> header idblog-title data-brandhatenablog> div idblog-title-inner stylebackground-image: url(https://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20200218/20200218054629.jpg); background-position: center -314px;> div idblog-title-content> h1 idtitle>a hrefhttps://takuya-1st.hatenablog.jp/>それマグで!/a>/h1> h2 idblog-description>知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ/h2> /div> /div>/header> div idtop-editarea> 習慣に早くから配慮した者は、 おそらく人生の実りも大きい。script>document.addEventListener(DOMContentLoaded,function(){ // jQuery.noConflict()(document).ready(function(){ jQuery(h1.entry-title).append(div classhatena-star-container styledisplay:inline>/div>) }) jQuery.noConflict()(document).ready(function(){ /**ページャーが気に入らないので修正**/ //やるべきこと // pre・next のいれかえ jQuery(span.pager-next).insertAfter(span.pager-prev) // pre/next に矢印を入れる jQuery(arelnext).text(jQuery(arelnext).text()+> ) jQuery(arelprev).text( +jQuery(arelprev).text()) // pre/next をヘッダにもってくる //jQuery(.date.first).css(display,inline-block) jQuery(div.permalink.pager).clone().insertAfter(.date.first) jQuery(header .pager a).css(padding,0px 15px); //pre/next をAjaxで取得してタイトルを取る。 //取得したタイトルをpre/next のタイトルに jQuery(span.pager-next,span.pager-prev).css(display,inline-block) jQuery(span.pager-next,span.pager-prev).css(width,250px); jQuery(span.pager-next,span.pager-prev).css(overflow, hidden); jQuery(span.pager-next,span.pager-prev).css(white-space, nowrap); jQuery(span.pager-next,span.pager-prev).css(text-overflow, ellipsis); jQuery(arelnext,arelprev).each(function(idx,e){ var anchor e jQuery.get(anchor.href,null,function(html){ jQuery(anchor).text() var title jQuery(div>).html(html).find(.entry-title).text().trim() jQuery(anchor).attr(title, title); text jQuery(anchor).text() text text.slice(0,10); text text.replace(/の記事/, の記事 +title+ ); jQuery(anchor).text(text) }) }); }); })/script>script typetext/javascript>!--google_ad_client ca-pub-7708740420636125;/* はてなブログのヘッダ */google_ad_slot 1570190264;google_ad_width 468;google_ad_height 15;//-->/script>script typetext/javascript srchttps://pagead2.googlesyndication.com/pagead/show_ads.js>/script>script>/script>meta namegoogle-translate-customization content399757eecf471470-c4dff53089f9044c-g19e39b79775cffdf-19/>script async srchttps://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js>/script>script> (adsbygoogle window.adsbygoogle || ).push({ google_ad_client: ca-pub-7708740420636125, enable_page_level_ads: true });/script> /div> div idcontent classhfeed > div idcontent-inner> div idwrapper> div idmain> div idmain-inner> !-- google_ad_section_start --> !-- rakuten_ad_target_begin --> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-2000 words-100 mode-markdown entry-odd identry-6802340630905498191 data-keyword-campaign data-uuid6802340630905498191 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/09/11 relnofollow> time datetime2024-09-11T05:54:34Z title2024-09-11T05:54:34Z> span classdate-year>2024/span>span classhyphen>-/span>span classdate-month>09/span>span classhyphen>-/span>span classdate-day>11/span> /time> /a> /div> h1 classentry-title> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/09/11/145434 classentry-title-link bookmark> Windowsで溜まり続けるキャッシュを消す。/a>/h1> div classentry-categories categories> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/windows classentry-category-link category-windows>windows/a> /div> /header> div classentry-content hatenablog-entry> p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/Windows>Windows/a> はアプリごとにキャッシュを持っていて、Tempなどにまとめて管理する文化がない。/p>p>まぁa classkeyword hrefhttps://d.hatena.ne.jp/keyword/Linux>Linux/a>とかa classkeyword hrefhttps://d.hatena.ne.jp/keyword/Ruby>Ruby/a> Bundler なんかも同じなんですけど。/p>p>せめて、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/Windows>Windows/a>のディスクのクリーンアップが「$APPDATA/**/Cache」フォルダの中身は容赦なく消すぞ。みたいな仕様にしてくれたらなぁっと思う。/p>h2 idキャッシュ関連を削除>キャッシュ関連を削除/h2>pre classcode lang-ps1 data-langps1 data-unlink>rmspan classsynStatement> -Recurse -Force -Confirm/span>:span classsynConstant>$false/span> C:\Users\takuya\AppData\Local\NuGet\Cache\span classsynStatement>*/span> rmspan classsynStatement> -Recurse -Force -Confirm/span>:span classsynConstant>$false/span> C:\Users\takuya\scoop\cache\span classsynStatement>*/span>rmspan classsynStatement> -Recurse -Force -Confirm/span>:span classsynConstant>$false/span> span classsynConstant>C:\ProgramData\Package Cache\*/span>rmspan classsynStatement> -Recurse -Force -Confirm/span>:span classsynConstant>$false/span> C:\ProgramData\chocolatey\logs\chocolatey.span classsynStatement>*/span>.logrmspan classsynStatement> -Recurse -Force -Confirm/span>:span classsynConstant>$false/span> C:\ProgramData\chocolatey\logs\choco.summary.span classsynStatement>*/span>.logrmspan classsynStatement> -Recurse -Force -Confirm/span>:span classsynConstant>$false/span> C:\ProgramData\ChocolateyHttpCachespan classsynStatement>/*/span>rmspan classsynStatement> -Recurse -Force -Confirm/span>:span classsynConstant>$false/span> C:\ProgramData\Emurasoft\EmEditor\updates\span classsynStatement>*/span>rmspan classsynStatement> -Recurse -Force -Confirm/span>:span classsynConstant>$false/span> span classsynConstant>C:\ProgramData\Apple Computer\Installer Cache\*/span>span classsynComment>## ゴミ箱を空に/span>echo y span classsynStatement>|/span> powershell span classsynIdentifier>Clear-RecycleBin/span>/pre>p>他にも、キャッシュを持ってるフォルダは見つかり次第に追加していこうと思う/p>h2 idタスクスケジューラに登録する>タスクスケジューラに登録する。/h2>p>こんな感じで、コマンドを登録して、定期的に実行することにした。/p>pre classcode lang-xml data-langxml data-unlink>span classsynComment><?/span>span classsynType>xml version/span>span classsynConstant>"1.0"/span>span classsynType> encoding/span>span classsynConstant>"UTF-16"/span>span classsynComment>?>/span>span classsynIdentifier><Task /span>span classsynType>version/span>span classsynConstant>"1.2"/span>span classsynIdentifier> /span>span classsynType>xmlns/span>span classsynConstant>"http://schemas.microsoft.com/windows/2004/02/mit/task"/span>span classsynIdentifier>>/span> span classsynIdentifier><RegistrationInfo>/span> span classsynIdentifier><Date>/span>2024-09-11T14:42:35.0215253span classsynIdentifier></Date>/span> span classsynIdentifier><Author>/span>takuyaspan classsynIdentifier></Author>/span> span classsynIdentifier><URI>/span>\takuya\Cleanup Cachesspan classsynIdentifier></URI>/span> span classsynIdentifier></RegistrationInfo>/span> span classsynIdentifier><Triggers />/span> span classsynIdentifier><Principals />/span> span classsynIdentifier><Settings />/span> span classsynIdentifier><Actions /span>span classsynType>Context/span>span classsynConstant>"Author"/span>span classsynIdentifier>>/span> span classsynIdentifier><Exec>/span> span classsynIdentifier><Command>/span>powershell.exespan classsynIdentifier></Command>/span> span classsynIdentifier><Arguments>/span>-WindowStyle Hidden -ExecutionPolicy Bypass -File ""C:\Users\takuya\misc-app\maintenance\remove-cache.ps1"span classsynIdentifier></Arguments>/span> span classsynIdentifier></Exec>/span> span classsynIdentifier></Actions>/span>span classsynIdentifier></Task>/span>/pre>h2 idキャッシュは溜めないでほしい>キャッシュは溜めないでほしい/h2>p>キャッシュがa classkeyword hrefhttps://d.hatena.ne.jp/keyword/SSD>SSD/a>居座ることで、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/SSD>SSD/a>の容量に居座る。そのためログとキャッシュある箇所は二度と書き込みされないのに、ずっとデータが有る。a classkeyword hrefhttps://d.hatena.ne.jp/keyword/SSD>SSD/a>はキャッシュの箇所など認識しないので、データ有りとなる。a classkeyword hrefhttps://d.hatena.ne.jp/keyword/SSD>SSD/a>は空き容量をやりくりながら書き込みを平準化する。a classkeyword hrefhttps://d.hatena.ne.jp/keyword/SSD>SSD/a>を容量ギリギリ迄使っていると、結果としていつも同じ箇所に書き込みが続いて、寿命を縮めることになる。/p>p>アプリつくる人はキャッシュ消せよ!1年以上も残してるんじゃないよ。っていうかボリューム・シャドウコピーがあるんだから、ボリューム・シャドウコピーを前提として上書きしてほしい。ボリューム・シャドウコピーならa classkeyword hrefhttps://d.hatena.ne.jp/keyword/Windows>Windows/a>が管理してくれるんだから。/p>p>起動用のキャッシュならともかく、アップデート用のキャッシュは複数溜まってたりするので絶対に消してほしい。/p> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nametakuya_1st >takuya_1st/span>/span> span classentry-footer-time>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/09/11/145434>time data-relative datetime2024-09-11T05:54:34Z title2024-09-11T05:54:34Z classupdated>2024-09-11 14:54/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/takuya_1st/takuya-1st.hatenablog.jp/subscribe?utm_sourceblogs_entry_footer&utm_campaignsubscribe_blog&utm_mediumbutton> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://takuya-1st.hatenablog.jp/entry/2024/09/11/145434 data-hatena-star-title Windowsで溜まり続けるキャッシュを消す。 data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> /div> div classgoogle-afc-image test-google-rectangle-ads> div idgoogle_afc_user_container_0 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> iframe classhatena-bookmark-comment-iframe data-srchttps://takuya-1st.hatenablog.jp/iframe/hatena_bookmark_comment?canonical_urihttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2Fentry%2F2024%2F09%2F11%2F145434 frameborder0 scrollingno styleborder: none; width: 100%;> /iframe> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-800 words-100 mode-markdown entry-even identry-6802340630903133904 data-keyword-campaign data-uuid6802340630903133904 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/09/02 relnofollow> time datetime2024-09-01T17:54:45Z title2024-09-01T17:54:45Z> span classdate-year>2024/span>span classhyphen>-/span>span classdate-month>09/span>span classhyphen>-/span>span classdate-day>02/span> /time> /a> /div> h1 classentry-title> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/09/02/025445 classentry-title-link bookmark> WindowsでのiPhoneバックアップの場所/a>/h1> div classentry-categories categories> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/windows classentry-category-link category-windows>windows/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/itunes classentry-category-link category-itunes>itunes/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/iphone classentry-category-link category-iphone>iphone/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/apple classentry-category-link category-apple>apple/a> /div> /header> div classentry-content hatenablog-entry> h2 idwindows-のiTunesに取得したバックアップの場所>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/windows>windows/a> のa classkeyword hrefhttps://d.hatena.ne.jp/keyword/iTunes>iTunes/a>に取得したバックアップの場所/h2>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/Windows>Windows/a>内部に作ったバックアップの場所。/p>pre classcode data-lang data-unlink>C:\Users\takuya\AppData\Roaming\Apple Computer\MobileSync\Backup/pre>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240902/20240902025022.png width1122 height633 loadinglazy title classhatena-fotolife itempropimage>/span>/p>h2 idバックアップの削除はここから行う>バックアップの削除はここから行う。/h2>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240902/20240902025042.png width697 height467 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>うっかり、AppData内部のデータを消さないように/p>h2 idローカルのバックアップって意味あるの>ローカルのバックアップって意味あるの?/h2>p>「あります。」/p>ul>li>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/iCloud>iCloud/a>バックアップは容量不足になりがちで、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/Apple>Apple/a>に1ドル吸われる。/li>li>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/iCloud>iCloud/a>バックアップは全データを取り出さない(指定データのみ)/li>li>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/iCloud>iCloud/a>バックアップから取り出しは遅い。/li>li>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/iCloud>iCloud/a>バックアップでは一部アプリのセキュア・データが復元されない/li>/ul>p>あらゆるデータをバックアップ取るのであれば、ローカルが一番ですね。/p>p>機種間でのデータ移行も確実に行えます。/p>p>いくら高速インターネットだの、高速a classkeyword hrefhttps://d.hatena.ne.jp/keyword/WiFi>WiFi/a>だといっても、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/iCloud>iCloud/a>からデータ取り出しで20MB/sくらいしか速度が出ないんですから。ローカルに持っておくのがストレス無いですね。/p> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nametakuya_1st >takuya_1st/span>/span> span classentry-footer-time>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/09/02/025445>time data-relative datetime2024-09-01T17:54:45Z title2024-09-01T17:54:45Z classupdated>2024-09-02 02:54/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/takuya_1st/takuya-1st.hatenablog.jp/subscribe?utm_sourceblogs_entry_footer&utm_campaignsubscribe_blog&utm_mediumbutton> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://takuya-1st.hatenablog.jp/entry/2024/09/02/025445 data-hatena-star-title WindowsでのiPhoneバックアップの場所 data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> /div> div classgoogle-afc-image test-google-rectangle-ads> div idgoogle_afc_user_container_1 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> iframe classhatena-bookmark-comment-iframe data-srchttps://takuya-1st.hatenablog.jp/iframe/hatena_bookmark_comment?canonical_urihttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2Fentry%2F2024%2F09%2F02%2F025445 frameborder0 scrollingno styleborder: none; width: 100%;> /iframe> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-1600 words-200 mode-markdown entry-odd identry-6802340630902293955 data-keyword-campaign data-uuid6802340630902293955 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/08/27 relnofollow> time datetime2024-08-26T15:00:00Z title2024-08-26T15:00:00Z> span classdate-year>2024/span>span classhyphen>-/span>span classdate-month>08/span>span classhyphen>-/span>span classdate-day>27/span> /time> /a> /div> h1 classentry-title> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/27/000000 classentry-title-link bookmark> lxc の root ストレージを作り直す。( Failed getting root disk: No root device could be found) /a>/h1> div classentry-categories categories> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/lxc classentry-category-link category-lxc>lxc/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/storage classentry-category-link category-storage>storage/a> /div> /header> div classentry-content hatenablog-entry> h2 idLXC-のstorage-を作り直す>LXC のstorage を作り直す/h2>p>LXCを整理するのには、ストレージを消して作り直すと手っ取り早い/p>p>ストレージをすべて消して空っぽにした状態/p>pre classcode data-lang data-unlink>takuya@:~$ lxc storage ls+------+--------+--------+-------------+---------+-------+| NAME | DRIVER | SOURCE | DESCRIPTION | USED BY | STATE |+------+--------+--------+-------------+---------+-------+/pre>p>lxc のストレージを消すには、used by で利用しているlxd a classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9>インスタンス/a>をcode>lxc delete $NAME/code>で消す必要もある。/p>p>lxc コマンドは、次のようにすると、sudo なし一般ユーザも利用可能。/p>pre classcode data-lang data-unlink>sudo usermod -aG lxd takuya/pre>p>default が used by 1 だったらそれも消す/p>pre classcode data-lang data-unlink>lxc profile device remove default root/pre>h2 idストレージを再生成する>ストレージを再生成する。/h2>pre classcode data-lang data-unlink>lxc storage create default btrfs/pre>h2 idroot-イメージ保存先を割り当てる>root (イメージ保存先)を割り当てる。/h2>p>path/ を割り当てる。/p>pre classcode data-lang data-unlink>lxc profile device add default root disk path/ pooldefault/pre>p>この作業を忘れると、次のように root device (stoage ) がないと怒られる。/p>pre classcode data-lang data-unlink>Failed getting root disk: No root device could be found/pre>h2 idbtrfs-の圧縮オプションを入れておく>btrfs の圧縮オプションを入れておく。/h2>p>btrfs は圧縮オプションを入れておくといいかもしれない。(おまじない)/p>pre classcode data-lang data-unlink>lxc storage set default btrfs.mount_options compresszstd/pre>p>zstd 圧縮が効いていることを確認/p>pre classcode data-lang data-unlink>lxc storage get default btrfs.mount_options/pre>h2 idイメージをlaunchして確認>イメージをlaunchして確認/h2>pre classcode data-lang data-unlink>LXC_NAMEtest-ubuntuRELEASE22.04lxc launch ubuntu:$RELEASE $LXC_NAME/pre>p>btrfs の圧縮オプションが効いていることも確認/p>pre classcode data-lang data-unlink>lxc exec $LXC_NAME 'mount' | grep btrfs | grep zstd/var/snap/lxd/common/lxd/disks/default.img on / type btrfs (rw,relatime,idmapped,compresszstd:3,ssd,space_cachev2,user_subvol_rm_allowed,subvolid257,subvol/containers/test)/pre>p>btrfs なんで code>subvol/containers/test/code> でLXC_NAMEが入っていて、code>compresszstd:3,/code> になって圧縮オプションも継続していることが確認できる。/p>h2 idまとめ>まとめ/h2>p>lxc のストレージの作り直し。/p>pre classcode data-lang data-unlink>lxc storage delete $NAMElxc storage create $NAMElxc profile device add default root disk path/ pool$NAME/pre>p>lxd init をしてもいいけど、ストレージだけ作り直せる。使えると便利。/p> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nametakuya_1st >takuya_1st/span>/span> span classentry-footer-time>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/27/000000>time data-relative datetime2024-08-26T15:00:00Z title2024-08-26T15:00:00Z classupdated>2024-08-27 00:00/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/takuya_1st/takuya-1st.hatenablog.jp/subscribe?utm_mediumbutton&utm_sourceblogs_entry_footer&utm_campaignsubscribe_blog> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://takuya-1st.hatenablog.jp/entry/2024/08/27/000000 data-hatena-star-title lxc の root ストレージを作り直す。( Failed getting root disk: No root device could be found) data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> /div> div classgoogle-afc-image test-google-rectangle-ads> div idgoogle_afc_user_container_2 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> iframe classhatena-bookmark-comment-iframe data-srchttps://takuya-1st.hatenablog.jp/iframe/hatena_bookmark_comment?canonical_urihttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2Fentry%2F2024%2F08%2F27%2F000000 frameborder0 scrollingno styleborder: none; width: 100%;> /iframe> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-2400 words-200 mode-markdown entry-even identry-6802340630900610417 data-keyword-campaign data-uuid6802340630900610417 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/08/23 relnofollow> time datetime2024-08-23T06:39:17Z title2024-08-23T06:39:17Z> span classdate-year>2024/span>span classhyphen>-/span>span classdate-month>08/span>span classhyphen>-/span>span classdate-day>23/span> /time> /a> /div> h1 classentry-title> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/23/153917 classentry-title-link bookmark>dockerfileでAPTプロキシとシェル変数を渡す例。/a>/h1> div classentry-categories categories> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/docker classentry-category-link category-docker>docker/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/proxy classentry-category-link category-proxy>proxy/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/apt-cacher classentry-category-link category-apt-cacher>apt-cacher/a> /div> /header> div classentry-content hatenablog-entry> h2 iddocker-build-で-apt-installを高速化>docker build で apt installを高速化/h2>p>code>docker build/code> で毎回ダウンロードが公式レポジトリから行われるのが、心苦しい。/p>p>無駄な通信が発生している。そして何より遅い/p>h2 idビルド例>ビルド例/h2>pre classcode data-lang data-unlink>export APT_HTTP_PROXYhttp://192.168.2.21:3142 docker build --build-arg APT_HTTP_PROXY${APT_HTTP_PROXY} -t sample ./pre>h2 idDockerfileの例>Dockerfileの例/h2>p>dockerfile で次のように記述すればいい。/p>pre classcode lang-dockerfile data-langdockerfile data-unlink>span classsynStatement>FROM/span> ubuntu:20.04span classsynStatement>ENV/span> DEBCONF_NOWARNINGSyesspan classsynStatement>ARG/span> APT_HTTP_PROXYspan classsynStatement>ENV/span> APT_HTTP_PROXY${APT_HTTP_PROXY}span classsynStatement>RUN/span> span classsynStatement>echo/span>span classsynConstant> /span>span classsynStatement>"/span>span classsynConstant>Apt Config/span>span classsynStatement>"/span>span classsynConstant> /span>span classsynStatement>&&/span> span classsynStatement>\/span>span classsynStatement>echo/span>span classsynConstant> /span>span classsynStatement>"/span>span classsynConstant>APT::Install-Suggests 0;/span>span classsynSpecial>\n/span>span classsynConstant>APT::Install-Recommends 0;/span>span classsynStatement>"/span>span classsynConstant> \/span>span classsynConstant> /span>span classsynStatement>|/span> tee /etc/apt/apt.conf.d/00-no-install-recommends span classsynStatement>&&/span> span classsynStatement>\/span>span classsynStatement>echo/span>span classsynConstant> /span>span classsynStatement>"/span>span classsynConstant>path-exclude/usr/share/locale/*/span>span classsynSpecial>\n/span>span classsynConstant>path-exclude/usr/share/man/*/span>span classsynSpecial>\n/span>span classsynConstant>path-exclude/usr/share/doc/*/span>span classsynSpecial>\n/span>span classsynStatement>"/span>span classsynConstant> \/span>span classsynConstant> /span>span classsynStatement>|/span> tee /etc/dpkg/dpkg.cfg.d/01-nodoc span classsynStatement>&&/span> span classsynStatement>\/span>span classsynStatement>echo/span>span classsynConstant> /span>span classsynStatement>"/span>span classsynConstant>Acquire::HTTP::Proxy /span>span classsynSpecial>\"/span>span classsynPreProc>${APT_HTTP_PROXY}/span>span classsynSpecial>\"/span>span classsynConstant>;/span>span classsynStatement>"/span>span classsynConstant> /span>span classsynStatement>>>/span> /etc/apt/apt.conf.d/01proxy span classsynStatement>&&/span> span classsynStatement>\/span>span classsynStatement>echo/span>span classsynConstant> /span>span classsynStatement>/span>span classsynConstant>Acquire::HTTPS::Proxy "false";/span>span classsynStatement>/span>span classsynConstant> /span>span classsynStatement>>>/span> /etc/apt/apt.conf.d/01proxy span classsynStatement>&&/span> span classsynStatement>\/span>apt-get update span classsynStatement>&&/span> span classsynStatement>\/span>apt-get upgrade span classsynSpecial>-y/span>/pre>p>とくにポイントになるのは、次の二行/p>pre classcode data-lang data-unlink>echo "Acquire::HTTP::Proxy \"${APT_HTTP_PROXY}\";" >> /etc/apt/apt.conf.d/01proxy && \echo 'Acquire::HTTPS::Proxy "false";' >> /etc/apt/apt.conf.d/01proxy && \/pre>p>また、プロキシ設定をビルド時変数で渡す箇所を利用して、再利用性を高める。/p>pre classcode data-lang data-unlink>ARG APT_HTTP_PROXYENV APT_HTTP_PROXY${APT_HTTP_PROXY}/pre>h2 iddockerfile-のコツ>dockerfile のコツ/h2>p>code>docker build/code> を実行するシェルから変数を渡すのに、code>--build-arg/code> が使える。/p>p>code>Dockerfile/code>では、ビルド変数を受け取るcode>ARG $NAME/code>がある。code>ARG $NAME/code> で受け取った変数をビルド用変数としてcode>ENV NAME$NAME/code>で展開する。code>RUN cmd/code> はcode>ENV 変数/code>を使う。/p>p>このように書いておけば、Dockerfile にビルド時の変数を使える。/p>p>そして、ビルド時に変数を渡す/p>pre classcode data-lang data-unlink>docker build --build-arg APT_HTTP_PROXY${APT_HTTP_PROXY}/pre>h2 idAPTプロキシを使うコツ>APTプロキシを使うコツ/h2>p>プロキシ自体はcode>docker run sameersbn/apt-cacher-ng/code> で起動できる。/p>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/https>https/a>:// のレポジトリは、httpを強制すれば簡単にプロキシが可能/p>pre classcode data-lang data-unlink>sed -e 's|https:|http:|' -i /etc/apt/sources.list.d/docker.list/pre>p>code>apt update/code> は http でプロキシつながるのは次のような動作背景にある。/p>ul>li>apt update で、a hrefhttp://apt.example.tld/>http://apt.example.tld//a> へ プロキシ経由でアクセスする。ul>li>プロキシはhttpで取得を試行する。/li>li>オリジンサーバーがhttp->a classkeyword hrefhttps://d.hatena.ne.jp/keyword/https>https/a> へアップグレードをかける。/li>li>プロキシがa classkeyword hrefhttps://d.hatena.ne.jp/keyword/https>https/a> でコンテンツを取得/li>li>プロキシは apt 結果として a classkeyword hrefhttps://d.hatena.ne.jp/keyword/https>https/a>の取得結果を返す/li>/ul>/li>li>apt update の結果が取得される。/li>/ul>h2 id過去の資料>過去の資料/h2>p>過去の関連資料です。/p>ul>li>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/01/15/083000>https://takuya-1st.hatenablog.jp/entry/2024/01/15/083000/a>/li>li>a hrefhttps://takuya-1st.hatenablog.jp/entry/2022/04/26/165445>https://takuya-1st.hatenablog.jp/entry/2022/04/26/165445/a>/li>li>a hrefhttps://takuya-1st.hatenablog.jp/entry/2020/12/21/040116>https://takuya-1st.hatenablog.jp/entry/2020/12/21/040116/a>/li>/ul>p>apt インストールは「何度も実行する」ために存在するわけではない。通信はプロキシでキャッシュするしか無い。/p>p> またaptのRUNより手前を書換えるとdockerfileのキャッシュがうまく効かないんですよね。とくにRUNを1回で済ませようとすると、毎回aptが実行されて、数秒の待ち時間が必要。その待ち時間が10秒でも回数が30回を超えてくると流石に面倒なです。/p> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nametakuya_1st >takuya_1st/span>/span> span classentry-footer-time>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/23/153917>time data-relative datetime2024-08-23T06:39:17Z title2024-08-23T06:39:17Z classupdated>2024-08-23 15:39/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/takuya_1st/takuya-1st.hatenablog.jp/subscribe?utm_mediumbutton&utm_campaignsubscribe_blog&utm_sourceblogs_entry_footer> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://takuya-1st.hatenablog.jp/entry/2024/08/23/153917 data-hatena-star-titledockerfileでAPTプロキシとシェル変数を渡す例。 data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> /div> div classgoogle-afc-image test-google-rectangle-ads> script> (valve window.valve || ).push(function(v) { v.displayDFPSlot(google_afc_user_container_3); }); /script> div idgoogle_afc_user_container_3 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> iframe classhatena-bookmark-comment-iframe data-srchttps://takuya-1st.hatenablog.jp/iframe/hatena_bookmark_comment?canonical_urihttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2Fentry%2F2024%2F08%2F23%2F153917 frameborder0 scrollingno styleborder: none; width: 100%;> /iframe> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-2800 words-400 mode-markdown entry-odd identry-6801883189130011470 data-keyword-campaign data-uuid6801883189130011470 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/08/18 relnofollow> time datetime2024-08-17T15:00:00Z title2024-08-17T15:00:00Z> span classdate-year>2024/span>span classhyphen>-/span>span classdate-month>08/span>span classhyphen>-/span>span classdate-day>18/span> /time> /a> /div> h1 classentry-title> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/18/000000 classentry-title-link bookmark>OpenWRTでパケットをマークして許可する(ポリシールーティング)/a>/h1> div classentry-categories categories> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/network classentry-category-link category-network>network/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/openwr classentry-category-link category-openwr>openwr/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/linux classentry-category-link category-linux>linux/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/nft classentry-category-link category-nft>nft/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/nftables classentry-category-link category-nftables>nftables/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/fw4 classentry-category-link category-fw4>fw4/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/luci classentry-category-link category-luci>luci/a> /div> /header> div classentry-content hatenablog-entry> h2 idWEB-UI--Luci-を使った場合>WEB-UI ( Luci )を使った場合/h2>p>Luci で ip rule を作って ip route テーブルを作ることはできる。/p>p>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/17/000000>前回やったコマンドからのポリシールーティング/a>をLuCI(WEB)経由でやる話です。/p>p>やることは次の通り。/p>h3 idnftables-でマークを扱う>nftables でマークを扱う。/h3>p>マーク済パケットをAcceptする。prerouting で マークする。ip rule でルーティングテーブルを分ける。/p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240817/20240817025137.png width1200 height676 loadinglazy title classhatena-fotolife itempropimage>/span>/p>h3 idnftables-のpreroutingマーク条件を別テーブルにする>nftables のprerouting(マーク条件)を別テーブルにする/h3>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240817/20240817030200.png width1143 height578 loadinglazy title classhatena-fotolife itempropimage>/span>/p>h3 idポリシールーティング用のルーティングテーブル>ポリシールーティング用のルーティングテーブル/h3>p>ip rule 設定で、マーク済パケット専用のルーティングテーブルを作る。/p>p>設定の Neworking -> routing -> { Static a classkeyword hrefhttps://d.hatena.ne.jp/keyword/IPv6>IPv6/a> route , a classkeyword hrefhttps://d.hatena.ne.jp/keyword/IPv6>IPv6/a> Rule }を編集して次のような設定を作る。/p>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/IPv6>IPv6/a> Routing の設定/p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240816/20240816163530.png width886 height332 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/IPv6>IPv6/a> Rulesの設定/p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240816/20240816163617.png width937 height357 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>この結果、次のような設定が作られる。/p>pre classcode data-lang data-unlink>config route6 option interface 'wg0' option target '2000::/3' option gateway 'fd00:aaa:afac:1919::1' option table '666'config rule6 option lookup '666' option mark '0x29a'/pre>p>これで専用のルーティングテーブルを作ることができるし、MARKに一致したルールを作ることができる。/p>p>この結果はコマンドから確認できる。/p>p>ルールが作成される。/p>pre classcode data-lang data-unlink>> ip -6 rule list1: from all fwmark 0x29a lookup 666/pre>p>ルーティングが設定される。/p>pre classcode data-lang data-unlink>> ip -6 route show table 6662000::/3 via fd00:aaa:afac:1919::1 dev wg0 proto static metric 1024 pref medium/pre>p>ルーティングをテストする。(a classkeyword hrefhttps://d.hatena.ne.jp/keyword/google>google/a>.comのAAAA経路)/p>pre classcode data-lang data-unlink>> GGv62404:6800:400a:80b::200e> ip -6 route get fibmatch $GGv6 mark 6662000::/3 via fd00:aaa:afac:1919::1 dev wg0 table 666 proto static metric 1024 pref medium/pre>p>マーク済パケットの経路が作られたことがわかった。/p>h3 idファイアウォール設定でマークを付ける>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%D5%A5%A1%A5%A4%A5%A2%A5%A6%A5%A9%A1%BC%A5%EB>ファイアウォール/a>設定で、マークを付ける。/h3>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240816/20240816163422.png width630 height253 loadinglazy title classhatena-fotolife itempropimage>/span>/p>pre classcode data-lang data-unlink>config rule option name 'Add Mark' option family 'ipv6' list proto 'all' list src_ip 'fd03:3304:1128:3939::3' option target 'MARK' option set_mark '666' option src 'lan6' option dest '*'/pre>p>ここで、ミスしちゃいけないのが、code>source zone/code> をちゃんと入れること。発信 zoneを入れると、 inet fw4 のcode>mangle_prerouting/code>にルールが作られる。/p>p>code>src zone/code> を適当にAnyとかすると code>mangle_forward/code>やcode>mangle_output/code> に入ってしまう。悩ましい/p>p>この設定で、nft に次のルールが追加された/p>pre classcode data-lang data-unlink>> nft list chain inet fw4 mangle_preroutingtable inet fw4 { chain mangle_prerouting { type filter hook prerouting priority mangle; policy accept; iifname "br-lan" ip6 saddr fd03:3304:1128:3939::3 counter meta mark set 0x0000029a comment "!fw4: Add Mark" }}/pre>p>指定したSRC Addr のパケットをマークしている。/p>h2 idマークしたパケットを許可する>マークしたパケットを許可する/h2>p>マークをつけたパケットを、Forward許可する。/p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240816/20240816163344.png width651 height251 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>次のような設定ができる。/p>pre classcode data-lang data-unlink>config rule option name 'Accept Mark' option family 'ipv6' option src '*' option target 'ACCEPT' option mark '666' list proto 'all' option dest '*'/pre>p>この設定の結果として、nft に次のルールが追加される/p>pre classcode bash data-langbash data-unlink>> nft list chain inet fw4 forwardtable inet fw4 { chain forward { type filter hook forward priority filter; policy drop; meta nfproto ipv6 meta mark 0x0000029a counter accept comment "!fw4: Accept Mark" # これ ## 略 jump handle_reject }}/pre>h2 id以上によってマークしてパケットを流せる>以上によって、マークしてパケットを流せる/h2>p>OpenWrtLuCIの画面から、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%D5%A5%A1%A5%A4%A5%A2%A5%A6%A5%A9%A1%BC%A5%EB>ファイアウォール/a>でマークしたパケットを、転送することが出来た。/p>h2 idOpenWRT-はいいおもちゃ>OpenWRT はいいおもちゃ。/h2>p>設定がミスっていても、確認できるし。コマンドから強引にパケット通せるし。/p>p>やり方がわからないときは、コマンドで作ってから、同じ設定をLuCIで試せばいいし。/p>p>メーカ製品を使うと手当たり次第に試す羽目になり、どうしてもストレスを感じる。マニュアルがあっても正解がわからないので難しい。/p>p>その点では、OpenWrtを使えばa classkeyword hrefhttps://d.hatena.ne.jp/keyword/Linux>Linux/a>だしコマンドで行けるし、WRT限定事象かどうかもa classkeyword hrefhttps://d.hatena.ne.jp/keyword/Ubuntu>Ubuntu/a>やRaspiでも試したりでミスの発見を着実に歩みを進められるので本当に嬉しい。/p> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nametakuya_1st >takuya_1st/span>/span> span classentry-footer-time>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/18/000000>time data-relative datetime2024-08-17T15:00:00Z title2024-08-17T15:00:00Z classupdated>2024-08-18 00:00/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/takuya_1st/takuya-1st.hatenablog.jp/subscribe?utm_mediumbutton&utm_sourceblogs_entry_footer&utm_campaignsubscribe_blog> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://takuya-1st.hatenablog.jp/entry/2024/08/18/000000 data-hatena-star-titleOpenWRTでパケットをマークして許可する(ポリシールーティング) data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> /div> div classgoogle-afc-image test-google-rectangle-ads> script> (valve window.valve || ).push(function(v) { v.displayDFPSlot(google_afc_user_container_4); }); /script> div idgoogle_afc_user_container_4 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> iframe classhatena-bookmark-comment-iframe data-srchttps://takuya-1st.hatenablog.jp/iframe/hatena_bookmark_comment?canonical_urihttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2Fentry%2F2024%2F08%2F18%2F000000 frameborder0 scrollingno styleborder: none; width: 100%;> /iframe> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-5600 words-400 mode-markdown entry-even identry-6801883189129881017 data-keyword-campaign data-uuid6801883189129881017 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/08/17 relnofollow> time datetime2024-08-16T15:00:00Z title2024-08-16T15:00:00Z> span classdate-year>2024/span>span classhyphen>-/span>span classdate-month>08/span>span classhyphen>-/span>span classdate-day>17/span> /time> /a> /div> h1 classentry-title> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/17/000000 classentry-title-link bookmark> OpenWrtにfw4でポリシールーティングを入れる/a>/h1> div classentry-categories categories> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/linux classentry-category-link category-linux>linux/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/nft classentry-category-link category-nft>nft/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/nftables classentry-category-link category-nftables>nftables/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/openwrt classentry-category-link category-openwrt>openwrt/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/fw4 classentry-category-link category-fw4>fw4/a> /div> /header> div classentry-content hatenablog-entry> h2 idOpenWrtでポリシールーティングを入れる>OpenWrtでポリシールーティングを入れる/h2>h3 idポリシールーティングを入れると何が嬉しいのか>ポリシールーティングを入れると何が嬉しいのか。/h3>p>OpenWrtの nftables (nft) では code>inet fw4/code> のテーブルに全部入っている。/p>p>しかしLuciのZONE転送の許可拒否とTraffic Acceptをうまく両立するのが大変だった。/p>h3 idZone-転送とNAT許可設定でforwardがゴチャゴチャするからシンプルにしたい>Zone 転送とNAT許可設定でforwardがゴチャゴチャするからシンプルにしたい。/h3>p>OpenWrtのZONE転送設定はdefault が a classkeyword hrefhttps://d.hatena.ne.jp/keyword/reject>reject/a> である。/p>p>nft で別テーブルを作ってacceptを追加しても、デフォルトのテーブル inet fw4 でZONE転送にマッチしてa classkeyword hrefhttps://d.hatena.ne.jp/keyword/reject>reject/a> される。コマンドでinet fw4 の forward チェインに許可する設定を追加して forward を acceptする。/p>p>しかし、nft table inet fw4 テーブルのforward チェイン記述が大量になる。追いかけるのが面倒になり諦めた。特に、forwardチェインにa classkeyword hrefhttps://d.hatena.ne.jp/keyword/IP%A5%A2%A5%C9%A5%EC%A5%B9>IPアドレス/a>を直接記述ルールを大量に書いて全体を見失い、パケット疎通ミスを引き起こしまくった。/p>p>そこで、forwardチェインをシンプル制御をうまくやる。このためにマークを使ったポリシールーティングを活用する。/p>h2 id全体の方針>全体の方針/h2>ul>li>nftables で パケットにマークを付ける/li>li>openwrt のfw4 にマーク済パケットのFowardをAcceptする設定をいれる。/li>li>ip rule でマーク済パケット用のルーティングテーブルを作る。/li>/ul>p>パケットをマークしなくても目的は達成できるものの、上記で書いた問題(foward設定が肥大化する)ということがあるので、実験用のネットワークはnftablesの別テーブルに切り出しを実現する。別テーブルでマークする設定を書いておけば、グチャグチャにしても影響範囲は抑えられる。/p>h2 id今回作るネットワーク>今回作るネットワーク/h2>p>ルータ間の転送としてはありふれている/p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240817/20240817023422.png width1200 height769 loadinglazy title classhatena-fotolife itempropimage>/span>/p>h2 idマークしたパケットを別のGWを流したい>マークしたパケットを別のGWを流したい。/h2>p>ただ、マークしたパケットを、別の経路で流そうということである。/p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240817/20240817024238.png width1200 height761 loadinglazy title classhatena-fotolife itempropimage>/span>/p>h2 idnftables-の処理>nftables の処理。/h2>p>このとき、FowardでAcceptするのはマーク済みのパケットだけとする。/p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240817/20240817025137.png width1200 height676 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>nftables では、prerouting で条件マッチしたパケットにマークを付ける。fowardでマーク済パケットの転送をAcceptする。/p>p>ルーティングテーブルやFOWARDチェインに細かい条件を書いていくと数が増えてしまい煩雑になる。/p>p>その防止のため、prerouting で仕訳処理を先に済ませ、マークする。/p>h2 idnft-のテーブルを分けて管理する>nft のテーブルを分けて管理する。/h2>p>nftables にはチェインを別テーブルに分割できるので、prerouting を別テーブルに分けてしまう。/p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240817/20240817030200.png width1143 height578 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>パケットをマークする条件を別テーブルにして条件に特化したテーブルを用意して、そこだけ見て管理するようにする。/p>h2 id実際の処理>実際の処理/h2>p>実際に作った作業は次のとおりになる/p>h2 idOpenWrt-でforwardへマーク済みAcceptを入れる>OpenWrt でforwardへマーク済みAcceptを入れる。/h2>p>acceptするルールは、シンプルにする。MARK されたパケットを許可する。/p>pre classcode bash data-langbash data-unlink>MARK666FW4'inet fw4'HANDLE_REJECT$(nft -a list chain $FW4 forward | grep handle_reject | grep -oP '(?<handle )+\d+' )COMMENTaccept_samplenft insert rule "$FW4" forward position $HANDLE_REJECT \ mark $MARK counter accept comment "\"takuya: ${COMMENT} \""/pre>p>結果を確認する。/p>pre classcode data-lang data-unlink>> nft list chain inet fw4 forward table inet fw4 { chain forward { type filter hook forward priority filter; policy drop; ## Luci で入れたルール rule ... # 末尾に追加された meta mark 0x0000029a counter packets 250 bytes 21272 accept comment "takuya: accept_v6_sample " jump handle_reject }}/pre>p>末尾(handle_a classkeyword hrefhttps://d.hatena.ne.jp/keyword/reject>reject/a>の直前)に、ルールが追加された。/p>p>OpenWRT が作るfw4 のforwardテーブルは、default が a classkeyword hrefhttps://d.hatena.ne.jp/keyword/DROP>DROP/a> になっていて、且つ、未マッチはa classkeyword hrefhttps://d.hatena.ne.jp/keyword/REJECT>REJECT/a>に送られる。そのためforward中にACCEPTを差込む必要があった。/p>h2 idパケットをマークするnftテーブルを作る>パケットをマークするnftテーブルを作る/h2>p>マーキングする条件を書くため専用テーブルを作る。/p>p>先ほどマークしたパケットを「Accept」するように書いた。ここでは、指定条件パケットをマーク済にするための新しく別テーブルを作り、その中にチェインを作ったうえで、ルールをいれる。/p>p>次の名前で、テーブルを作ってprerouting のチェインを作る。/p>pre classcode bash data-langbash data-unlink>TABLE'ip6 marking_sample'nft create table $TABLEnft create chain "$TBL" prerouting {\ type filter hook prerouting priority filter \; policy accept \; \}/pre>p>prerouting で マーク条件を作る。/p>pre classcode bash data-langbash data-unlink>TABLE'ip6 marking_sample'IIFbr-lanMARK666DNET2404:6800:400a:80b::/64PCfd01:b::3/64nft insert rule $TABLE prerouting \ iifname $IIF ip6 daddr $DNET \ ip6 saddr $PC \ counter meta mark set $MARK/pre>p>今回書いたサンプル条件は、code>google.com AAAA 2404:6800:400a:80b::200e/code>(2024-08-16現在)のパケットはマークとした。/p>p>この記述で、マッチしたパケットはマーキングされ、inet fw4 forwardを通過するときに、マーク済なのでforward ACCEPTされる。/p>p>masquerade の追加/p>p>また、マークされたパケットが出ていくときにmasquerade しておく/p>pre classcode bash data-langbash data-unlink>TABLE'ip6 marking_sample'OIFwg0MARK666DNET2404:6800:400a:80b::/64nft create chain $TABLE postrouting { \ type nat hook postrouting priority filter\; policy accept \; \}nft add rule $TABLE postrouting \ oifname $OIF ip6 daddr $DNET counter masquerade/pre>p>OpenWrtの場合は、ZONE設定でチェックをいれるとMASQURADEは記入しなくても大丈夫ですが、念の為。/p>h2 idip-rule-を作るポリシールーティング>ip rule を作る(ポリシールーティング)/h2>p>マーク済パケット専用のルーティングが必要。/p>p>ここで専用のルーティングテーブルを作る。/p>pre classcode bash data-langbash data-unlink>MARK666GW2fd00:aaa:afac:1919::1ip -6 rule del table $MARK >& /dev/nullip -6 rule add fwmark $MARK table $MARKip -6 route add $DNET dev $OIF via $GW2 table $MARK/pre>p>ルーティングをテストする/p>pre classcode bash data-langbash data-unlink>MARK666GG2404:6800:400a:80b::200eip -6 route get fibmatch $GG mark $MARK/pre>p>上記のcode>fibmatch/code>を使うと、マッチしたrouting ルールをそのまま表示してくれて便利。add したルールがそのまま表示されればチェック・オッケ。/p>p>削除するときは、次のコマンドで/p>pre classcode bash data-langbash data-unlink>MARK666ip -6 rule del table $MARK >& /dev/nullip -6 route flush table $MARK/pre>p>ミスったらflushしたりdeleteすれば良い。/p>p>今回は、code>google.com AAAA/code>のv6アドレスからサブネット指定した。この宛先アドレスをcode>DNET2000::/3/code> にすることで、v6のa classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%B0%A5%ED%A1%BC%A5%D0%A5%EBIP>グローバルIP/a>空間をすべてをルーティング対象にできるはず。code>2000::/3/code>はcode>::/0/code> やcode>default/code> よりもわかりやすいかと思う。デフォルト使うとリンクローカルとかも混じって面倒かも。/p>h3 idmark-をacceptするメリット>mark をacceptするメリット。/h3>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%D5%A5%A9%A5%EF>フォワ/a>ード・チェインが溢れずに済んだ。/p>p>nftablesは、jump で書いてもいい。しかし、jump jump であふれかえるとjumpのjumpで追跡が煩雑だった。そしてa classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%D5%A5%A9%A5%EF>フォワ/a>ードでジャンプすると、管理が OpenWrt のLuci生成のfw4 と混在してしまう。Openwrt のデフォルトであるfw4はluci の画面設定に依存する。fw4にコマンドで追記していると、どこで追記されたのか、ジャンプ追跡が煩雑すぎた。luci由来のfw4をあまりゴチャゴチャさせたくない。/p>p>また、ルートを変えたいときに、専用のテーブルを触るだけで済むし、一時的に止めたければ、マーク付与テーブルをdelete すれば済むのが嬉しい。/p>p>更にnft はhandleを使うのが面倒。jump でルールを書いたり、delete add したり、add flag dormant とかも、ちょっとした作業に毎回変わるHANDLEを探すのが手間で仕方ない。今回用にマークをつけるテーブル消す・テーブル作るで代用すると遊びやすくなった。/p>p>そういうことで、nft のHANDLEを使わずに、マークをつかうことにした。見るべき箇所がOpenWrtから切り離した別テーブル(マークを付けるテーブル)に限定できて管理がだいぶ楽になりました。/p>h2 idv6-NAT>v6 NAT/h2>p>今回の例は、v6 で NAT66 する例になるのだけど、v6 でNATをする意味ないって思うかもしれないけど、v6 NATも使えると割と便利なんですよね。/p>p>「a classkeyword hrefhttps://d.hatena.ne.jp/keyword/IPv6>IPv6/a>ではNATをしない(不要)」などと教科書には書いてるけど、NATあったほうが絶対便利。好きなIPoEの接続点を出口に据えて、任意a classkeyword hrefhttps://d.hatena.ne.jp/keyword/ISP>ISP/a>から出て回線テストもしやすい。やっぱりv6 NATはアリじゃないかな。/p>p>セキュリティについてもNATは防波堤になり得る気がする。グローバルIPv6で通信するv6は、OSのa classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%D5%A5%A1%A5%A4%A5%A2%A5%A6%A5%A9%A1%BC%A5%EB>ファイアウォール/a>機能に依存するわけで。OSにa classkeyword hrefhttps://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD>脆弱性/a>、つまりa classkeyword hrefhttps://d.hatena.ne.jp/keyword/Linux>Linux/a>のnftablesやa classkeyword hrefhttps://d.hatena.ne.jp/keyword/Windows>Windows/a>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%D5%A5%A1%A5%A4%A5%A2%A5%A6%A5%A9%A1%BC%A5%EB>ファイアウォール/a>にa classkeyword hrefhttps://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD>脆弱性/a>があった場合は、大事故になると思うんですね。またユーザーがコピペで安易な許可設定をしてしまう可能性も怖い。/p>h2 idwindows-のTCPIP-v6の脆弱性>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/windows>windows/a> のa classkeyword hrefhttps://d.hatena.ne.jp/keyword/TCP/IP>TCP/IP/a> v6のa classkeyword hrefhttps://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD>脆弱性/a>/h2>p>NAT66するべきだと思う理由にa classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%BC%A5%ED%A5%C7%A5%A4%B9%B6%B7%E2>ゼロデイ攻撃/a>がある。/p>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%B0%A5%ED%A1%BC%A5%D0%A5%EBIP>グローバルIP/a>が割り当てられていると、OSのa classkeyword hrefhttps://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD>脆弱性/a>の影響をもろに受ける。/p>p>OSのFWにa classkeyword hrefhttps://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD>脆弱性/a>があると、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%B0%A5%ED%A1%BC%A5%D0%A5%EBIP>グローバルIP/a>が割あたっているすべての端末に影響が出る。/p>p>そう思っていたのだが、出てしまった。出てしまったのです。a classkeyword hrefhttps://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD>脆弱性/a>が/p>p>code>CVE-2024-38063/code>でa hrefhttps://forest.watch.impress.co.jp/docs/news/1615926.html>WindowsのTCP/IPのスタック脆弱性/a>でリモートコードの実行されるゼロデイ発覚していた。/p>p>a hrefhttps://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-38063>パッチでる/a>までv6 オフにするレベル。ってやつです。/p>p>緊急パッチはでたものの・・・やっぱり、NAT66でNATもありなかって考えました。端末のIPを管理するにしてもULAのほうが何かと楽かも・・・/p>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/TCP>TCP/a>なのでFWでCONNECTEDを見てれば大丈夫なはずではある。v6関連のチェックが甘くてstate new が通っちゃったりしてないですよね。/p>h2 id今回はv6-NAT-とポリシールーティングで指定PCのGWを変えた>今回はv6 NAT とポリシールーティングで指定PCのGWを変えた。/h2>p>今回は、OpenWrtのfw4 やLuciを使わずに、指定PCや指定サブネットだけは、v6 空間に出られるようにする設定を試してみた。/p>p>wireguardやStrongswanのようなa classkeyword hrefhttps://d.hatena.ne.jp/keyword/VPN>VPN/a>と組み合わせて、好きな箇所からv6アドレス出ていけるし設定をシンプルにする目処がたった/p>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/Linux>Linux/a>箱をルータにしておくとちょっとした思いつきが試せて良いね。/p> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nametakuya_1st >takuya_1st/span>/span> span classentry-footer-time>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/17/000000>time data-relative datetime2024-08-16T15:00:00Z title2024-08-16T15:00:00Z classupdated>2024-08-17 00:00/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/takuya_1st/takuya-1st.hatenablog.jp/subscribe?utm_mediumbutton&utm_sourceblogs_entry_footer&utm_campaignsubscribe_blog> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://takuya-1st.hatenablog.jp/entry/2024/08/17/000000 data-hatena-star-title OpenWrtにfw4でポリシールーティングを入れる data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> /div> div classgoogle-afc-image test-google-rectangle-ads> script> (valve window.valve || ).push(function(v) { v.displayDFPSlot(google_afc_user_container_5); }); /script> div idgoogle_afc_user_container_5 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> iframe classhatena-bookmark-comment-iframe data-srchttps://takuya-1st.hatenablog.jp/iframe/hatena_bookmark_comment?canonical_urihttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2Fentry%2F2024%2F08%2F17%2F000000 frameborder0 scrollingno styleborder: none; width: 100%;> /iframe> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-1600 words-200 mode-markdown entry-odd identry-6801883189129784040 data-keyword-campaign data-uuid6801883189129784040 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/08/16 relnofollow> time datetime2024-08-15T15:00:00Z title2024-08-15T15:00:00Z> span classdate-year>2024/span>span classhyphen>-/span>span classdate-month>08/span>span classhyphen>-/span>span classdate-day>16/span> /time> /a> /div> h1 classentry-title> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/16/000000 classentry-title-link bookmark>nft で指定位置にinsert する/a>/h1> div classentry-categories categories> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/network classentry-category-link category-network>network/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/linux classentry-category-link category-linux>linux/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/nftables classentry-category-link category-nftables>nftables/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/nft classentry-category-link category-nft>nft/a> /div> /header> div classentry-content hatenablog-entry> p>nft で指定位置にinsert する/p>p>既存のルールが次のようになっているとき/p>pre classcode data-lang data-unlink>table inet fw4 { chain forward { # handle 2 type filter hook forward priority filter; policy drop; $EXISTS_RULE # handle 2340 $EXISTS_RULE # handle 2341 $EXISTS_RULE # handle 2345 $EXISTS_RULE # handle 2346 jump handle_reject # handle 2352 }}/pre>p>指定位置(jump handle_a classkeyword hrefhttps://d.hatena.ne.jp/keyword/reject>reject/a> 2532 ) の直前にルールを入れたい/p>pre classcode data-lang data-unlink>nft insert rule inet fw4 forward position 2352 mark 666 counter accept/pre>p>結果は次のようになっている/p>pre classcode data-lang data-unlink>table inet fw4 { chain forward { # handle 2 type filter hook forward priority filter; policy drop; $EXISTS_RULE # handle 2340 $EXISTS_RULE # handle 2341 $EXISTS_RULE # handle 2345 $EXISTS_RULE # handle 2346 meta mark 0x0000029a accept # handle 2563 < 挿入 jump handle_reject # handle 2352 }}/pre>h2 idHANDLEを探す>HANDLEを探す/h2>p>末尾の一つ前に入れたいとき、特定のルールの直前に入れたいときなどあるだろうが、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/grep>grep/a> して探すしか無い。/p>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/GREP>GREP/a>できるようなコメントがとても重要になってくる。/p>pre classcode data-lang data-unlink>TBL'inet fw4'CHAIN'foward'UNIQUE'handle_reject'nft -a list chain $TBL $CHAIN | grep handle_reject | grep -oP '(?<handle )+\d+'/pre>p>ユニークなコメントが有ると、ハンドル探索が楽。/p>pre classcode data-lang data-unlink>TBL'my_table'UNIQUE_COMMENT':Quu9xeik'nft -a list table $TBL | grep $UNIQUE_COMMENT | grep -oP '(?<handle )+\d+'/pre>h2 id直後はADD>直後はADD/h2>p>insert の変わりに、ADDもできる/p>pre classcode data-lang data-unlink>nft add rule $TBL $CHAIN position 2352 mark 666 counter accept/pre>h2 id指定位置のinsertが便利>指定位置のinsertが便利/h2>p>特定のルールの直前に挿入(INSERT)と特定のルールの直後に追加(ADD)をができるのは、nftの特徴で便利。/p>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%D5%A5%A1%A5%A4%A5%A2%A5%A6%A5%A9%A1%BC%A5%EB>ファイアウォール/a>は先頭の一つあとや末尾の1つまえをよく使うと思うので、よく使う挿入箇所はショートカット出来てほしいところ・・・悩ましい。/p> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nametakuya_1st >takuya_1st/span>/span> span classentry-footer-time>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/16/000000>time data-relative datetime2024-08-15T15:00:00Z title2024-08-15T15:00:00Z classupdated>2024-08-16 00:00/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/takuya_1st/takuya-1st.hatenablog.jp/subscribe?utm_mediumbutton&utm_campaignsubscribe_blog&utm_sourceblogs_entry_footer> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://takuya-1st.hatenablog.jp/entry/2024/08/16/000000 data-hatena-star-titlenft で指定位置にinsert する data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> /div> div classgoogle-afc-image test-google-rectangle-ads> script> (valve window.valve || ).push(function(v) { v.displayDFPSlot(google_afc_user_container_6); }); /script> div idgoogle_afc_user_container_6 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> iframe classhatena-bookmark-comment-iframe data-srchttps://takuya-1st.hatenablog.jp/iframe/hatena_bookmark_comment?canonical_urihttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2Fentry%2F2024%2F08%2F16%2F000000 frameborder0 scrollingno styleborder: none; width: 100%;> /iframe> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-4000 words-400 mode-markdown entry-even identry-6801883189129632744 data-keyword-campaign data-uuid6801883189129632744 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/08/15 relnofollow> time datetime2024-08-14T17:39:38Z title2024-08-14T17:39:38Z> span classdate-year>2024/span>span classhyphen>-/span>span classdate-month>08/span>span classhyphen>-/span>span classdate-day>15/span> /time> /a> /div> h1 classentry-title> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/15/023938 classentry-title-link bookmark>nftablesのfowardが記述が大量になる問題。/a>/h1> div classentry-categories categories> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/network classentry-category-link category-network>network/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0 classentry-category-link category-ポリシールーティング>ポリシールーティング/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/linux classentry-category-link category-linux>linux/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/nftables classentry-category-link category-nftables>nftables/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/nft classentry-category-link category-nft>nft/a> /div> /header> div classentry-content hatenablog-entry> h3 idnftablesのテーブルのルールがあふれる>nftablesのテーブルのルールがあふれる/h3>p>どんなに整理しても、既存のforward テーブルがあふれかえることは避けられない。/p>p>細かく条件を入れればいれるほど、forward テーブルに処理が集中してしまい、結局のところa classkeyword hrefhttps://d.hatena.ne.jp/keyword/iptables>iptables/a>時代と何も変わらない気がします。/p>pre classcode data-lang data-unlink>table inet fw4 { chain forward { # policy DROPなのでACCPETを列挙するのだが type filter hook forward priority filter; policy drop; $RULE_001 jump_to_accept $RULE_002 jump_to_accept $RULE_003 jump_to_accept $RULE_004 jump_to_accept $RULE_005 jump_to_accept # ... あふれかえる Accept $RULE_256 accept jump handle_reject } chain handle_reject { reject comment "!fw4: Reject any other traffic" }}/pre>p>jump 先にjumpがあったりすると、追いかけるのが面倒になり嫌になる。/p>h2 id既存テーブルと干渉しやすいから躊躇する>既存テーブルと干渉しやすいから躊躇する/h2>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/iptables>iptables/a>のときもそうだったけど、ルールが増えてくると追いかけるのが面倒になる。新規でルールを突っ込むのを躊躇します。/p>p>OpenWrtのようなnftableを自動生成するソフトウェアが入ってると尚更です。/p>p>inita classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8>スクリプト/a>で追加したのか、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/GUI>GUI/a>からの自動生成かが全くわからん。誰がいつどこでなんのために入れたのか。メモが残せない。/p>h2 id解決策1-commentを使う>解決策1 commentを使う。/h2>p>いちばん簡単な解決策はコメントを使う。/p>pre classcode data-lang data-unlink>table inet fw4 { chain forward { type filter hook forward priority filter; policy drop; $RULE_001 jump_to_accept comment "# by takuya for Router A " $RULE_002 jump_to_accept comment "#!fw4 handle ..." $RULE_003 jump_to_accept comment "# by takuya for Router Be " $RULE_004 jump_to_accept comment "# org.example.www " $RULE_005 jump_to_accept # ... コメントにも限界が。。。 $RULE_256 accept jump handle_reject }}/pre>p>コメントに、識別IDやa classkeyword hrefhttps://d.hatena.ne.jp/keyword/%CC%BE%C1%B0%B6%F5%B4%D6>名前空間/a>を編み出してルール化することになる。のだけど、nftablesってcode>jump / goto/code> で関数のようにルールを使い回せるのが魅力じゃん。/p>p>だったら一つのforwardテーブルに集中するのって、本末転倒な気がしなくもない。/p>h2 id解決策2-ポリシールーティングをする>解決策2 ポリシールーティングをする/h2>p>コメントでもあふれることは避けられないのだから、指定パケットは、別にルーティングを用意して、メインのnftablesのテーブルとは全く別の許可設定やとルーティングするようにしたほうがすっきるするかもしれない。/p>p>ポリシールーティングの例/p>p>マークの有無でパケットをフィルタリングする。/p>p>マークしたパケットを許可すれば良い/p>pre classcode data-lang data-unlink>nft insert rule $TABLE forward mark $MARK counter accept/pre>p>なので、マークを付けるまでの箇所でルールをいっぱい作れる。/p>pre classcode data-lang data-unlink>nft_table_nametakuya_mangleiifeth1oifwan2GW210.0.0.2mark_num1111to_addr'1.1.1.1/32'MAIN_TABLE'inet fw4'# -- ルーティングテーブルを追加ip rule add fwmark $mark_num table $mark_numip route add $to_addr dev $OIF via $GW table $mark_num# -- nftables でごちゃごちゃとマークnft create table ip $nft_table_name nft create chain ip $nft_table_name preroutingnft insert rule ip $nft_table_name prerouting \ iifname $iif ip daddr $to_addr \ counter meta mark set $mark_num \ comment \"takuya_mangle_sample\"## マークしたパケットを許可nft insert rule $MAIN_TABLE forward mark $mark_num counter accept/pre>p>このように書いておけば、マーク済パケットをFoward許可なので、prerouting でマークするときに条件を書くので、forwardにはマークだけになり、set mark している箇所を探せば良くなり、forwardにルールが増えないのでとても便利になる。jump 記述を捨てられる。/p>p>上記の例のように、マーク済のパケットのDefaultルートを変更できるので、特定PCからの特定宛先だけは別経路を通るように設定できるし、Fowardにはマークだけになってルールはシンプルになる。/p>p>code>ip route add src xxx/code>で ソースのアドレスも指定できるのだけどテーブルを分けたほうが楽だよね。/p>p>これにより、fowardのAccept、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/DROP>DROP/a>の順番などを意識せずに、マークを付けたか付いてないかで判断すれば良くなる。つまり条件でマッチするしないをcode>mark unset / mark set/code> の問題に置き換えることができて、複雑化する条件を管理することができる。/p>h2 id解決策3>解決策3/h2>p>まとめられるものはまとめる。/p>p>nftables は code>ipset/code> が使えるので、code>@name { .... }/code> のリストを使ってできる限りまとめる。/p>pre classcode data-lang data-unlink>nft insert rule inet fw4 prerouting iifname $IIF ip saddr @ipset_01 counter /pre>p>また、nftables は code>{ A , B }/code> の列挙ができるので、まとめられるものはできる限りまとめる。/p>pre classcode data-lang data-unlink>nft insert rule inet fw4 prerouting iifname { "wan1", "wan2" } ip saddr @ipset_01 counter /pre>p>ipset の代わりにグルーピングする追加例/p>pre classcode data-lang data-unlink>nft add table my_tablenft add set my_table my_pc { type ipv4_addr \; flags interval \; }nft add element inet my_table my_pc { "192.168.1.100" }nft add element inet my_table my_pc { "192.168.1.101" }/pre>p>追加結果は次のようになる。/p>pre classcode data-lang data-unlink>table my_table { set my_pc { type ipv4_addr flags interval elements { 192.168.2.100, 192.168.2.101 } }}/pre>p>上記のようにすると、code>my_table 中/code>のルールでcode>@my_pc/code> という配列が使える。配列が@マークなのは、なんかa classkeyword hrefhttps://d.hatena.ne.jp/keyword/Bash>Bash/a>っぽいけど我慢/p>p>ただ、まとめすぎると、なぜ「グルーピング」したのかわからなくなるので、これも辛いところ。/p>h2 idなやましい>なやましい/h2>p>とりあえず、先頭にINSERTしておけばなんとかできたa classkeyword hrefhttps://d.hatena.ne.jp/keyword/iptables>iptables/a>が愛おしい。/p>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/%B2%BE%C1%DB%A5%DE%A5%B7%A5%F3>仮想マシン/a>上にnftablesをいっぱい用意して用途別にnftablesをべつマシンで処理したほうが良くねーかもう。/p>p>昔ながらのFWに万能を求めアレコレと処理するというアプローチが間違ってる気がする。/p>p>仮想ネットワークとa classkeyword hrefhttps://d.hatena.ne.jp/keyword/%B2%BE%C1%DB%A5%DE%A5%B7%A5%F3>仮想マシン/a>で用途別にパケットをさばくルーティングをするルーティングPC群として設計したほうが影響範囲を絞って耐障害性も誤操作寛容性も上がるんじゃないのかなぁ。/p>p>小さな物を組み合わせて大きなものを作るというアプローチで、小さなFWを仮想ネットワークで組み合わせて巨大なFWを構成するというアプローチが現代的なんだろうなぁ。/p>p>そうなるとnftablesっている?/p> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nametakuya_1st >takuya_1st/span>/span> span classentry-footer-time>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/15/023938>time data-relative datetime2024-08-14T17:39:38Z title2024-08-14T17:39:38Z classupdated>2024-08-15 02:39/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/takuya_1st/takuya-1st.hatenablog.jp/subscribe?utm_mediumbutton&utm_campaignsubscribe_blog&utm_sourceblogs_entry_footer> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://takuya-1st.hatenablog.jp/entry/2024/08/15/023938 data-hatena-star-titlenftablesのfowardが記述が大量になる問題。 data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> /div> div classgoogle-afc-image test-google-rectangle-ads> script> (valve window.valve || ).push(function(v) { v.displayDFPSlot(google_afc_user_container_7); }); /script> div idgoogle_afc_user_container_7 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> iframe classhatena-bookmark-comment-iframe data-srchttps://takuya-1st.hatenablog.jp/iframe/hatena_bookmark_comment?canonical_urihttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2Fentry%2F2024%2F08%2F15%2F023938 frameborder0 scrollingno styleborder: none; width: 100%;> /iframe> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-last autopagerize_page_element chars-3200 words-400 mode-markdown entry-odd identry-6801883189129631678 data-keyword-campaign data-uuid6801883189129631678 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date last> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/08/15 relnofollow> time datetime2024-08-14T17:21:12Z title2024-08-14T17:21:12Z> span classdate-year>2024/span>span classhyphen>-/span>span classdate-month>08/span>span classhyphen>-/span>span classdate-day>15/span> /time> /a> /div> h1 classentry-title> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/15/022112 classentry-title-link bookmark>nftablesでaccept後のdropにマッチを回避できない。/a>/h1> div classentry-categories categories> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/linux classentry-category-link category-linux>linux/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/network classentry-category-link category-network>network/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/nftables classentry-category-link category-nftables>nftables/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/nft classentry-category-link category-nft>nft/a> /div> /header> div classentry-content hatenablog-entry> p>nftablesでacceptとa classkeyword hrefhttps://d.hatena.ne.jp/keyword/drop>drop/a>にマッチするとa classkeyword hrefhttps://d.hatena.ne.jp/keyword/drop>drop/a>になる問題/p>p>nftablesを使ってると、accept しても他のテーブルでa classkeyword hrefhttps://d.hatena.ne.jp/keyword/reject>reject/a>(a classkeyword hrefhttps://d.hatena.ne.jp/keyword/drop>drop/a>)されてしまうことがある。/p>h2 id複数テーブルでaccept-と-dropが混合しちゃう>複数テーブルでaccept と a classkeyword hrefhttps://d.hatena.ne.jp/keyword/drop>drop/a>が混合しちゃう/h2>p>例えば、tableAとtableBにforwardの許可設定を書くわけよ。tableAでAcceptしてるのに、tableBで a classkeyword hrefhttps://d.hatena.ne.jp/keyword/reject>reject/a> されるから、結果として a classkeyword hrefhttps://d.hatena.ne.jp/keyword/reject>reject/a> になっちゃう。/p>pre classcode data-lang data-unlink>table ip tableA { chain forward { type filter hook forward priority filter; policy drop; iifname br0 oifname eth1 ip6 daddr 1.1.1.1 accept comment "# cf" jump handle_reject }}table inet tableB { chain forward { type filter hook forward priority filter; policy drop; $RULE_A accept jump handle_reject }}/pre>h2 id8888へのforwardを許可する例と拒否する例を同時に入れる>8.8.8.8へのforwardを許可する例と拒否する例を同時に入れる。/h2>p>例えば、code>8.8.8.8/code> との通信を許可(Accept)と拒否(a classkeyword hrefhttps://d.hatena.ne.jp/keyword/Reject>Reject/a>)を同時に入れるとどうなるかを見てみよう。/p>p>先に結果を述べておくと code>accept & reject/code>つまり、code>true & false/code> となり結果はcode>false/code>(拒否・a classkeyword hrefhttps://d.hatena.ne.jp/keyword/REJECT>REJECT/a>)になる/p>p>8.8.8.8 をforward accept する/p>pre classcode data-lang data-unlink>nft create table ip allow8888nft create chain ip allow8888 forward { type filter hook forward priority filter\; policy drop\; }nft add rule ip allow8888 forward iifname br0 oifname wan0 ip daddr 8.8.8.8 counter acceptnft list table ip allow8888/pre>p>8.8.8.8 をforward a classkeyword hrefhttps://d.hatena.ne.jp/keyword/reject>reject/a> する/p>pre classcode data-lang data-unlink>nft create table ip deny8888nft create chain ip deny8888 forward { type filter hook forward priority filter\; policy accept\; }nft add rule ip deny8888 forward iifname br0 oifname wan0 ip daddr 8.8.8.8 counter rejectnft list table ip deny8888/pre>p>パケット送るとa classkeyword hrefhttps://d.hatena.ne.jp/keyword/reject>reject/a>(unreachable)になる/p>pre classcode data-lang data-unlink>PS C:\Users\takuya> ping 8.8.8.8Pinging 8.8.8.8 with 32 bytes of data:Reply from 192.168.1.1: Destination port unreachable.Reply from 192.168.1.1: Destination port unreachable.Reply from 192.168.1.1: Destination port unreachable.Reply from 192.168.1.1: Destination port unreachable./pre>p>カウンタ結果は次のようになる。/p>pre classcode data-lang data-unlink>table ip deny8888 { chain forward { type filter hook forward priority filter; policy drop; iifname "br0" oifname "wan0" ip daddr 8.8.8.8 counter packets 8 bytes 520 reject }}table ip allow8888 { chain forward { type filter hook forward priority filter; policy drop; iifname "br0" oifname "wan0" ip daddr 8.8.8.8 counter packets 8 bytes 520 accept }}/pre>p>カウンタ結果を見ると一目瞭然だが、両方のカウンタが回っている。すなわち、パケットは正しく処理されている。Acceptされたあとにa classkeyword hrefhttps://d.hatena.ne.jp/keyword/Reject>Reject/a>が評価されるのだ。/p>p>これはPriorityだろうと思うかもしれ無いが、優先度を変えても結果は同じである。accept が先に処理されてもあとからa classkeyword hrefhttps://d.hatena.ne.jp/keyword/Reject>Reject/a>されるし、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/Reject>Reject/a>を先にするとAcceptまで到達しない。/p>p>ということなので、ブロックされるルールの直前にルールを差し込む必要がある。/p>p>どうしたらいいんだ。nftables。accept箇所の先もあるんだ。Acceptでは移行をスキップできないんだ止まらいんだ。どうすれば良いのか。/p>h2 idちゃんとinsert-して指定場所に突っ込むしか無い>ちゃんと、insert して指定場所に突っ込むしか無い。/h2>p>めんどくさいことこの上ないが、ちゃんとルールをINSERTして指定場所に差し込む必要がある。/p>p>そうすると、こんどはforwardにルールが集中してしまう、そしてjump があるために、追いかけるのが更に面倒になる。/p>p>forwardを見てもjump 、jump jump jump の多段Jumpが大量に記載されることになり、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/iptables>iptables/a>より追いかけるのが面倒になり・・・/p>p>困っちゃうよ。nftables/p>h2 idjump-追いかけるのが面倒>jump 追いかけるのが面倒。/h2>p>複数テーブルと複数のチェインがあるので、追いかけにくい。どこでa classkeyword hrefhttps://d.hatena.ne.jp/keyword/Drop>Drop/a>されてるのかはcounterを入れて調べることができる。jump さきで jump されてしまうと脳内メモリが追いつかない。/p>p>しかし、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/drop>drop/a> されているルールを回避するのはめんどくさい。/p>p>code>nftables test dump/code> みたいなコマンドがほしい。どのjumpを通ってどこにマッチしてa classkeyword hrefhttps://d.hatena.ne.jp/keyword/drop>drop/a>/a classkeyword hrefhttps://d.hatena.ne.jp/keyword/reject>reject/a>されてるのか追いかけるのが大変だよ。/p>h2 idnft-monitor-trace>nft monitor trace/h2>p>一応、code>nft monitor/code> と code>meta nftrace set 1/code> で追いかけることができるのだが。/p>pre classcode data-lang data-unlink>nft add chain inet fw4 filter { type filter hook prerouting priority -301\; }nft add rule inet fw4 filter trace_chain meta nftrace set 1/pre>p>nftace がなんか動かないんですよねぇ。/p>pre classcode data-lang data-unlink>Error: syntax error, unexpected metaadd rule inet fw4 filter trace_chain meta nftrace set 1/pre>p>もしかしたら、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB>カーネル/a>モジュール??/p>p>counterで地道に追いかけてるけど地獄。。。/p> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nametakuya_1st >takuya_1st/span>/span> span classentry-footer-time>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/15/022112>time data-relative datetime2024-08-14T17:21:12Z title2024-08-14T17:21:12Z classupdated>2024-08-15 02:21/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/takuya_1st/takuya-1st.hatenablog.jp/subscribe?utm_sourceblogs_entry_footer&utm_campaignsubscribe_blog&utm_mediumbutton> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://takuya-1st.hatenablog.jp/entry/2024/08/15/022112 data-hatena-star-titlenftablesでaccept後のdropにマッチを回避できない。 data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> /div> div classgoogle-afc-image test-google-rectangle-ads> script> (valve window.valve || ).push(function(v) { v.displayDFPSlot(google_afc_user_container_8); }); /script> div idgoogle_afc_user_container_8 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> iframe classhatena-bookmark-comment-iframe data-srchttps://takuya-1st.hatenablog.jp/iframe/hatena_bookmark_comment?canonical_urihttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2Fentry%2F2024%2F08%2F15%2F022112 frameborder0 scrollingno styleborder: none; width: 100%;> /iframe> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-1600 words-200 mode-markdown entry-even identry-6801883189129525978 data-keyword-campaign data-uuid6801883189129525978 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/08/14 relnofollow> time datetime2024-08-14T08:19:32Z title2024-08-14T08:19:32Z> span classdate-year>2024/span>span classhyphen>-/span>span classdate-month>08/span>span classhyphen>-/span>span classdate-day>14/span> /time> /a> /div> h1 classentry-title> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/14/171932 classentry-title-link bookmark>nftables で、パケットが該当ルールに届いているかチェックする方法/a>/h1> div classentry-categories categories> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/network classentry-category-link category-network>network/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/linux classentry-category-link category-linux>linux/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/nftables classentry-category-link category-nftables>nftables/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/nft classentry-category-link category-nft>nft/a> /div> /header> div classentry-content hatenablog-entry> p>nftables で、パケットが該当ルールに来ているかチェックする方法/p>p>パケットの行先が不明のとき、どこまでマッチしているか調べる必要がある。このときcounter を使うのが一番簡単。/p>h2 id例えばGooglev6-宛のパケットを探したい>例えば、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/Google>Google/a>(v6) 宛のパケットを探したい/h2>p>次のように、ターゲットとなるチェインにカウンタをINSERTする。/p>pre classcode shell data-langshell data-unlink>GGv6'2404:6800:400a:80b::200e'TBL'inet fw4'CHN'handle_reject'nft insert rule $TBL $CHN meta nfproto ipv6 ip6 daddr $GGv6 counter/pre>p>このように、カウンタをいれる。実際にはもっと具体的な条件で挟む。( iifname / oifname / ip6 saddr / daddr など具体的に。)/p>h2 idカウンタが進むかチェックする>カウンタが進むかチェックする/h2>p>カウンタをいれたチェインを確認する/p>pre classcode shell data-langshell data-unlink>nft list chain $TBL $CHN/pre>p>最初は、パケット数=0、バイト数=0である。/p>pre classcode data-lang data-unlink>table inet fw4 { chain handle_reject { ip6 daddr 2404:6800:400a:80b::200e counter packets 0 bytes 0 meta l4proto tcp reject with tcp reset comment "!fw4: Reject TCP traffic" reject comment "!fw4: Reject any other traffic" }}/pre>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/ping>ping/a> などでパケットを送ってみる。/p>pre classcode data-lang data-unlink>ping 2404:6800:400a:80b::200eDestination port unreachable.Destination port unreachable.Destination port unreachable.Destination port unreachable./pre>p>パケット数を再確認します。/p>pre classcode shell data-langshell data-unlink>nft list chain $TBL $CHN/pre>p>カウントが進んでいるのがわかります。パケット数=4、バイト数=320/p>pre classcode data-lang data-unlink>table inet fw4 { chain handle_reject { ip6 daddr 2404:6800:400a:80b::200e counter packets 4 bytes 320 meta l4proto tcp reject with tcp reset comment "!fw4: Reject TCP traffic" reject comment "!fw4: Reject any other traffic" }}/pre>p>このように、パケットの「カウント」を任意の場所に条件付きで挟み込んで、どこのチェインで処理されたかを知ることができる。/p>p>特に、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/reject>reject/a> / a classkeyword hrefhttps://d.hatena.ne.jp/keyword/drop>drop/a> の手前に差し込むと効果がある。/p>h3 idnft-がおかしいときは-counter-で探す>nft がおかしいときは counter で探す。/h3>p>code>accept -> accept -> reject/code> のように accept後にどこかでa classkeyword hrefhttps://d.hatena.ne.jp/keyword/reject>reject/a> されてパケットが捨てられる可能性が高いためである。/p>p>nftablesでは、複数テーブルで処理されて、code>chainA accept && chainB reject > reject/code> のように複数チェインのどこかでa classkeyword hrefhttps://d.hatena.ne.jp/keyword/DROP>DROP/a>やa classkeyword hrefhttps://d.hatena.ne.jp/keyword/REJECT>REJECT/a>されてしまい、気付かないうちにa classkeyword hrefhttps://d.hatena.ne.jp/keyword/DROP>DROP/a>されて届かないということが頻発する。/p>p>そのため、カウンタでどこに来ているかを慎重にチェックしないと、思わぬところでリジェクトされて届かない。/p> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nametakuya_1st >takuya_1st/span>/span> span classentry-footer-time>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/14/171932>time data-relative datetime2024-08-14T08:19:32Z title2024-08-14T08:19:32Z classupdated>2024-08-14 17:19/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/takuya_1st/takuya-1st.hatenablog.jp/subscribe?utm_campaignsubscribe_blog&utm_sourceblogs_entry_footer&utm_mediumbutton> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://takuya-1st.hatenablog.jp/entry/2024/08/14/171932 data-hatena-star-titlenftables で、パケットが該当ルールに届いているかチェックする方法 data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> /div> div classgoogle-afc-image test-google-rectangle-ads> script> (valve window.valve || ).push(function(v) { v.displayDFPSlot(google_afc_user_container_9); }); /script> div idgoogle_afc_user_container_9 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> iframe classhatena-bookmark-comment-iframe data-srchttps://takuya-1st.hatenablog.jp/iframe/hatena_bookmark_comment?canonical_urihttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2Fentry%2F2024%2F08%2F14%2F171932 frameborder0 scrollingno styleborder: none; width: 100%;> /iframe> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-5200 words-600 mode-markdown entry-odd identry-6801883189130380983 data-keyword-campaign data-uuid6801883189130380983 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/08/02 relnofollow> time datetime2024-08-01T15:00:00Z title2024-08-01T15:00:00Z> span classdate-year>2024/span>span classhyphen>-/span>span classdate-month>08/span>span classhyphen>-/span>span classdate-day>02/span> /time> /a> /div> h1 classentry-title> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/02/000000_1 classentry-title-link bookmark>Gitlab をAPIで使ってレポジトリ(プロジェクト)を管理。レポジトリのコピーと移動/a>/h1> div classentry-categories categories> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/git classentry-category-link category-git>git/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/gitlab classentry-category-link category-gitlab>gitlab/a> /div> /header> div classentry-content hatenablog-entry> h2 idGitlab-を整理したんですが>Gitlab を整理したんですが。/h2>p>レポジトリの取捨選択と移動が手間なので、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/API>API/a>でコマンドから行いました。/p>p>レポジトリを整理し選抜して新サーバーに移動するかどうか決めるときに、100件くらいと削除を繰り返すのが面倒だったので、インポートを使わずに必要なレポジトリだけをclone して push することにした。/p>h2 idGitlab-のAPIで解決させる>Gitlab のa classkeyword hrefhttps://d.hatena.ne.jp/keyword/API>API/a>で解決させる/h2>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/API>API/a>はパーソナルアクセスa classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%C8%A1%BC%A5%AF>トーク/a>ンを使って、プロジェクトの一覧、グループの一覧、グループのプロジェクトの一覧から、プロジェクトのレポジトリを一覧したり削除したり、新規作成できる。/p>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/API>API/a>を使って面倒な削除処理とClone処理を少しでも改善することにする。/p>h2 idGitLabのAPIを使う>GitLabのa classkeyword hrefhttps://d.hatena.ne.jp/keyword/API>API/a>を使う。/h2>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/API>API/a>を使えば、アクセス可能なプロジェクトの名前やURLを取得し、git clone や git push を連続的に行うことができる。/p>h2 idAPIキーの作成>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/API>API/a>キーの作成/h2>p>パーソナルa classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%C8%A1%BC%A5%AF>トーク/a>ンを発行する。span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240818/20240818015314.png width1200 height715 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>ここで発行したアクセス・a classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%C8%A1%BC%A5%AF>トーク/a>ンを使う。/p>h2 idAPIキーのテスト自分のユーザー情報を取得>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/API>API/a>キーのテスト(自分のユーザー情報を取得)/h2>p>自分のユーザー情報/p>pre classcode shell data-langshell data-unlink>MY_TOKENglpat-XXXXXXXXX-2gHOSTgit.example.com## 確認する。curl -s -H "PRIVATE-TOKEN: $MY_TOKEN" "https://$HOST/api/v4/user" | jq -r .id## 保存する。USERID$(curl -s -H "PRIVATE-TOKEN: $MY_TOKEN" "https://$HOST/api/v4/user" | jq -r .id)/pre>p>このように、TOKENを使えば簡単にアクセスできることがわかる。TOKENの確認に自分のユーザー情報取得し、動作チェックすとする。/p>h3 idプロジェクト一覧を取得する>プロジェクト一覧を取得する/h3>p>自分がアクセス可能なプロジェクト一覧を取得する。/p>pre classcode bash data-langbash data-unlink>MY_TOKENglpat-XXXXXXXXX-2gHOSTgit.example.comcurl --header "PRIVATE-TOKEN: $MY_TOKEN" "https://$HOST/api/v4/projects"/pre>h3 id自分のプロジェクト一覧>自分のプロジェクト一覧/h3>p>自分のパーソナルなプロジェクト(レポジトリ)を一覧する。/p>pre classcode bash data-langbash data-unlink>MY_TOKENglpat-XXXXXXXXX-2gHOSTgit.example.comUSERID$(curl -s -H "PRIVATE-TOKEN: $MY_TOKEN" "https://$HOST/api/v4/user" | jq -r .id)curl -H "PRIVATE-TOKEN: $MY_TOKEN" "https://$HOST/api/v4/users/$USERID/projects" | jq ./pre>p>一覧系は、all_available をつけないと、一部が欠損する。/p>h3 idグループ一覧>グループ一覧/h3>pre classcode bash data-langbash data-unlink>MY_TOKENglpat-XXXXXXXXX-2gHOSTgit.example.comcurl --header "PRIVATE-TOKEN: $MY_TOKEN" "https://$HOST/api/v4/groups?all_availableyes&top_level_onlyyes" /pre>p>一覧系は、all_available をつけないと、一部が欠損する。/p>p>グループ内のプロジェクト一覧/p>pre classcode bash data-langbash data-unlink>MY_TOKENglpat-XXXXXXXXX-2gHOSTgit.example.comcurl --header "PRIVATE-TOKEN: $MY_TOKEN" \ "https://$HOST/api/v4/groups/154/projects"/pre>h4 idbashやjs-で使いやすく可能する>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/bash>bash/a>やjs で使いやすく可能する/h4>p>プロジェクトを見やすく、整形して加工する。配列などにしておけば、シェルコマンドから使いやすい。/p>pre classcode bash data-langbash data-unlink>MY_TOKENglpat-XXXXXXXXX-2gHOSTgit.example.comUSERID$(curl -s -H "PRIVATE-TOKEN: $MY_TOKEN" "https://$HOST/api/v4/user" | jq -r .id)curl -H "PRIVATE-TOKEN: $MY_TOKEN" "https://$HOST/api/v4/users/$USERID/projects" > p.jsoncat p.json | jq ' . | { id:.id, name:.name, desc: .description , path: .path, ssh: .ssh_url_to_repo } 'cat p.json | jq . | jq ' "\(.name) \(.ssh_url_to_repo)" ' -rcat p.json | jq . | jq ' "\"\(.path)\": \(.ssh_url_to_repo)" ' -rcat p.json | jq . | jq ' "project\"\(.name)\";project_path\"\(.path)\"" ' -r/pre>h3 idプロジェクト個別の情報を見る>プロジェクト個別の情報を見る。/h3>p>プロジェクトの設定情報や参加者などを個別に見る。/p>pre classcode data-lang data-unlink>PRJID55curl -X GET -H "PRIVATE-TOKEN: $MY_TOKEN" "https://$HOST/api/v4/projects/$PRJID" /pre>h3 idプロジェクトを消す>プロジェクトを消す。/h3>p>要らないな。と思ったプロジェクト消す。/p>pre classcode bash data-langbash data-unlink>PRJID55curl -X DELETE -H "PRIVATE-TOKEN: $MY_TOKEN" "https://$HOST/api/v4/projects/$PRJID" /pre>p>もっと簡単にまとめて消す/p>pre classcode bash data-langbash data-unlink>ARR'35 37 39'for i in $ARR; do echo $i curl -s -X DELETE -H "PRIVATE-TOKEN: $MY_TOKEN" "https://$HOST/api/v4/projects/${i}" | jq . done/pre>p>WEB画面から行うと確認が入ってめんどくさいので、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/API>API/a>から削除する。削除は即座に行われる。二度と復活できない。/p>h3 idプロジェクトをまとめてCloneする>プロジェクトをまとめてCloneする。/h3>p>自分の個人プロジェクトのレポジトリをまとめてgit clone する。/p>pre classcode data-lang data-unlink>MY_TOKENglpat-XXXXXXXXX-2gHOSTgit.example.comUSERID$(curl -s -H "PRIVATE-TOKEN: $MY_TOKEN" "https://$HOST/api/v4/user" | jq -r .id)curl -H "PRIVATE-TOKEN: $MY_TOKEN" "https://$HOST/api/v4/users/$USERID/projects" > p.jsoncat ../p.json | jq . | jq '.ssh_url_to_repo' \ | xargs -I@ git clone @/pre>h3 idプロジェクトを作成する>プロジェクトを作成する。/h3>p>プロジェクトの作成をする。/p>pre classcode bash data-langbash data-unlink>TOKEN2glpat-TOKE2HOST2other.gitlab.example.tldJSON'{ "name": "sample-webui", "path": "sample-webui", "initialize_with_readme": false}'curl -X POST -H "PRIVATE-TOKEN: $TOKEN2 " \ -H "Content-Type: application/json" \ --data "$JSON" \ --url "https://$HOST2/api/v4/projects/"/pre>h3 idプロジェクトのレポジトリへまとめてPushする>プロジェクトのレポジトリへまとめてPushする。/h3>p>以上を踏まえて、一括してcode>git clone/code> て、一括してcode>git push/code> する。/p>p>ここまでの例を使って、すでに不要なプロジェクトを消したので、残るのは別サーバーに移動するものだけが残っています。/p>p>例えば、下記のようにgitlab間のレポジトリのコピーを行うことができる。/p>pre classcode bash data-langbash data-unlink>TOKEN01glpat-TOKEN-11HOST1git.example.comTOKEN02glpat-TOKEN-22HOST2other.gitlab.example.tldHOST2_SSH_PORT23456function list_ssh_url_to_repo(){ USERID$(curl -s -H "PRIVATE-TOKEN: $TOKEN01" "https://$HOST1/api/v4/user" | jq -r .id) curl -H "PRIVATE-TOKEN: $TOKEN01" "https://$HOST1/api/v4/users/$USERID/projects" \ | jq . | jq ' "\"\(.path)\" \"\(.ssh_url_to_repo)\"" ' -r}function create_project(){ name$1 JSON"{ \"name\": \"${name}\", \"path\": \"${name}\", \"initialize_with_readme\": false }" curl -s -X POST -H "PRIVATE-TOKEN: $TOKEN02 " \ -H "Content-Type: application/json" \ --data "$JSON" \ --url "https://$HOST2/api/v4/projects/"}function push_repository(){ name$1 cd $name pwd git remote rename origin old-origin ## とりあえず、自分のユーザーに固定する。 git remote add origin ssh://git@${HOST2}:$HOST2_SSH_PORT/takuya/${name}.git git push --set-upstream origin --all git push --set-upstream origin --tags cd ..}## HOST1 のレポジトリを一旦手元にコピーしてmkdir work cd workfor $url in $( list_ssh_url_to_repo ) ; do git clone $urldone# HOST2 へ全部pushする。for name in $( ls -l ); do create_project $name push_repository $name donecd ..rm -r work/pre>p>もちろん、プロジェクトのTODOや作業ログを含めて移動するとなると、凝ったa classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8>スクリプト/a>にするとか、バックアップを使う必要があるけど、プロジェクトのレポジトリを移動するだけなら、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/API>API/a>でURLを出して、git clone して、新しいGitLabにプロジェクト作成してgit push すれば良いわけです。/p>p>gitlabやa classkeyword hrefhttps://d.hatena.ne.jp/keyword/github>github/a>を使わずに、ベアレポジトリを扱ってたら、「プロジェクト」の概念がなかったのでもっと簡単だったのですが。/p>p>レポジトリを保存するだけに、プロジェクト単位になるのはちょっとした作業になりますね。/p> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nametakuya_1st >takuya_1st/span>/span> span classentry-footer-time>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/02/000000_1>time data-relative datetime2024-08-01T15:00:00Z title2024-08-01T15:00:00Z classupdated>2024-08-02 00:00/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/takuya_1st/takuya-1st.hatenablog.jp/subscribe?utm_mediumbutton&utm_sourceblogs_entry_footer&utm_campaignsubscribe_blog> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://takuya-1st.hatenablog.jp/entry/2024/08/02/000000_1 data-hatena-star-titleGitlab をAPIで使ってレポジトリ(プロジェクト)を管理。レポジトリのコピーと移動 data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> /div> div classgoogle-afc-image test-google-rectangle-ads> script> (valve window.valve || ).push(function(v) { v.displayDFPSlot(google_afc_user_container_10); }); /script> div idgoogle_afc_user_container_10 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> iframe classhatena-bookmark-comment-iframe data-srchttps://takuya-1st.hatenablog.jp/iframe/hatena_bookmark_comment?canonical_urihttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2Fentry%2F2024%2F08%2F02%2F000000_1 frameborder0 scrollingno styleborder: none; width: 100%;> /iframe> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-2000 words-200 mode-markdown entry-even identry-6801883189129751229 data-keyword-campaign data-uuid6801883189129751229 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/08/01 relnofollow> time datetime2024-07-31T15:00:00Z title2024-07-31T15:00:00Z> span classdate-year>2024/span>span classhyphen>-/span>span classdate-month>08/span>span classhyphen>-/span>span classdate-day>01/span> /time> /a> /div> h1 classentry-title> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/01/000000 classentry-title-link bookmark> vscodium - VSCode の自由ソフトウェア版に移行する。/a>/h1> div classentry-categories categories> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/windows classentry-category-link category-windows>windows/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/vscode classentry-category-link category-vscode>vscode/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/floss classentry-category-link category-floss>floss/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/oss classentry-category-link category-oss>oss/a> /div> /header> div classentry-content hatenablog-entry> h2 idvs-code-は-MSなので将来が不安>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/vs%20code>vs code/a> は MSなので将来が不安/h2>p>MSはいまは、とてもフレンドリーに見えるとはいえ、過去の行動を考えると不安だ。/p>p>また、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/Google>Google/a>が自由ソフトウェアを食い物にしている現状を考えてもa classkeyword hrefhttps://d.hatena.ne.jp/keyword/VS%20Code>VS Code/a>は今後に不安を覚える/p>h2 idVS-Codium-に移行する>VS Codium に移行する/h2>p>そんなに気にすることでもないかもしれないが。/p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240815/20240815155555.png width1200 height674 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>MS a classkeyword hrefhttps://d.hatena.ne.jp/keyword/VSCode>VSCode/a> に利用状況といえど、蒐集されるのは、気分がいいものではない。/p>h2 idインストール>インストール/h2>pre classcode data-lang data-unlink>chco install vscodium/pre>h2 id起動など>起動など/h2>p>ロゴにa classkeyword hrefhttps://d.hatena.ne.jp/keyword/%C3%F8%BA%EE%B8%A2>著作権/a>があるので、ロゴは変わるが、その他で特筆すべき変化はない。/p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240815/20240815155927.png width950 height449 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240815/20240815155942.png width1200 height856 loadinglazy title classhatena-fotolife itempropimage>/span>/p>h2 id何ら通常と変わらない>何ら通常と変わらない。/h2>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240815/20240815160436.png width1200 height850 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>しばらく使ってみることにする。/p>h2 idエディタのタブサイズを設定した>エディタのタブサイズを設定した。/h2>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240815/20240815184207.png width906 height541 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>PlainTextファイルはタブサイズを「別途」で指定しないと上書きできないようになってた。TAB=8はデカすぎるねん。/p>h2 idWindowsの右クリックメニューを占拠された>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/Windows>Windows/a>の右クリックメニューを占拠された/h2>p>VSCodiumでもa classkeyword hrefhttps://d.hatena.ne.jp/keyword/Vs%20Code>Vs Code/a> と同じようにすべてのファイルに対する右クリックメニューが作られた。こういうところは真似しなくて良いんですよ。。。/p>pre classcode powershell data-langpowershell data-unlink>## VS Code 同様にCodiumがうるさいので消す。New-ItemProperty -LiteralPath 'HKLM:\SOFTWARE\Classes\Drive\shell\VSCodium' -Name 'LegacyDisable' -PropertyType 'String' -Value ''Move-Item -LiteralPath 'HKLM:\SOFTWARE\Classes\Drive\shell\VSCodium' -Destination 'HKLM:\SOFTWARE\Classes\Drive\shellex\VSCodium'New-ItemProperty -LiteralPath 'HKLM:\SOFTWARE\Classes\Directory\shell\VSCodium' -Name 'LegacyDisable' -PropertyType 'String' -Value ''Move-Item -LiteralPath 'HKLM:\SOFTWARE\Classes\Directory\shell\VSCodium' -Destination 'HKLM:\SOFTWARE\Classes\Directory\shellex\VSCodium'Move-Item -LiteralPath 'HKLM:\SOFTWARE\Classes\*\shell\VSCodium' -Destination 'HKLM:\SOFTWARE\Classes\*\shellex\VSCodium'/pre>p>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/05/12/000000>VSCodeと同じよう/a>に消すことになった/p>p>code>.bat/code> ファイルのように、Openを上書きできないものは、Shellメニューに追加する。/p>pre classcode powershell data-langpowershell data-unlink>## vs code 開くに追加## .batNew-Item -Path 'HKCU:\SOFTWARE\Classes\batfile' -ItemType Directory New-Item -Path 'HKCU:\SOFTWARE\Classes\batfile\shell' -ItemType Directory New-Item -Path 'HKCU:\SOFTWARE\Classes\batfile\shell\VSCodium' -ItemType Directory New-Item -Path 'HKCU:\SOFTWARE\Classes\batfile\shell\VSCodium\command' -ItemType Directory New-ItemProperty -Path 'HKCU:\SOFTWARE\Classes\batfile\shell\VSCodium' -Name 'Icon' -Value "C:\Program Files\VSCodium\VSCodium.exe"New-ItemProperty -Path 'HKCU:\SOFTWARE\Classes\batfile\shell\VSCodium\command' -Name '(Default)' -Value '"C:\Program Files\VSCodium\VSCodium.exe" "%1"'/pre> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nametakuya_1st >takuya_1st/span>/span> span classentry-footer-time>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/01/000000>time data-relative datetime2024-07-31T15:00:00Z title2024-07-31T15:00:00Z classupdated>2024-08-01 00:00/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/takuya_1st/takuya-1st.hatenablog.jp/subscribe?utm_campaignsubscribe_blog&utm_sourceblogs_entry_footer&utm_mediumbutton> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://takuya-1st.hatenablog.jp/entry/2024/08/01/000000 data-hatena-star-title vscodium - VSCode の自由ソフトウェア版に移行する。 data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> /div> div classgoogle-afc-image test-google-rectangle-ads> script> (valve window.valve || ).push(function(v) { v.displayDFPSlot(google_afc_user_container_11); }); /script> div idgoogle_afc_user_container_11 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> iframe classhatena-bookmark-comment-iframe data-srchttps://takuya-1st.hatenablog.jp/iframe/hatena_bookmark_comment?canonical_urihttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2Fentry%2F2024%2F08%2F01%2F000000 frameborder0 scrollingno styleborder: none; width: 100%;> /iframe> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-4000 words-600 mode-markdown entry-odd identry-6801883189124351416 data-keyword-campaign data-uuid6801883189124351416 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/07/24 relnofollow> time datetime2024-07-24T06:21:12Z title2024-07-24T06:21:12Z> span classdate-year>2024/span>span classhyphen>-/span>span classdate-month>07/span>span classhyphen>-/span>span classdate-day>24/span> /time> /a> /div> h1 classentry-title> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/07/24/152112 classentry-title-link bookmark> wsl で xming(vcxsrv) 経由で mpv を起動する。/a>/h1> div classentry-categories categories> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/windows classentry-category-link category-windows>windows/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/wsl classentry-category-link category-wsl>wsl/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/wslv1 classentry-category-link category-wslv1>wslv1/a> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/mpv classentry-category-link category-mpv>mpv/a> /div> /header> div classentry-content hatenablog-entry> h2 idwsl-からXwindowのウインドウアプリを起動するには>wsl からXwindowのウインドウアプリを起動するには/h2>p>WSLでウインドウを使うアプリ起動するには、WSLからa classkeyword hrefhttps://d.hatena.ne.jp/keyword/X%20Window>X Window/a> サーバーに接続すれば良い。/p>p>a hrefhttps://takuya-1st.hatenablog.jp/entry/2020/11/08/135059>https://takuya-1st.hatenablog.jp/entry/2020/11/08/135059/a>/p>p>殆どの場合は、これで動く/p>h2 idmpv-は動かない>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/mpv>mpv/a> は動かない/h2>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/mpv>mpv/a> は a classkeyword hrefhttps://d.hatena.ne.jp/keyword/openGL>openGL/a>が必要なのでそのままだとエラーになる。/p>p>大きく分けて2つのエラーが出てくる/p>pre classcode data-lang data-unlink>error: XDG_RUNTIME_DIR is invalid or not set in the environment.X Error of failed request: GLXUnsupportedPrivateRequest/pre>ul>li>XDG_RUNTIME_DIR がない/li>li>GLX が使えない/li>/ul>p>いかにエラーメッセージを残しておく。/p>pre classcode data-lang data-unlink>vo/gpu/x11 X11 error: BadRequest (invalid request code or no such operation)vo/gpu/x11 Type: 0, display: 0x7fe33c003f80, resourceid: 5a, serial: 10vo/gpu/x11 Error code: 1, request code: 92, minor code: 19vo/gpu/opengl Suspected software renderer or indirect context.vo/gpu VT_GETMODE failed: Inappropriate ioctl for devicevo/gpu/opengl Failed to set up VT switcher. Terminal switching will be unavailable.vo/gpu/opengl Listing DRM devices with drmGetDevices failed! (No such file or directory)vo/gpu/opengl Failed to find a usable DRM primary node!vo/gpu/opengl Failed to create KMS.vo/gpu-next/x11 X11 error: BadRequest (invalid request code or no such operation)vo/gpu-next/x11 Type: 0, display: 0x7fe33c0d0820, resourceid: 5a, serial: 10vo/gpu-next/x11 Error code: 1, request code: 92, minor code: 19vo/gpu-next/opengl Suspected software renderer or indirect context.vo/gpu-next Can't handle VT release - signal already usedvo/gpu-next/opengl Failed to set up VT switcher. Terminal switching will be unavailable.vo/gpu-next/opengl Listing DRM devices with drmGetDevices failed! (No such file or directory)vo/gpu-next/opengl Failed to find a usable DRM primary node!vo/gpu-next/opengl Failed to create KMS.vo/vdpau/x11 X11 error: BadRequest (invalid request code or no such operation)vo/vdpau/x11 Type: 0, display: 0x7fe33c0d0820, resourceid: 5a, serial: 10vo/vdpau/x11 Error code: 1, request code: 92, minor code: 19Failed to open VDPAU backend libvdpau_nvidia.so: cannot open shared object file: No such file or directoryvo/vdpau Error when calling vdp_device_create_x11: 1vo/xv/x11 X11 error: BadRequest (invalid request code or no such operation)vo/xv/x11 Type: 0, display: 0x7fe33c0d0820, resourceid: 5a, serial: 10vo/xv/x11 Error code: 1, request code: 92, minor code: 19Xlib: extension "XVideo" missing on display "127.0.0.1:0.0".vo/xv Xv not supported by this X11 version/driverX Error of failed request: GLXUnsupportedPrivateRequest Major opcode of failed request: 143 (GLX) Minor opcode of failed request: 17 (X_GLXVendorPrivateWithReply) Serial number of failed request: 124 Current serial number in output stream: 124/pre>h2 id対応-XDG_RUNTIME_DIR>対応 XDG_RUNTIME_DIR/h2>p>XDG_RUNTIME_DIR が無いのであれば作れば良い。/p>pre classcode data-lang data-unlink>export XDG_RUNTIME_DIR/tmp/xdg-runtime-$USERmkdir -p $XDG_RUNTIME_DIRchmod 700 $XDG_RUNTIME_DIR/pre>h2 id対応-OpenGL-GLX-をつけて起動>対応 a classkeyword hrefhttps://d.hatena.ne.jp/keyword/OpenGL>OpenGL/a> (GLX) をつけて起動/h2>p>code>VcXsrv/code> を起動するときに、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/Windows>Windows/a> のa classkeyword hrefhttps://d.hatena.ne.jp/keyword/OpenGL>OpenGL/a>を使うように指定しておく/p>pre classcode data-lang data-unlink>"C:\Program Files\VcXsrv\vcxsrv.exe" :0 -multiwindow -clipboard -wgl/pre>p>注意事項として、VcXsrv を使うこと。a classkeyword hrefhttps://d.hatena.ne.jp/keyword/Xming>Xming/a>の場合は GL 関連のライブラリが含まれてないことがるので、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/Xming>Xming/a>のビルドとインストールを見直す必要がある。( code>-wgl/code>オプションがなかった )めんどうだったんだよね。VcXsrvなら動いたのでこっちを使うことにした。/p>p>次のように起動したspan itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240724/20240724152338.png width1200 height267 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>タスクトレイに常駐している/p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240724/20240724152357.png width201 height98 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>WScript(a classkeyword hrefhttps://d.hatena.ne.jp/keyword/JScript>JScript/a>)で起動する場合は、スペースがうざいが、次のようにする。/p>pre classcode js data-langjs data-unlink>var ws WScript.Createobject("WScript.Shell")ws.Run('\"C:/Program Files/VcXsrv/vcxsrv.exe\" :0 -multiwindow -clipboard -wgl',0)/pre>h2 idmpv-起動>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/mpv>mpv/a> 起動/h2>p>以上のことを終わらせると、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/mpv>mpv/a> を起動することができた。/p>p> span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20240724/20240724150255.png width1200 height530 loadinglazy title classhatena-fotolife itempropimage>/span>/p>h2 idサウンド再生>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9>サウンド/a>再生/h2>p>ただ、まだa classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9>サウンド/a>がでてこない。/p>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/X%20Window>X Window/a>サーバーにあれこれ設定しても多分徒労なので、a hrefhttps://takuya-1st.hatenablog.jp/entry/2021/11/10/040122>PulseAudio をネットワーク越し/a>に使うことにする。/p>pre classcode data-lang data-unlink>C:/Users/takuya/AppData/Roaming/PulseAudio/bin/pulseaudio.exe/pre>p>以上で、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/MPV>MPV/a>をWSLのコンソールから使うことができた。/p>h2 idまとめ>まとめ/h2>p>wsl で a classkeyword hrefhttps://d.hatena.ne.jp/keyword/mpv>mpv/a> をインストールして動画再生/p>pre classcode data-lang data-unlink>## wsl 側sudo apt update && sudo apt install mpv export DISPLAYlocalhost:0.0export XDG_RUNTIME_DIR/tmp/xdg-runtime-$USERmkdir -p $XDG_RUNTIME_DIRchmod 700 $XDG_RUNTIME_DIR/pre>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/Windows>Windows/a>側/p>pre classcode data-lang data-unlink>choco install vcxsrv"C:\Program Files\VcXsrv\vcxsrv.exe" :0 -multiwindow -clipboard -wgl/pre>p>再生開始/p>pre classcode data-lang data-unlink># wsl からmpv http://127.0.0.1/example/sample.mp4/pre>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9>サウンド/a>に関しては、a hrefhttps://takuya-1st.hatenablog.jp/entry/2021/11/10/040122>PulseAudioのインストールを参考/a>に設定する。/p>p>これで、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/mpv>mpv/a> をコマンドから扱えるので、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/mpv>mpv/a> に関する調査をするのに、a classkeyword hrefhttps://d.hatena.ne.jp/keyword/Ubuntu>Ubuntu/a>マシンを用意せずに済む。a classkeyword hrefhttps://d.hatena.ne.jp/keyword/Windows>Windows/a>から行える。便利。/p>h2 id2024-08-09>2024-08-09/h2>p>WScript で起動する方法を追加。/p> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nametakuya_1st >takuya_1st/span>/span> span classentry-footer-time>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/07/24/152112>time data-relative datetime2024-07-24T06:21:12Z title2024-07-24T06:21:12Z classupdated>2024-07-24 15:21/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/takuya_1st/takuya-1st.hatenablog.jp/subscribe?utm_mediumbutton&utm_campaignsubscribe_blog&utm_sourceblogs_entry_footer> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://takuya-1st.hatenablog.jp/entry/2024/07/24/152112 data-hatena-star-title wsl で xming(vcxsrv) 経由で mpv を起動する。 data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> /div> div classgoogle-afc-image test-google-rectangle-ads> script> (valve window.valve || ).push(function(v) { v.displayDFPSlot(google_afc_user_container_12); }); /script> div idgoogle_afc_user_container_12 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> iframe classhatena-bookmark-comment-iframe data-srchttps://takuya-1st.hatenablog.jp/iframe/hatena_bookmark_comment?canonical_urihttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2Fentry%2F2024%2F07%2F24%2F152112 frameborder0 scrollingno styleborder: none; width: 100%;> /iframe> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-800 words-100 mode-markdown entry-even identry-6801883189119338438 data-keyword-campaign data-uuid6801883189119338438 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/07/04 relnofollow> time datetime2024-07-04T02:28:44Z title2024-07-04T02:28:44Z> span classdate-year>2024/span>span classhyphen>-/span>span classdate-month>07/span>span classhyphen>-/span>span classdate-day>04/span> /time> /a> /div> h1 classentry-title> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/07/04/112844 classentry-title-link bookmark> mpv でキー操作を書き換える。/a>/h1> div classentry-categories categories> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/mpv classentry-category-link category-mpv>mpv/a> /div> /header> div classentry-content hatenablog-entry> h3 idmpv-のスキップ機能が不便なので改善する>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/mpv>mpv/a> のスキップ機能が不便なので改善する。/h3>p>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/mpv>mpv/a> はcode>input.conf/code> で キー操作を上書き(変更)できるので、設定を変更して便利に使いたい。/p>h2 id設定ファイルの場所と作成>設定ファイルの場所と・作成/h2>pre classcode data-lang data-unlink>touch ~/.config/mpv/input.confcat ~/.config/mpv/input.conf/pre>p>設定ファイルはGlobalでもUserでもどちらでもいい/p>h3 idconfigmpvinputconf>~/.config/a classkeyword hrefhttps://d.hatena.ne.jp/keyword/mpv>mpv/a>/input.conf/h3>pre classcode data-lang data-unlink>UP osd-msg seek 300 exactDOWN osd-msg seek -300 exactRIGHT osd-msg seek 20 exactLEFT osd-msg seek -20 exact/pre>p>キーと、操作内容を書いた./p>p>code>osd-msg/code> は画面に現在の再生位置を表示する。a classkeyword hrefhttps://d.hatena.ne.jp/keyword/osd>osd/a>は code>on screen display/code> とかでよく使われる用語。ここの code>s/code> は status の s かもれしれない。設定自体はcode>--osd-on-seek<no,bar,msg,msg-bar>/code> に相当する。/p>p>再生スキップ時に何分スキップしたか見えないと不便なので、をon にしてる。/p>p>seek で 指定秒数をスキップする。書式は、code>seek <target> <flags>/code>/p>p>この設定を応用すれば、スクショを撮ってその場でアップロードとかもできるかもしれない。/p>h2 id参考資料>参考資料/h2>p>a hrefhttps://mpv.io/manual/stable/#named-arguments>mpv マニュアル/a>/p> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nametakuya_1st >takuya_1st/span>/span> span classentry-footer-time>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/07/04/112844>time data-relative datetime2024-07-04T02:28:44Z title2024-07-04T02:28:44Z classupdated>2024-07-04 11:28/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/takuya_1st/takuya-1st.hatenablog.jp/subscribe?utm_campaignsubscribe_blog&utm_sourceblogs_entry_footer&utm_mediumbutton> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://takuya-1st.hatenablog.jp/entry/2024/07/04/112844 data-hatena-star-title mpv でキー操作を書き換える。 data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> /div> div classgoogle-afc-image test-google-rectangle-ads> script> (valve window.valve || ).push(function(v) { v.displayDFPSlot(google_afc_user_container_13); }); /script> div idgoogle_afc_user_container_13 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> iframe classhatena-bookmark-comment-iframe data-srchttps://takuya-1st.hatenablog.jp/iframe/hatena_bookmark_comment?canonical_urihttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2Fentry%2F2024%2F07%2F04%2F112844 frameborder0 scrollingno styleborder: none; width: 100%;> /iframe> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-1600 words-200 mode-markdown entry-odd identry-6801883189119335593 data-keyword-campaign data-uuid6801883189119335593 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/07/03 relnofollow> time datetime2024-07-02T23:00:00Z title2024-07-02T23:00:00Z> span classdate-year>2024/span>span classhyphen>-/span>span classdate-month>07/span>span classhyphen>-/span>span classdate-day>03/span> /time> /a> /div> h1 classentry-title> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/07/03/080000 classentry-title-link bookmark> mpv の設定を書いて、起動オプションを省略する/a>/h1> div classentry-categories categories> a hrefhttps://takuya-1st.hatenablog.jp/archive/category/mpv classentry-category-link category-mpv>mpv/a> /div> /header> div classentry-content hatenablog-entry> h2 idmpv-の設定は以下の場所に設置できる>a classkeyword hrefhttps://d.hatena.ne.jp/keyword/mpv>mpv/a> の設定は以下の場所に設置できる。/h2>ul>li>/etc/a classkeyword hrefhttps://d.hatena.ne.jp/keyword/mpv>mpv/a>//li>li>/usr/local/etc/a classkeyword hrefhttps://d.hatena.ne.jp/keyword/mpv>mpv/a>//li>li>~/.config/a classkeyword hrefhttps://d.hatena.ne.jp/keyword/mpv>mpv/a>//li>/ul>p>上記に設定ファイル(a classkeyword hrefhttps://d.hatena.ne.jp/keyword/mpv>mpv/a>.conf)を設置すると、起動時に読み込まれる。/p>p>ファイル名も固定で指定できてcode>/etc/mpv/{mpv.conf,input.conf}/code> のファイルを指定できる。input.conf はキー操作に関する設定。a classkeyword hrefhttps://d.hatena.ne.jp/keyword/mpv>mpv/a>.conf は起動オプションに関する設定である。ファイル名も設定で変えられるはずだが、変えないほうが無難だと思う。/p>h2 id設定例>設定例/h2>p>たとえば、コマンドのオプションの次の場合/p>pre classcode data-lang data-unlink>mpv --fullscreen /pre>p>設定ファイルは次のようになる。/p>pre classcode data-lang data-unlink>touch ~/.config/mpv/{mpv.conf,input.conf}/pre>pre classcode ini data-langini data-unlink>## 設定例fullscreenyes/pre>p>引数でcode>XX/code> と変数を与えない場合、つまり引数の有無で判断する場合は、YESを書いてあげる。/p>p>つぎに、コマンドのオプションで値を与える場合/p>pre classcode data-lang data-unlink>mpv --audio-devicealsa/sysdefault/pre>p>値がある場合は次のようになる。/p>pre classcode ini data-langini data-unlink>## 設定例audio-devicealsa/sysdefault/pre>p>この場合は、設定ファイルにそのまま書けばいい/p>h4 id起動オプションと設定の対応>起動オプションと設定の対応/h4>p>設定自体は、公式サイトに解説がある。/p>p>公式サイトの解説によれば、次のように対応してる。/p>table>thead>tr>th styletext-align:left;> Option /th>th styletext-align:left;> Configuration file entry /th>/tr>/thead>tbody>tr>td styletext-align:left;>--flag /td>td styletext-align:left;> flag /td>/tr>tr>td styletext-align:left;>-opt val /td>td styletext-align:left;> optval /td>/tr>tr>td styletext-align:left;>--optval /td>td styletext-align:left;> optval /td>/tr>tr>td styletext-align:left;>-opt has spaces /td>td styletext-align:left;> opthas spaces /td>/tr>/tbody>/table>h3 id設定例-1>設定例/h3>p>設定書式は INI 形式である。/p>pre classcode ini data-langini data-unlink># normal top-level optionfullscreenyesaudio-devicealsa/sysdefaulthr-seekyes#hr-seek-demuxer-offset20#hr-seek-framedropno# a profile that can be enabled with --profilebig-cachebig-cachecacheyesdemuxer-max-bytes512MiBdemuxer-readahead-secs20networkprofile-desc"profile for content over network"force-windowimmediate# you can also include other profilesprofilebig-cachereduce-juddervideo-syncdisplay-resampleinterpolationyes# using a profile again extends itnetworkdemuxer-max-back-bytes512MiB# reference a builtin profileprofilefast/pre>p>こんな感じに色々と設定できる。/p>h2 id参考資料>参考資料/h2>p>a hrefhttps://mpv.io/manual/stable/>https://mpv.io/manual/stable//a>/p> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nametakuya_1st >takuya_1st/span>/span> span classentry-footer-time>a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/07/03/080000>time data-relative datetime2024-07-02T23:00:00Z title2024-07-02T23:00:00Z classupdated>2024-07-03 08:00/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/takuya_1st/takuya-1st.hatenablog.jp/subscribe?utm_campaignsubscribe_blog&utm_sourceblogs_entry_footer&utm_mediumbutton> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://takuya-1st.hatenablog.jp/entry/2024/07/03/080000 data-hatena-star-title mpv の設定を書いて、起動オプションを省略する data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> /div> div classgoogle-afc-image test-google-rectangle-ads> script> (valve window.valve || ).push(function(v) { v.displayDFPSlot(google_afc_user_container_14); }); /script> div idgoogle_afc_user_container_14 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> iframe classhatena-bookmark-comment-iframe data-srchttps://takuya-1st.hatenablog.jp/iframe/hatena_bookmark_comment?canonical_urihttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2Fentry%2F2024%2F07%2F03%2F080000 frameborder0 scrollingno styleborder: none; width: 100%;> /iframe> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> !-- rakuten_ad_target_end --> !-- google_ad_section_end --> div classpager autopagerize_insert_before> span classpager-next> a hrefhttps://takuya-1st.hatenablog.jp/?page1719961200 relnext>次のページ/a> /span> /div> /div> /div> aside idbox1> div idbox1-inner> /div>/aside> /div>!-- #wrapper --> aside idbox2> div idbox2-inner> div classhatena-module hatena-module-html> div classhatena-module-title>サイト内検索/div> div classhatena-module-body> form classsearch-form custom actionhttps://duckduckgo.com methodget target_blank> input typetext placeholderサイト内検索 size20 nameq classsearch-module-input styleinput::input-placeholder { color: #ccc;}> input typehidden namesites valuetakuya-1st.hatenablog.jp >input typesubmit valuego >/form>br/>script async src//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js>/script>!-- -->ins classadsbygoogle styledisplay:inline-block;width:200px;height:200px data-ad-clientca-pub-7708740420636125 data-ad-slot1581249460>/ins>script>(adsbygoogle window.adsbygoogle || ).push({});/script> /div>/div> div classhatena-module hatena-module-search-box> div classhatena-module-title> はてなブログ全文検索 /div> div classhatena-module-body> form classsearch-form rolesearch actionhttps://takuya-1st.hatenablog.jp/search methodget> input typetext nameq classsearch-module-input value placeholder記事を検索 required> input typesubmit value検索 classsearch-module-button />/form> /div>/div> div classhatena-module hatena-module-html> div classhatena-module-title>Pythonスクレーパ/div> div classhatena-module-body> a hrefhttps://j.mp/2hbsOmN>img srchttps://images-na.ssl-images-amazon.com/images/I/61%2BeYUm8CNL.jpg width200>/a>a hrefhttp://j.mp/2hbsOmN>Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド/a> /div>/div> div classhatena-module hatena-module-html> div classhatena-module-title>マグで頂きます!/div> div classhatena-module-body> a hrefhttps://www.amazon.co.jp/dp/B000J4P83Q/?tagtakuya-hateblo-22&linkCodeas1&creative6339>img srchttps://images-na.ssl-images-amazon.com/images/I/71oayUMwNnL._SL1500_.jpg width200 />/a>takuya_1stがブログで一番伝えたいこと。br/>a hrefhttps://takuya-1st.hatenablog.jp/entry/20120226/1330260721>触れてはいけない/a> /div>/div> div classhatena-module hatena-module-html> div classhatena-module-title>大人女子ヌケ感メイク/div> div classhatena-module-body> a target_blank hrefhttp://j.mp/2gQzHtI>img srchttps://images-na.ssl-images-amazon.com/images/I/8118dFvX2IL.jpg width75px>/a> /div>/div> div classhatena-module hatena-module-html> div classhatena-module-title>自転車始めました/div> div classhatena-module-body> a hrefhttp://j.mp/1MpUMCr>img srchttps://ecx.images-amazon.com/images/I/91RqKaYqgCL._SL1500_.jpg width60 height85 >/a>a hrefhttp://j.mp/1MpVXSv >img srchttps://ecx.images-amazon.com/images/I/71CochBBBVL._SL1024_.jpg width60 height85 >/a>a hrefhttp://j.mp/1MpV1xm>img srchttps://ecx.images-amazon.com/images/I/91JUCF1748L._SL1500_.jpg width60 height85 >/a>自転車のモチベーションアップに /div>/div> div classhatena-module hatena-module-html> div classhatena-module-title>女の子、はじめました/div> div classhatena-module-body> a hrefhttp://j.mp/1opPqkm>img border0 srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20140812/20140812040352.jpg width50px >/a>img srchttps://ir-jp.amazon-adsystem.com/e/ir?ttakuya018-22&las2&o9&a4092303599 width1 height1 border0 alt styleborder:none !important; margin:0px !important; />a hrefhttp://j.mp/1nJhzge>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20140812/20140812043713.jpg width45px />/a>a hrefhttp://j.mp/1nJhWqW >img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20140812/20140812043940.jpg width50px />/a>br/>a hrefhttp://j.mp/1nJjcui titleはじめて めイク>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20140812/20140812044653.jpg width50px />/a> /div>/div> div classhatena-module hatena-module-profile> div classhatena-module-title> 人気のプロフィール /div> div classhatena-module-body> a hrefhttps://takuya-1st.hatenablog.jp/about classprofile-icon-link> img srchttps://cdn.profile-image.st-hatena.com/users/takuya_1st/profile.png altid:takuya_1st classprofile-icon /> /a> span classid> a hrefhttps://takuya-1st.hatenablog.jp/about classhatena-id-link>span data-load-nickname1 data-user-nametakuya_1st>id:takuya_1st/span>/a> /span> div classprofile-description> p>大学院がLinuxとかRubyについてかくよ。/p>p>マイナーなものは好きな判官贔屓。/p>p>EmEditorbr />Cygwinbr />Mac OSXbr />Opera/p> /div> div classhatena-follow-button-box btn-subscribe js-hatena-follow-button-box > a href# classhatena-follow-button js-hatena-follow-button> span classsubscribing> span classforeground>読者です/span> span classbackground>読者をやめる/span> /span> span classunsubscribing data-track-nameprofile-widget-subscribe-button data-track-once> span classforeground>読者になる/span> span classbackground>読者になる/span> /span> /a> div classsubscription-count-box js-subscription-count-box> i>/i> u>/u> span classsubscription-count js-subscription-count> /span> /div>/div> div classprofile-about> a hrefhttps://takuya-1st.hatenablog.jp/about>このブログについて/a> /div> /div>/div> div classhatena-module hatena-module-html> div classhatena-module-title>Google Translate/div> div classhatena-module-body> div idgoogle_translate_element>/div>script typetext/javascript>function googleTranslateElementInit() { new google.translate.TranslateElement({pageLanguage: ja, layout: google.translate.TranslateElement.InlineLayout.HORIZONTAL}, google_translate_element);}/script>script typetext/javascript src//translate.google.com/translate_a/element.js?cbgoogleTranslateElementInit>/script> /div>/div> div classhatena-module hatena-module-links> div classhatena-module-title> 人気のコンテンツ /div> div classhatena-module-body> ul classhatena-urllist> li> a href/entry/20111121/1321865738>Cygwinを使うべき10+の理由/a> /li> li> a hrefhttp://j.mp/1opPKiR>女の子、はじめます。/a> /li> li> a href/entry/20121017/1350489919>オークション送料節約/a> /li> li> a href/entry/20100103/1262470913>PiTaPaの感想/a> /li> li> a href/entry/20120119/1326951657>エネループの比較/a> /li> li> a hrefhttp://www.amazon.co.jp/gp/search?tagtakuya-hateblo-22&indexblended&field-keywords%E3%83%90%E3%83%83%E3%83%86%E3%83%AA%E3%83%BC&__mk_ja_JP%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&linkCodeqs>イケてるバッテリ/a> /li> li> a hrefhttp://hb.afl.rakuten.co.jp/hgc/10956e7a.b8fa52ff.10956e7b.93206b3d/?pchttp%3a%2f%2ftravel.rakuten.co.jp%2fHOTEL%2f69219%2f69219.html%3fcid%3dtr_af_1632%26scid%3daf_link_txt&mhttp%3a%2f%2fm.travel.rakuten.co.jp%2fportal%2fi%2fm_afy.ra%3fuid%3dNULLGWDOCOMO%26nurl%3dtravel.rakuten.co.jp%252Fh%252F69219>スーパーホテル品川・青物横丁/a> /li> /ul> /div>/div> div classhatena-module hatena-module-html> div classhatena-module-title>ユカは抜けるのか?/div> div classhatena-module-body> a hrefhttp://j.mp/1GpZ25Q>img srchttps://f.st-hatena.com/images/fotolife/t/takuya_1st/20150326/20150326141559.jpg?1427346991 width100px />/a>br/>「抜けるのかどうか」br/>都市伝説を検証した一冊。br/> /div>/div> div classhatena-module hatena-module-html> div classhatena-module-title>タグ/div> div classhatena-module-body> SCRIPT charsetutf-8 typetext/javascript srchttps://ws.amazon.co.jp/widgets/q?ServiceVersion20070822&MarketPlaceJP&IDV20070822/JP/takuya018-22/8006/ec279025-0790-4f72-856a-264aab7f4ec0> /SCRIPT> NOSCRIPT>A HREFhttps://ws.amazon.co.jp/widgets/q?ServiceVersion20070822&MarketPlaceJP&IDV20070822%2FJP%2Ftakuya018-22%2F8006%2Fec279025-0790-4f72-856a-264aab7f4ec0&OperationNoScript>Amazon.co.jp ウィジェット/A>/NOSCRIPT> /div>/div> div classhatena-module hatena-module-html> div classhatena-module-title>キャンペーン/div> div classhatena-module-body> div>a hrefhttp://px.a8.net/svt/ejp?a8mat2BHEPW+7JHOMQ+2M7E+6GJWX target_blank>img border0 width120 height60 alt srchttps://www28.a8.net/svt/bgt?aid140220356456&wid001&eno01&mids00000012209001085000&mc1>/a>img border0 width1 height1 srchttps://www14.a8.net/0.gif?a8mat2BHEPW+7JHOMQ+2M7E+6GJWX alt>/div> /div>/div> div classhatena-module hatena-module-recent-entries > div classhatena-module-title> a hrefhttps://takuya-1st.hatenablog.jp/archive> 最近書いた記事 /a> /div> div classhatena-module-body> ul classrecent-entries hatena-urllist > li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/09/11/145434 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title> Windowsで溜まり続けるキャッシュを消す。/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/09/02/025445 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title> WindowsでのiPhoneバックアップの場所/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/27/000000 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title> lxc の root ストレージを作り直す。( Failed getting root disk: No root device could be found) /a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/23/153917 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title>dockerfileでAPTプロキシとシェル変数を渡す例。/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/18/000000 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title>OpenWRTでパケットをマークして許可する(ポリシールーティング)/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/17/000000 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title> OpenWrtにfw4でポリシールーティングを入れる/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/16/000000 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title>nft で指定位置にinsert する/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/15/023938 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title>nftablesのfowardが記述が大量になる問題。/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/15/022112 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title>nftablesでaccept後のdropにマッチを回避できない。/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/14/171932 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title>nftables で、パケットが該当ルールに届いているかチェックする方法/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/02/000000_1 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title>Gitlab をAPIで使ってレポジトリ(プロジェクト)を管理。レポジトリのコピーと移動/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/08/01/000000 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title> vscodium - VSCode の自由ソフトウェア版に移行する。/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/07/24/152112 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title> wsl で xming(vcxsrv) 経由で mpv を起動する。/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/07/04/112844 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title> mpv でキー操作を書き換える。/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/07/03/080000 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title> mpv の設定を書いて、起動オプションを省略する/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/07/02/000000 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title> raspberry pi 4 は hdmi から音が出ない事がある。/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/07/01/000000 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title> ssh 経由でmpv を起動して、動画再生したい。/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/06/28/000000 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title> tvservice コマンドがない。/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/06/17/000000 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title> js で querySelector では取れない「コメント」ノードをを取得したい/a> /div> /li> li classurllist-item recent-entries-item> div classurllist-item-inner recent-entries-item-inner> a hrefhttps://takuya-1st.hatenablog.jp/entry/2024/06/15/000000 classurllist-title-link recent-entries-title-link urllist-title recent-entries-title>hdparm で HGST だけがまともな値を返してくれる。/a> /div> /li> /ul> /div>/div> div classhatena-module hatena-module-archive data-archive-typedefault data-archive-urlhttps://takuya-1st.hatenablog.jp/archive> div classhatena-module-title> a hrefhttps://takuya-1st.hatenablog.jp/archive>アーカイブ/a> /div> div classhatena-module-body> ul classhatena-urllist> li classarchive-module-year archive-module-year-hidden data-year2024> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024 classarchive-module-year-title archive-module-year-2024> 2024 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/09 classarchive-module-month-title archive-module-month-2024-9> 2024 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/08 classarchive-module-month-title archive-module-month-2024-8> 2024 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/07 classarchive-module-month-title archive-module-month-2024-7> 2024 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/06 classarchive-module-month-title archive-module-month-2024-6> 2024 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/05 classarchive-module-month-title archive-module-month-2024-5> 2024 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/04 classarchive-module-month-title archive-module-month-2024-4> 2024 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/03 classarchive-module-month-title archive-module-month-2024-3> 2024 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/02 classarchive-module-month-title archive-module-month-2024-2> 2024 / 2 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2024/01 classarchive-module-month-title archive-module-month-2024-1> 2024 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2023> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2023 classarchive-module-year-title archive-module-year-2023> 2023 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2023/12 classarchive-module-month-title archive-module-month-2023-12> 2023 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2023/09 classarchive-module-month-title archive-module-month-2023-9> 2023 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2023/08 classarchive-module-month-title archive-module-month-2023-8> 2023 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2023/07 classarchive-module-month-title archive-module-month-2023-7> 2023 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2023/06 classarchive-module-month-title archive-module-month-2023-6> 2023 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2023/05 classarchive-module-month-title archive-module-month-2023-5> 2023 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2023/04 classarchive-module-month-title archive-module-month-2023-4> 2023 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2023/03 classarchive-module-month-title archive-module-month-2023-3> 2023 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2023/02 classarchive-module-month-title archive-module-month-2023-2> 2023 / 2 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2023/01 classarchive-module-month-title archive-module-month-2023-1> 2023 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2022> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2022 classarchive-module-year-title archive-module-year-2022> 2022 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2022/12 classarchive-module-month-title archive-module-month-2022-12> 2022 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2022/11 classarchive-module-month-title archive-module-month-2022-11> 2022 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2022/10 classarchive-module-month-title archive-module-month-2022-10> 2022 / 10 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2022/09 classarchive-module-month-title archive-module-month-2022-9> 2022 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2022/08 classarchive-module-month-title archive-module-month-2022-8> 2022 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2022/07 classarchive-module-month-title archive-module-month-2022-7> 2022 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2022/06 classarchive-module-month-title archive-module-month-2022-6> 2022 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2022/05 classarchive-module-month-title archive-module-month-2022-5> 2022 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2022/04 classarchive-module-month-title archive-module-month-2022-4> 2022 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2022/03 classarchive-module-month-title archive-module-month-2022-3> 2022 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2022/02 classarchive-module-month-title archive-module-month-2022-2> 2022 / 2 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2022/01 classarchive-module-month-title archive-module-month-2022-1> 2022 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2021> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2021 classarchive-module-year-title archive-module-year-2021> 2021 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2021/12 classarchive-module-month-title archive-module-month-2021-12> 2021 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2021/11 classarchive-module-month-title archive-module-month-2021-11> 2021 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2021/10 classarchive-module-month-title archive-module-month-2021-10> 2021 / 10 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2021/09 classarchive-module-month-title archive-module-month-2021-9> 2021 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2021/08 classarchive-module-month-title archive-module-month-2021-8> 2021 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2021/07 classarchive-module-month-title archive-module-month-2021-7> 2021 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2021/06 classarchive-module-month-title archive-module-month-2021-6> 2021 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2021/05 classarchive-module-month-title archive-module-month-2021-5> 2021 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2021/04 classarchive-module-month-title archive-module-month-2021-4> 2021 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2021/03 classarchive-module-month-title archive-module-month-2021-3> 2021 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2021/02 classarchive-module-month-title archive-module-month-2021-2> 2021 / 2 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2021/01 classarchive-module-month-title archive-module-month-2021-1> 2021 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2020> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2020 classarchive-module-year-title archive-module-year-2020> 2020 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2020/12 classarchive-module-month-title archive-module-month-2020-12> 2020 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2020/11 classarchive-module-month-title archive-module-month-2020-11> 2020 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2020/10 classarchive-module-month-title archive-module-month-2020-10> 2020 / 10 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2020/09 classarchive-module-month-title archive-module-month-2020-9> 2020 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2020/07 classarchive-module-month-title archive-module-month-2020-7> 2020 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2020/06 classarchive-module-month-title archive-module-month-2020-6> 2020 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2020/05 classarchive-module-month-title archive-module-month-2020-5> 2020 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2020/04 classarchive-module-month-title archive-module-month-2020-4> 2020 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2020/03 classarchive-module-month-title archive-module-month-2020-3> 2020 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2020/02 classarchive-module-month-title archive-module-month-2020-2> 2020 / 2 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2020/01 classarchive-module-month-title archive-module-month-2020-1> 2020 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2019> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2019 classarchive-module-year-title archive-module-year-2019> 2019 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2019/12 classarchive-module-month-title archive-module-month-2019-12> 2019 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2019/11 classarchive-module-month-title archive-module-month-2019-11> 2019 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2019/10 classarchive-module-month-title archive-module-month-2019-10> 2019 / 10 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2019/09 classarchive-module-month-title archive-module-month-2019-9> 2019 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2019/08 classarchive-module-month-title archive-module-month-2019-8> 2019 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2019/07 classarchive-module-month-title archive-module-month-2019-7> 2019 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2019/06 classarchive-module-month-title archive-module-month-2019-6> 2019 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2019/05 classarchive-module-month-title archive-module-month-2019-5> 2019 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2019/04 classarchive-module-month-title archive-module-month-2019-4> 2019 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2019/03 classarchive-module-month-title archive-module-month-2019-3> 2019 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2019/01 classarchive-module-month-title archive-module-month-2019-1> 2019 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2018> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2018 classarchive-module-year-title archive-module-year-2018> 2018 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2018/12 classarchive-module-month-title archive-module-month-2018-12> 2018 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2018/11 classarchive-module-month-title archive-module-month-2018-11> 2018 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2018/10 classarchive-module-month-title archive-module-month-2018-10> 2018 / 10 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2018/09 classarchive-module-month-title archive-module-month-2018-9> 2018 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2018/08 classarchive-module-month-title archive-module-month-2018-8> 2018 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2018/07 classarchive-module-month-title archive-module-month-2018-7> 2018 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2018/06 classarchive-module-month-title archive-module-month-2018-6> 2018 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2018/05 classarchive-module-month-title archive-module-month-2018-5> 2018 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2018/04 classarchive-module-month-title archive-module-month-2018-4> 2018 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2018/03 classarchive-module-month-title archive-module-month-2018-3> 2018 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2018/02 classarchive-module-month-title archive-module-month-2018-2> 2018 / 2 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2018/01 classarchive-module-month-title archive-module-month-2018-1> 2018 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2017> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2017 classarchive-module-year-title archive-module-year-2017> 2017 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2017/12 classarchive-module-month-title archive-module-month-2017-12> 2017 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2017/11 classarchive-module-month-title archive-module-month-2017-11> 2017 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2017/10 classarchive-module-month-title archive-module-month-2017-10> 2017 / 10 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2017/09 classarchive-module-month-title archive-module-month-2017-9> 2017 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2017/08 classarchive-module-month-title archive-module-month-2017-8> 2017 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2017/07 classarchive-module-month-title archive-module-month-2017-7> 2017 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2017/06 classarchive-module-month-title archive-module-month-2017-6> 2017 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2017/05 classarchive-module-month-title archive-module-month-2017-5> 2017 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2017/04 classarchive-module-month-title archive-module-month-2017-4> 2017 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2017/03 classarchive-module-month-title archive-module-month-2017-3> 2017 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2017/02 classarchive-module-month-title archive-module-month-2017-2> 2017 / 2 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2017/01 classarchive-module-month-title archive-module-month-2017-1> 2017 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2016> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2016 classarchive-module-year-title archive-module-year-2016> 2016 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2016/12 classarchive-module-month-title archive-module-month-2016-12> 2016 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2016/11 classarchive-module-month-title archive-module-month-2016-11> 2016 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2016/10 classarchive-module-month-title archive-module-month-2016-10> 2016 / 10 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2016/09 classarchive-module-month-title archive-module-month-2016-9> 2016 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2016/08 classarchive-module-month-title archive-module-month-2016-8> 2016 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2016/07 classarchive-module-month-title archive-module-month-2016-7> 2016 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2016/06 classarchive-module-month-title archive-module-month-2016-6> 2016 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2016/05 classarchive-module-month-title archive-module-month-2016-5> 2016 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2016/04 classarchive-module-month-title archive-module-month-2016-4> 2016 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2016/03 classarchive-module-month-title archive-module-month-2016-3> 2016 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2016/02 classarchive-module-month-title archive-module-month-2016-2> 2016 / 2 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2016/01 classarchive-module-month-title archive-module-month-2016-1> 2016 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2015> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2015 classarchive-module-year-title archive-module-year-2015> 2015 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2015/12 classarchive-module-month-title archive-module-month-2015-12> 2015 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2015/11 classarchive-module-month-title archive-module-month-2015-11> 2015 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2015/10 classarchive-module-month-title archive-module-month-2015-10> 2015 / 10 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2015/09 classarchive-module-month-title archive-module-month-2015-9> 2015 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2015/08 classarchive-module-month-title archive-module-month-2015-8> 2015 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2015/07 classarchive-module-month-title archive-module-month-2015-7> 2015 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2015/06 classarchive-module-month-title archive-module-month-2015-6> 2015 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2015/05 classarchive-module-month-title archive-module-month-2015-5> 2015 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2015/04 classarchive-module-month-title archive-module-month-2015-4> 2015 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2015/03 classarchive-module-month-title archive-module-month-2015-3> 2015 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2015/02 classarchive-module-month-title archive-module-month-2015-2> 2015 / 2 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2015/01 classarchive-module-month-title archive-module-month-2015-1> 2015 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2014> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2014 classarchive-module-year-title archive-module-year-2014> 2014 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2014/12 classarchive-module-month-title archive-module-month-2014-12> 2014 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2014/11 classarchive-module-month-title archive-module-month-2014-11> 2014 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2014/10 classarchive-module-month-title archive-module-month-2014-10> 2014 / 10 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2014/09 classarchive-module-month-title archive-module-month-2014-9> 2014 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2014/08 classarchive-module-month-title archive-module-month-2014-8> 2014 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2014/07 classarchive-module-month-title archive-module-month-2014-7> 2014 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2014/06 classarchive-module-month-title archive-module-month-2014-6> 2014 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2014/05 classarchive-module-month-title archive-module-month-2014-5> 2014 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2014/04 classarchive-module-month-title archive-module-month-2014-4> 2014 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2014/03 classarchive-module-month-title archive-module-month-2014-3> 2014 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2014/02 classarchive-module-month-title archive-module-month-2014-2> 2014 / 2 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2014/01 classarchive-module-month-title archive-module-month-2014-1> 2014 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2013> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2013 classarchive-module-year-title archive-module-year-2013> 2013 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2013/12 classarchive-module-month-title archive-module-month-2013-12> 2013 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2013/11 classarchive-module-month-title archive-module-month-2013-11> 2013 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2013/10 classarchive-module-month-title archive-module-month-2013-10> 2013 / 10 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2013/09 classarchive-module-month-title archive-module-month-2013-9> 2013 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2013/08 classarchive-module-month-title archive-module-month-2013-8> 2013 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2013/07 classarchive-module-month-title archive-module-month-2013-7> 2013 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2013/06 classarchive-module-month-title archive-module-month-2013-6> 2013 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2013/05 classarchive-module-month-title archive-module-month-2013-5> 2013 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2013/04 classarchive-module-month-title archive-module-month-2013-4> 2013 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2013/03 classarchive-module-month-title archive-module-month-2013-3> 2013 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2013/01 classarchive-module-month-title archive-module-month-2013-1> 2013 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2012> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2012 classarchive-module-year-title archive-module-year-2012> 2012 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2012/12 classarchive-module-month-title archive-module-month-2012-12> 2012 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2012/11 classarchive-module-month-title archive-module-month-2012-11> 2012 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2012/10 classarchive-module-month-title archive-module-month-2012-10> 2012 / 10 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2012/09 classarchive-module-month-title archive-module-month-2012-9> 2012 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2012/08 classarchive-module-month-title archive-module-month-2012-8> 2012 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2012/07 classarchive-module-month-title archive-module-month-2012-7> 2012 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2012/06 classarchive-module-month-title archive-module-month-2012-6> 2012 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2012/05 classarchive-module-month-title archive-module-month-2012-5> 2012 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2012/04 classarchive-module-month-title archive-module-month-2012-4> 2012 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2012/03 classarchive-module-month-title archive-module-month-2012-3> 2012 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2012/02 classarchive-module-month-title archive-module-month-2012-2> 2012 / 2 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2012/01 classarchive-module-month-title archive-module-month-2012-1> 2012 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2011> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2011 classarchive-module-year-title archive-module-year-2011> 2011 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2011/12 classarchive-module-month-title archive-module-month-2011-12> 2011 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2011/11 classarchive-module-month-title archive-module-month-2011-11> 2011 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2011/10 classarchive-module-month-title archive-module-month-2011-10> 2011 / 10 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2011/09 classarchive-module-month-title archive-module-month-2011-9> 2011 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2011/08 classarchive-module-month-title archive-module-month-2011-8> 2011 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2011/07 classarchive-module-month-title archive-module-month-2011-7> 2011 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2011/06 classarchive-module-month-title archive-module-month-2011-6> 2011 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2011/05 classarchive-module-month-title archive-module-month-2011-5> 2011 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2011/04 classarchive-module-month-title archive-module-month-2011-4> 2011 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2011/03 classarchive-module-month-title archive-module-month-2011-3> 2011 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2011/02 classarchive-module-month-title archive-module-month-2011-2> 2011 / 2 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2011/01 classarchive-module-month-title archive-module-month-2011-1> 2011 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2010> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2010 classarchive-module-year-title archive-module-year-2010> 2010 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2010/12 classarchive-module-month-title archive-module-month-2010-12> 2010 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2010/11 classarchive-module-month-title archive-module-month-2010-11> 2010 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2010/10 classarchive-module-month-title archive-module-month-2010-10> 2010 / 10 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2010/09 classarchive-module-month-title archive-module-month-2010-9> 2010 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2010/08 classarchive-module-month-title archive-module-month-2010-8> 2010 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2010/07 classarchive-module-month-title archive-module-month-2010-7> 2010 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2010/06 classarchive-module-month-title archive-module-month-2010-6> 2010 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2010/05 classarchive-module-month-title archive-module-month-2010-5> 2010 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2010/04 classarchive-module-month-title archive-module-month-2010-4> 2010 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2010/03 classarchive-module-month-title archive-module-month-2010-3> 2010 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2010/02 classarchive-module-month-title archive-module-month-2010-2> 2010 / 2 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2010/01 classarchive-module-month-title archive-module-month-2010-1> 2010 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2009> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2009 classarchive-module-year-title archive-module-year-2009> 2009 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2009/12 classarchive-module-month-title archive-module-month-2009-12> 2009 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2009/11 classarchive-module-month-title archive-module-month-2009-11> 2009 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2009/10 classarchive-module-month-title archive-module-month-2009-10> 2009 / 10 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2009/09 classarchive-module-month-title archive-module-month-2009-9> 2009 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2009/08 classarchive-module-month-title archive-module-month-2009-8> 2009 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2009/07 classarchive-module-month-title archive-module-month-2009-7> 2009 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2009/06 classarchive-module-month-title archive-module-month-2009-6> 2009 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2009/05 classarchive-module-month-title archive-module-month-2009-5> 2009 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2009/04 classarchive-module-month-title archive-module-month-2009-4> 2009 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2009/03 classarchive-module-month-title archive-module-month-2009-3> 2009 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2009/02 classarchive-module-month-title archive-module-month-2009-2> 2009 / 2 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2009/01 classarchive-module-month-title archive-module-month-2009-1> 2009 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2008> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2008 classarchive-module-year-title archive-module-year-2008> 2008 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2008/12 classarchive-module-month-title archive-module-month-2008-12> 2008 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2008/11 classarchive-module-month-title archive-module-month-2008-11> 2008 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2008/09 classarchive-module-month-title archive-module-month-2008-9> 2008 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2008/08 classarchive-module-month-title archive-module-month-2008-8> 2008 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2008/07 classarchive-module-month-title archive-module-month-2008-7> 2008 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2008/06 classarchive-module-month-title archive-module-month-2008-6> 2008 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2008/05 classarchive-module-month-title archive-module-month-2008-5> 2008 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2008/03 classarchive-module-month-title archive-module-month-2008-3> 2008 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2008/02 classarchive-module-month-title archive-module-month-2008-2> 2008 / 2 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2008/01 classarchive-module-month-title archive-module-month-2008-1> 2008 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2007> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2007 classarchive-module-year-title archive-module-year-2007> 2007 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2007/12 classarchive-module-month-title archive-module-month-2007-12> 2007 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2007/11 classarchive-module-month-title archive-module-month-2007-11> 2007 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2007/10 classarchive-module-month-title archive-module-month-2007-10> 2007 / 10 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2007/08 classarchive-module-month-title archive-module-month-2007-8> 2007 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2007/06 classarchive-module-month-title archive-module-month-2007-6> 2007 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2007/05 classarchive-module-month-title archive-module-month-2007-5> 2007 / 5 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2007/04 classarchive-module-month-title archive-module-month-2007-4> 2007 / 4 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2007/03 classarchive-module-month-title archive-module-month-2007-3> 2007 / 3 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2007/02 classarchive-module-month-title archive-module-month-2007-2> 2007 / 2 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2007/01 classarchive-module-month-title archive-module-month-2007-1> 2007 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2006> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2006 classarchive-module-year-title archive-module-year-2006> 2006 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2006/12 classarchive-module-month-title archive-module-month-2006-12> 2006 / 12 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2006/11 classarchive-module-month-title archive-module-month-2006-11> 2006 / 11 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2006/10 classarchive-module-month-title archive-module-month-2006-10> 2006 / 10 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2006/09 classarchive-module-month-title archive-module-month-2006-9> 2006 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2006/08 classarchive-module-month-title archive-module-month-2006-8> 2006 / 8 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2006/07 classarchive-module-month-title archive-module-month-2006-7> 2006 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2006/06 classarchive-module-month-title archive-module-month-2006-6> 2006 / 6 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2006/05 classarchive-module-month-title archive-module-month-2006-5> 2006 / 5 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2005> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://takuya-1st.hatenablog.jp/archive/2005 classarchive-module-year-title archive-module-year-2005> 2005 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2005/09 classarchive-module-month-title archive-module-month-2005-9> 2005 / 9 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2005/07 classarchive-module-month-title archive-module-month-2005-7> 2005 / 7 /a> /li> li classarchive-module-month> a hrefhttps://takuya-1st.hatenablog.jp/archive/2005/06 classarchive-module-month-title archive-module-month-2005-6> 2005 / 6 /a> /li> /ul> /li> /ul> /div>/div> div classhatena-module hatena-module-html> div classhatena-module-title>Amazonおすすめ本/div> div classhatena-module-body> iframe srchttps://rcm-jp.amazon.co.jp/e/cm?ttakuya-hateblo-22&o9&p14&lst1&modebooks-jp&search片付け&fc1000000<1_blank&lc13366FF&bg1FFFFFF&fifr marginwidth0 marginheight0 width180 height600 border0 frameborder0 styleborder:none; scrollingno>/iframe> /div>/div> div classhatena-module hatena-module-html> div classhatena-module-title>コンテツのライセンスについて/div> div classhatena-module-body> このサイトの掲載内容(ブロク記事、コード)は、引用を除き、GPLに基づくものとします。ソースコード GNU General Public License version 3ブログ記事 GNU自由文書ライセンス(GFDL) Copyright (C) 2014 takuya_1st.br/> Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled GNU Free Documentation License. /div>/div> div classhatena-module hatena-module-html> div classhatena-module-title>DMM.com FX/div> div classhatena-module-body> a hrefhttp://px.a8.net/svt/ejp?a8mat2BW5U2+9MIAUQ+1NB0+6PRPD target_blank>img border0 width165 height120 alt srchttps://www23.a8.net/svt/bgt?aid140908682582&wid001&eno01&mids00000007686001128000&mc1>/a>img border0 width1 height1 srchttps://www14.a8.net/0.gif?a8mat2BW5U2+9MIAUQ+1NB0+6PRPD alt> /div>/div> div classhatena-module hatena-module-html> div classhatena-module-title>VISA/div> div classhatena-module-body> a hrefhttp://px.a8.net/svt/ejp?a8mat2BYG4Q+GB1F8Y+1E32+6QEUP target_blank>img border0 width234 height60 alt srchttps://www28.a8.net/svt/bgt?aid141015338986&wid001&eno01&mids00000006491001131000&mc1>/a>img border0 width1 height1 srchttps://www18.a8.net/0.gif?a8mat2BYG4Q+GB1F8Y+1E32+6QEUP alt> /div>/div> /div>/aside> /div>/div> div idbottom-editarea> script typetext/javascript>!--google_ad_client ca-pub-7708740420636125;/* はてなブログ用:フッター */google_ad_slot 4523656663;google_ad_width 336;google_ad_height 280;//-->/script>script typetext/javascriptsrchttps://pagead2.googlesyndication.com/pagead/show_ads.js>/script>script async srchttps://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js>/script>ins classadsbygoogle styledisplay:block data-ad-formatfluid data-ad-layout-key-gh-1h-30-4b+t3 data-ad-clientca-pub-7708740420636125 data-ad-slot7478339816>/ins>script> (adsbygoogle window.adsbygoogle || ).push({});/script> /div> /div> /div> footer idfooter data-brandhatenablog> div idfooter-inner> address classfooter-address> a hrefhttps://takuya-1st.hatenablog.jp/> img srchttps://cdn.image.st-hatena.com/image/square/17168ae5a8d156cc4c839caa5d69a1f196237274/backendimagemagick;height128;version1;width128/https%3A%2F%2Fcdn.user.blog.st-hatena.com%2Fblog_custom_icon%2F149816%2F1534599162244620 width16 height16 altそれマグで!/> span classfooter-address-name>それマグで!/span> /a> /address> p classservices> Powered by a hrefhttps://hatena.blog/>Hatena Blog/a> | a hrefhttps://blog.hatena.ne.jp/-/abuse_report?target_urlhttps%3A%2F%2Ftakuya-1st.hatenablog.jp%2F classreport-abuse-link test-report-abuse-link target_blank>ブログを報告する/a> /p> /div>/footer> script async srchttps://s.hatena.ne.jp/js/widget/star.js>/script> script> if (typeof window.Hatena undefined) { window.Hatena {}; } if (!Hatena.hasOwnProperty(Star)) { Hatena.Star { VERSION: 2, }; } /script> div classquote-box> div classtooltip-quote tooltip-quote-stock> i classblogicon-quote title引用をストック>/i> /div> div classtooltip-quote tooltip-quote-tweet js-tooltip-quote-tweet> a classjs-tweet-quote target_blank data-track-namequote-tweet data-track-once> img srchttps://cdn.blog.st-hatena.com/images/admin/quote/quote-x-icon.svg?versionf9947fdf1627a1d1b3c8c87a6a5233 title引用して投稿する > /a> /div>/div>div classquote-stock-panel idquote-stock-message-box styleposition: absolute; z-index: 3000> div classmessage-box idquote-stock-succeeded-message styledisplay: none> p>引用をストックしました/p> button classbtn btn-primary idquote-stock-show-editor-button data-track-namecuration-quote-edit-button>ストック一覧を見る/button> button classbtn quote-stock-close-message-button>閉じる/button> /div> div classmessage-box idquote-login-required-message styledisplay: none> p>引用するにはまずログインしてください/p> button classbtn btn-primary idquote-login-button>ログイン/button> button classbtn quote-stock-close-message-button>閉じる/button> /div> div classerror-box idquote-stock-failed-message styledisplay: none> p>引用をストックできませんでした。再度お試しください/p> button classbtn quote-stock-close-message-button>閉じる/button> /div> div classerror-box idunstockable-quote-message-box styledisplay: none; position: absolute; z-index: 3000;> p>限定公開記事のため引用できません。/p> /div>/div>script typex-underscore-template idjs-requote-button-template> div classrequote-button js-requote-button> button classrequote-button-btn tipsy-top title引用する>i classblogicon-quote>/i>/button> /div>/script> div idhidden-subscribe-button styledisplay: none;> div classhatena-follow-button-box btn-subscribe js-hatena-follow-button-box > a href# classhatena-follow-button js-hatena-follow-button> span classsubscribing> span classforeground>読者です/span> span classbackground>読者をやめる/span> /span> span classunsubscribing data-track-nameprofile-widget-subscribe-button data-track-once> span classforeground>読者になる/span> span classbackground>読者になる/span> /span> /a> div classsubscription-count-box js-subscription-count-box> i>/i> u>/u> span classsubscription-count js-subscription-count> /span> /div>/div> /div> script async srchttps://platform.twitter.com/widgets.js charsetutf-8>/script>script srchttps://b.st-hatena.com/js/bookmark_button.js charsetutf-8 asyncasync>/script>script typetext/javascript srchttps://cdn.blog.st-hatena.com/js/external/jquery.min.js?v1.12.4&versionf9947fdf1627a1d1b3c8c87a6a5233>/script>script srchttps://cdn.blog.st-hatena.com/js/texts-ja.js?versionf9947fdf1627a1d1b3c8c87a6a5233>/script> script idvendors-js data-envproduction srchttps://cdn.blog.st-hatena.com/js/vendors.js?versionf9947fdf1627a1d1b3c8c87a6a5233 crossoriginanonymous>/script>script idhatenablog-js data-envproduction srchttps://cdn.blog.st-hatena.com/js/hatenablog.js?versionf9947fdf1627a1d1b3c8c87a6a5233 crossoriginanonymous data-page-idindex>/script> script>Hatena.Diary.GlobalHeader.init()/script> script idvalve-dmp data-serviceblog srchttps://cdn.pool.st-hatena.com/valve/dmp.js data-test-iddmpjs async>/script> /body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]